aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Wilson <jessewilson@google.com>2009-12-10 17:44:48 -0800
committerJesse Wilson <jessewilson@google.com>2009-12-10 18:00:52 -0800
commit090f9b4c879985bc747c214f82c62471e60c7742 (patch)
tree95192dffce5d736fb52a7bb3484bf96e12bf168f
parentc65c4ab12900f32a5a64f66d053f6fe587c64569 (diff)
downloadandroid_external_guava-090f9b4c879985bc747c214f82c62471e60c7742.tar.gz
android_external_guava-090f9b4c879985bc747c214f82c62471e60c7742.tar.bz2
android_external_guava-090f9b4c879985bc747c214f82c62471e60c7742.zip
Checkin Google Gollections r127 as Guava.
-rw-r--r--Android.mk27
-rw-r--r--COPYING202
-rw-r--r--MODULE_LICENSE_APACHE20
-rw-r--r--NOTICE202
-rw-r--r--README.android11
-rw-r--r--build.properties7
-rw-r--r--build.xml189
-rw-r--r--google-collect.iml21
-rw-r--r--google-collect.ipr405
-rw-r--r--gwt/com/google/common/Collect.gwt.xml6
-rw-r--r--gwt/com/google/common/collect/ArrayListMultimap_CustomFieldSerializer.java45
-rw-r--r--gwt/com/google/common/collect/ByFunctionOrdering_CustomFieldSerializer.java48
-rw-r--r--gwt/com/google/common/collect/ComparatorOrdering_CustomFieldSerializer.java47
-rw-r--r--gwt/com/google/common/collect/CompoundOrdering_CustomFieldSerializer.java47
-rw-r--r--gwt/com/google/common/collect/EmptyImmutableListMultimap_CustomFieldSerializer.java42
-rw-r--r--gwt/com/google/common/collect/EmptyImmutableList_CustomFieldSerializer.java41
-rw-r--r--gwt/com/google/common/collect/EmptyImmutableMap_CustomFieldSerializer.java42
-rw-r--r--gwt/com/google/common/collect/EmptyImmutableMultiset_CustomFieldSerializer.java42
-rw-r--r--gwt/com/google/common/collect/EmptyImmutableSetMultimap_CustomFieldSerializer.java42
-rw-r--r--gwt/com/google/common/collect/EmptyImmutableSet_CustomFieldSerializer.java41
-rw-r--r--gwt/com/google/common/collect/EmptyImmutableSortedSet_CustomFieldSerializer.java59
-rw-r--r--gwt/com/google/common/collect/ExplicitOrdering_CustomFieldSerializer.java45
-rw-r--r--gwt/com/google/common/collect/HashMultimap_CustomFieldSerializer.java45
-rw-r--r--gwt/com/google/common/collect/HashMultiset_CustomFieldSerializer.java44
-rw-r--r--gwt/com/google/common/collect/ImmutableListMultimap_CustomFieldSerializer.java45
-rw-r--r--gwt/com/google/common/collect/ImmutableMultiset_CustomFieldSerializer.java44
-rw-r--r--gwt/com/google/common/collect/ImmutableSetMultimap_CustomFieldSerializer.java45
-rw-r--r--gwt/com/google/common/collect/ImmutableSortedMap_CustomFieldSerializer.java59
-rw-r--r--gwt/com/google/common/collect/LinkedHashMultimap_CustomFieldSerializer.java61
-rw-r--r--gwt/com/google/common/collect/LinkedHashMultiset_CustomFieldSerializer.java45
-rw-r--r--gwt/com/google/common/collect/LinkedListMultimap_CustomFieldSerializer.java56
-rw-r--r--gwt/com/google/common/collect/Multimap_CustomFieldSerializerBase.java82
-rw-r--r--gwt/com/google/common/collect/Multiset_CustomFieldSerializerBase.java69
-rw-r--r--gwt/com/google/common/collect/NaturalOrdering_CustomFieldSerializer.java41
-rw-r--r--gwt/com/google/common/collect/NullsFirstOrdering_CustomFieldSerializer.java45
-rw-r--r--gwt/com/google/common/collect/NullsLastOrdering_CustomFieldSerializer.java45
-rw-r--r--gwt/com/google/common/collect/RegularImmutableBiMap_CustomFieldSerializer.java56
-rw-r--r--gwt/com/google/common/collect/RegularImmutableList_CustomFieldSerializer.java56
-rw-r--r--gwt/com/google/common/collect/RegularImmutableMap_CustomFieldSerializer.java55
-rw-r--r--gwt/com/google/common/collect/RegularImmutableSet_CustomFieldSerializer.java54
-rw-r--r--gwt/com/google/common/collect/RegularImmutableSortedSet_CustomFieldSerializer.java66
-rw-r--r--gwt/com/google/common/collect/ReverseNaturalOrdering_CustomFieldSerializer.java42
-rw-r--r--gwt/com/google/common/collect/ReverseOrdering_CustomFieldSerializer.java45
-rw-r--r--gwt/com/google/common/collect/SingletonImmutableSet_CustomFieldSerializer.java44
-rw-r--r--gwt/com/google/common/collect/UsingToStringOrdering_CustomFieldSerializer.java41
-rw-r--r--gwt/com/google/common/super/com/google/common/base/Platform.java27
-rw-r--r--gwt/com/google/common/super/com/google/common/collect/MapMaker.java165
-rw-r--r--gwt/com/google/common/super/com/google/common/collect/Platform.java55
-rw-r--r--gwt/com/google/common/super/com/google/common/collect/Serialization.java101
-rw-r--r--gwt/com/google/common/super/java/io/InvalidObjectException.java27
-rw-r--r--gwt/com/google/common/super/java/io/ObjectInputStream.java39
-rw-r--r--gwt/com/google/common/super/java/io/ObjectOutputStream.java39
-rw-r--r--gwt/com/google/common/super/java/io/ObjectStreamException.java27
-rw-r--r--gwt/com/google/common/super/java/lang/AbstractMethodError.java33
-rw-r--r--gwt/com/google/common/super/java/lang/ClassNotFoundException.java28
-rw-r--r--gwt/com/google/common/super/java/lang/InterruptedException.java27
-rw-r--r--gwt/com/google/common/super/java/util/Properties.java54
-rw-r--r--gwt/com/google/common/super/java/util/concurrent/ConcurrentHashMap.java144
-rw-r--r--gwt/com/google/common/super/java/util/concurrent/ConcurrentMap.java35
-rw-r--r--gwt/com/google/common/super/java/util/concurrent/TimeUnit.java157
-rw-r--r--gwt/com/google/common/super/java/util/concurrent/atomic/AtomicInteger.java109
-rw-r--r--javadoc/allclasses-frame.html221
-rw-r--r--javadoc/allclasses-noframe.html221
-rw-r--r--javadoc/com/google/common/annotations/GwtCompatible.html274
-rw-r--r--javadoc/com/google/common/annotations/GwtIncompatible.html230
-rw-r--r--javadoc/com/google/common/annotations/VisibleForTesting.html176
-rw-r--r--javadoc/com/google/common/annotations/class-use/GwtCompatible.html1201
-rw-r--r--javadoc/com/google/common/annotations/class-use/GwtIncompatible.html357
-rw-r--r--javadoc/com/google/common/annotations/class-use/VisibleForTesting.html144
-rw-r--r--javadoc/com/google/common/annotations/package-frame.html36
-rw-r--r--javadoc/com/google/common/annotations/package-summary.html172
-rw-r--r--javadoc/com/google/common/annotations/package-tree.html154
-rw-r--r--javadoc/com/google/common/annotations/package-use.html235
-rw-r--r--javadoc/com/google/common/base/FinalizablePhantomReference.html277
-rw-r--r--javadoc/com/google/common/base/FinalizableReference.html226
-rw-r--r--javadoc/com/google/common/base/FinalizableReferenceQueue.html241
-rw-r--r--javadoc/com/google/common/base/FinalizableSoftReference.html274
-rw-r--r--javadoc/com/google/common/base/FinalizableWeakReference.html265
-rw-r--r--javadoc/com/google/common/base/Function.html270
-rw-r--r--javadoc/com/google/common/base/Functions.html421
-rw-r--r--javadoc/com/google/common/base/Joiner.MapJoiner.html321
-rw-r--r--javadoc/com/google/common/base/Joiner.html626
-rw-r--r--javadoc/com/google/common/base/Objects.html276
-rw-r--r--javadoc/com/google/common/base/Preconditions.html694
-rw-r--r--javadoc/com/google/common/base/Predicate.html260
-rw-r--r--javadoc/com/google/common/base/Predicates.html684
-rw-r--r--javadoc/com/google/common/base/Supplier.html220
-rw-r--r--javadoc/com/google/common/base/Suppliers.html341
-rw-r--r--javadoc/com/google/common/base/class-use/FinalizablePhantomReference.html144
-rw-r--r--javadoc/com/google/common/base/class-use/FinalizableReference.html200
-rw-r--r--javadoc/com/google/common/base/class-use/FinalizableReferenceQueue.html193
-rw-r--r--javadoc/com/google/common/base/class-use/FinalizableSoftReference.html144
-rw-r--r--javadoc/com/google/common/base/class-use/FinalizableWeakReference.html144
-rw-r--r--javadoc/com/google/common/base/class-use/Function.html516
-rw-r--r--javadoc/com/google/common/base/class-use/Functions.html144
-rw-r--r--javadoc/com/google/common/base/class-use/Joiner.MapJoiner.html191
-rw-r--r--javadoc/com/google/common/base/class-use/Joiner.html208
-rw-r--r--javadoc/com/google/common/base/class-use/Objects.html144
-rw-r--r--javadoc/com/google/common/base/class-use/Preconditions.html144
-rw-r--r--javadoc/com/google/common/base/class-use/Predicate.html840
-rw-r--r--javadoc/com/google/common/base/class-use/Predicates.html144
-rw-r--r--javadoc/com/google/common/base/class-use/Supplier.html382
-rw-r--r--javadoc/com/google/common/base/class-use/Suppliers.html144
-rw-r--r--javadoc/com/google/common/base/package-frame.html69
-rw-r--r--javadoc/com/google/common/base/package-summary.html247
-rw-r--r--javadoc/com/google/common/base/package-tree.html169
-rw-r--r--javadoc/com/google/common/base/package-use.html242
-rw-r--r--javadoc/com/google/common/collect/AbstractIterator.html422
-rw-r--r--javadoc/com/google/common/collect/ArrayListMultimap.html981
-rw-r--r--javadoc/com/google/common/collect/AsynchronousComputationException.html250
-rw-r--r--javadoc/com/google/common/collect/BiMap.html423
-rw-r--r--javadoc/com/google/common/collect/ClassToInstanceMap.html314
-rw-r--r--javadoc/com/google/common/collect/Collections2.html299
-rw-r--r--javadoc/com/google/common/collect/ComputationException.html250
-rw-r--r--javadoc/com/google/common/collect/ConcurrentHashMultiset.html1275
-rw-r--r--javadoc/com/google/common/collect/EnumBiMap.html753
-rw-r--r--javadoc/com/google/common/collect/EnumHashBiMap.html731
-rw-r--r--javadoc/com/google/common/collect/EnumMultiset.html1126
-rw-r--r--javadoc/com/google/common/collect/ForwardingCollection.html740
-rw-r--r--javadoc/com/google/common/collect/ForwardingConcurrentMap.html474
-rw-r--r--javadoc/com/google/common/collect/ForwardingIterator.html373
-rw-r--r--javadoc/com/google/common/collect/ForwardingList.html764
-rw-r--r--javadoc/com/google/common/collect/ForwardingListIterator.html493
-rw-r--r--javadoc/com/google/common/collect/ForwardingMap.html833
-rw-r--r--javadoc/com/google/common/collect/ForwardingMapEntry.html490
-rw-r--r--javadoc/com/google/common/collect/ForwardingMultimap.html930
-rw-r--r--javadoc/com/google/common/collect/ForwardingMultiset.html701
-rw-r--r--javadoc/com/google/common/collect/ForwardingObject.html320
-rw-r--r--javadoc/com/google/common/collect/ForwardingQueue.html457
-rw-r--r--javadoc/com/google/common/collect/ForwardingSet.html428
-rw-r--r--javadoc/com/google/common/collect/ForwardingSortedMap.html523
-rw-r--r--javadoc/com/google/common/collect/ForwardingSortedSet.html506
-rw-r--r--javadoc/com/google/common/collect/HashBiMap.html736
-rw-r--r--javadoc/com/google/common/collect/HashMultimap.html953
-rw-r--r--javadoc/com/google/common/collect/HashMultiset.html1154
-rw-r--r--javadoc/com/google/common/collect/ImmutableBiMap.Builder.html338
-rw-r--r--javadoc/com/google/common/collect/ImmutableBiMap.html1062
-rw-r--r--javadoc/com/google/common/collect/ImmutableClassToInstanceMap.Builder.html343
-rw-r--r--javadoc/com/google/common/collect/ImmutableClassToInstanceMap.html446
-rw-r--r--javadoc/com/google/common/collect/ImmutableCollection.html648
-rw-r--r--javadoc/com/google/common/collect/ImmutableList.Builder.html392
-rw-r--r--javadoc/com/google/common/collect/ImmutableList.html1143
-rw-r--r--javadoc/com/google/common/collect/ImmutableListMultimap.Builder.html394
-rw-r--r--javadoc/com/google/common/collect/ImmutableListMultimap.html670
-rw-r--r--javadoc/com/google/common/collect/ImmutableMap.Builder.html330
-rw-r--r--javadoc/com/google/common/collect/ImmutableMap.html1073
-rw-r--r--javadoc/com/google/common/collect/ImmutableMultimap.Builder.html381
-rw-r--r--javadoc/com/google/common/collect/ImmutableMultimap.html1222
-rw-r--r--javadoc/com/google/common/collect/ImmutableMultiset.Builder.html453
-rw-r--r--javadoc/com/google/common/collect/ImmutableMultiset.html943
-rw-r--r--javadoc/com/google/common/collect/ImmutableSet.Builder.html402
-rw-r--r--javadoc/com/google/common/collect/ImmutableSet.html797
-rw-r--r--javadoc/com/google/common/collect/ImmutableSetMultimap.Builder.html396
-rw-r--r--javadoc/com/google/common/collect/ImmutableSetMultimap.html706
-rw-r--r--javadoc/com/google/common/collect/ImmutableSortedMap.Builder.html339
-rw-r--r--javadoc/com/google/common/collect/ImmutableSortedMap.html1178
-rw-r--r--javadoc/com/google/common/collect/ImmutableSortedSet.Builder.html400
-rw-r--r--javadoc/com/google/common/collect/ImmutableSortedSet.html1116
-rw-r--r--javadoc/com/google/common/collect/Iterables.html1235
-rw-r--r--javadoc/com/google/common/collect/Iterators.html1379
-rw-r--r--javadoc/com/google/common/collect/LinkedHashMultimap.html975
-rw-r--r--javadoc/com/google/common/collect/LinkedHashMultiset.html1159
-rw-r--r--javadoc/com/google/common/collect/LinkedListMultimap.html998
-rw-r--r--javadoc/com/google/common/collect/ListMultimap.html386
-rw-r--r--javadoc/com/google/common/collect/Lists.html667
-rw-r--r--javadoc/com/google/common/collect/MapDifference.ValueDifference.html296
-rw-r--r--javadoc/com/google/common/collect/MapDifference.html385
-rw-r--r--javadoc/com/google/common/collect/MapMaker.html616
-rw-r--r--javadoc/com/google/common/collect/Maps.html1016
-rw-r--r--javadoc/com/google/common/collect/Multimap.html752
-rw-r--r--javadoc/com/google/common/collect/Multimaps.html914
-rw-r--r--javadoc/com/google/common/collect/Multiset.Entry.html411
-rw-r--r--javadoc/com/google/common/collect/Multiset.html875
-rw-r--r--javadoc/com/google/common/collect/Multisets.html277
-rw-r--r--javadoc/com/google/common/collect/MutableClassToInstanceMap.html535
-rw-r--r--javadoc/com/google/common/collect/ObjectArrays.html370
-rw-r--r--javadoc/com/google/common/collect/Ordering.html1109
-rw-r--r--javadoc/com/google/common/collect/PeekingIterator.html301
-rw-r--r--javadoc/com/google/common/collect/SetMultimap.html422
-rw-r--r--javadoc/com/google/common/collect/Sets.SetView.html302
-rw-r--r--javadoc/com/google/common/collect/Sets.html999
-rw-r--r--javadoc/com/google/common/collect/SortedSetMultimap.html396
-rw-r--r--javadoc/com/google/common/collect/TreeMultimap.html1023
-rw-r--r--javadoc/com/google/common/collect/TreeMultiset.html1189
-rw-r--r--javadoc/com/google/common/collect/UnmodifiableIterator.html282
-rw-r--r--javadoc/com/google/common/collect/class-use/AbstractIterator.html144
-rw-r--r--javadoc/com/google/common/collect/class-use/ArrayListMultimap.html222
-rw-r--r--javadoc/com/google/common/collect/class-use/AsynchronousComputationException.html144
-rw-r--r--javadoc/com/google/common/collect/class-use/BiMap.html291
-rw-r--r--javadoc/com/google/common/collect/class-use/ClassToInstanceMap.html189
-rw-r--r--javadoc/com/google/common/collect/class-use/Collections2.html144
-rw-r--r--javadoc/com/google/common/collect/class-use/ComputationException.html181
-rw-r--r--javadoc/com/google/common/collect/class-use/ConcurrentHashMultiset.html206
-rw-r--r--javadoc/com/google/common/collect/class-use/EnumBiMap.html209
-rw-r--r--javadoc/com/google/common/collect/class-use/EnumHashBiMap.html207
-rw-r--r--javadoc/com/google/common/collect/class-use/EnumMultiset.html207
-rw-r--r--javadoc/com/google/common/collect/class-use/ForwardingCollection.html213
-rw-r--r--javadoc/com/google/common/collect/class-use/ForwardingConcurrentMap.html144
-rw-r--r--javadoc/com/google/common/collect/class-use/ForwardingIterator.html182
-rw-r--r--javadoc/com/google/common/collect/class-use/ForwardingList.html144
-rw-r--r--javadoc/com/google/common/collect/class-use/ForwardingListIterator.html144
-rw-r--r--javadoc/com/google/common/collect/class-use/ForwardingMap.html231
-rw-r--r--javadoc/com/google/common/collect/class-use/ForwardingMapEntry.html144
-rw-r--r--javadoc/com/google/common/collect/class-use/ForwardingMultimap.html144
-rw-r--r--javadoc/com/google/common/collect/class-use/ForwardingMultiset.html144
-rw-r--r--javadoc/com/google/common/collect/class-use/ForwardingObject.html320
-rw-r--r--javadoc/com/google/common/collect/class-use/ForwardingQueue.html144
-rw-r--r--javadoc/com/google/common/collect/class-use/ForwardingSet.html181
-rw-r--r--javadoc/com/google/common/collect/class-use/ForwardingSortedMap.html144
-rw-r--r--javadoc/com/google/common/collect/class-use/ForwardingSortedSet.html144
-rw-r--r--javadoc/com/google/common/collect/class-use/HashBiMap.html219
-rw-r--r--javadoc/com/google/common/collect/class-use/HashMultimap.html222
-rw-r--r--javadoc/com/google/common/collect/class-use/HashMultiset.html220
-rw-r--r--javadoc/com/google/common/collect/class-use/ImmutableBiMap.Builder.html205
-rw-r--r--javadoc/com/google/common/collect/class-use/ImmutableBiMap.html320
-rw-r--r--javadoc/com/google/common/collect/class-use/ImmutableClassToInstanceMap.Builder.html223
-rw-r--r--javadoc/com/google/common/collect/class-use/ImmutableClassToInstanceMap.html199
-rw-r--r--javadoc/com/google/common/collect/class-use/ImmutableCollection.html272
-rw-r--r--javadoc/com/google/common/collect/class-use/ImmutableList.Builder.html220
-rw-r--r--javadoc/com/google/common/collect/class-use/ImmutableList.html496
-rw-r--r--javadoc/com/google/common/collect/class-use/ImmutableListMultimap.Builder.html223
-rw-r--r--javadoc/com/google/common/collect/class-use/ImmutableListMultimap.html330
-rw-r--r--javadoc/com/google/common/collect/class-use/ImmutableMap.Builder.html230
-rw-r--r--javadoc/com/google/common/collect/class-use/ImmutableMap.html371
-rw-r--r--javadoc/com/google/common/collect/class-use/ImmutableMultimap.Builder.html249
-rw-r--r--javadoc/com/google/common/collect/class-use/ImmutableMultimap.html338
-rw-r--r--javadoc/com/google/common/collect/class-use/ImmutableMultiset.Builder.html239
-rw-r--r--javadoc/com/google/common/collect/class-use/ImmutableMultiset.html250
-rw-r--r--javadoc/com/google/common/collect/class-use/ImmutableSet.Builder.html241
-rw-r--r--javadoc/com/google/common/collect/class-use/ImmutableSet.html476
-rw-r--r--javadoc/com/google/common/collect/class-use/ImmutableSetMultimap.Builder.html224
-rw-r--r--javadoc/com/google/common/collect/class-use/ImmutableSetMultimap.html312
-rw-r--r--javadoc/com/google/common/collect/class-use/ImmutableSortedMap.Builder.html242
-rw-r--r--javadoc/com/google/common/collect/class-use/ImmutableSortedMap.html388
-rw-r--r--javadoc/com/google/common/collect/class-use/ImmutableSortedSet.Builder.html260
-rw-r--r--javadoc/com/google/common/collect/class-use/ImmutableSortedSet.html433
-rw-r--r--javadoc/com/google/common/collect/class-use/Iterables.html144
-rw-r--r--javadoc/com/google/common/collect/class-use/Iterators.html144
-rw-r--r--javadoc/com/google/common/collect/class-use/LinkedHashMultimap.html222
-rw-r--r--javadoc/com/google/common/collect/class-use/LinkedHashMultiset.html220
-rw-r--r--javadoc/com/google/common/collect/class-use/LinkedListMultimap.html221
-rw-r--r--javadoc/com/google/common/collect/class-use/ListMultimap.html294
-rw-r--r--javadoc/com/google/common/collect/class-use/Lists.html144
-rw-r--r--javadoc/com/google/common/collect/class-use/MapDifference.ValueDifference.html182
-rw-r--r--javadoc/com/google/common/collect/class-use/MapDifference.html189
-rw-r--r--javadoc/com/google/common/collect/class-use/MapMaker.html239
-rw-r--r--javadoc/com/google/common/collect/class-use/Maps.html144
-rw-r--r--javadoc/com/google/common/collect/class-use/Multimap.html620
-rw-r--r--javadoc/com/google/common/collect/class-use/Multimaps.html144
-rw-r--r--javadoc/com/google/common/collect/class-use/Multiset.Entry.html230
-rw-r--r--javadoc/com/google/common/collect/class-use/Multiset.html309
-rw-r--r--javadoc/com/google/common/collect/class-use/Multisets.html144
-rw-r--r--javadoc/com/google/common/collect/class-use/MutableClassToInstanceMap.html204
-rw-r--r--javadoc/com/google/common/collect/class-use/ObjectArrays.html144
-rw-r--r--javadoc/com/google/common/collect/class-use/Ordering.html390
-rw-r--r--javadoc/com/google/common/collect/class-use/PeekingIterator.html188
-rw-r--r--javadoc/com/google/common/collect/class-use/SetMultimap.html335
-rw-r--r--javadoc/com/google/common/collect/class-use/Sets.SetView.html221
-rw-r--r--javadoc/com/google/common/collect/class-use/Sets.html144
-rw-r--r--javadoc/com/google/common/collect/class-use/SortedSetMultimap.html277
-rw-r--r--javadoc/com/google/common/collect/class-use/TreeMultimap.html225
-rw-r--r--javadoc/com/google/common/collect/class-use/TreeMultiset.html225
-rw-r--r--javadoc/com/google/common/collect/class-use/UnmodifiableIterator.html364
-rw-r--r--javadoc/com/google/common/collect/package-frame.html204
-rw-r--r--javadoc/com/google/common/collect/package-summary.html704
-rw-r--r--javadoc/com/google/common/collect/package-tree.html241
-rw-r--r--javadoc/com/google/common/collect/package-use.html545
-rw-r--r--javadoc/constant-values.html146
-rw-r--r--javadoc/deprecated-list.html161
-rw-r--r--javadoc/help-doc.html223
-rw-r--r--javadoc/index-all.html3060
-rw-r--r--javadoc/index.html39
-rw-r--r--javadoc/overview-frame.html46
-rw-r--r--javadoc/overview-summary.html160
-rw-r--r--javadoc/overview-tree.html259
-rw-r--r--javadoc/package-list3
-rw-r--r--javadoc/resources/inherit.gifbin0 -> 57 bytes
-rw-r--r--javadoc/serialized-form.html1290
-rw-r--r--javadoc/stylesheet.css29
-rw-r--r--lib/cglib-nodep-2.2.jarbin0 -> 322362 bytes
-rw-r--r--lib/easymock-2.4.jarbin0 -> 78815 bytes
-rw-r--r--lib/easymockclassextension-2.4.jarbin0 -> 56010 bytes
-rw-r--r--lib/gwt-servlet.jarbin0 -> 938019 bytes
-rw-r--r--lib/jsr305.jarbin0 -> 33017 bytes
-rw-r--r--lib/junit.jarbin0 -> 121070 bytes
-rw-r--r--lib/tl4j-1.1.0.jarbin0 -> 5578 bytes
-rw-r--r--src/com/google/common/annotations/GwtCompatible.java88
-rw-r--r--src/com/google/common/annotations/GwtIncompatible.java52
-rw-r--r--src/com/google/common/annotations/VisibleForTesting.java26
-rw-r--r--src/com/google/common/base/FinalizablePhantomReference.java46
-rw-r--r--src/com/google/common/base/FinalizableReference.java35
-rw-r--r--src/com/google/common/base/FinalizableReferenceQueue.java313
-rw-r--r--src/com/google/common/base/FinalizableSoftReference.java42
-rw-r--r--src/com/google/common/base/FinalizableWeakReference.java42
-rw-r--r--src/com/google/common/base/Function.java67
-rw-r--r--src/com/google/common/base/Functions.java285
-rw-r--r--src/com/google/common/base/Joiner.java341
-rw-r--r--src/com/google/common/base/Objects.java69
-rw-r--r--src/com/google/common/base/Platform.java38
-rw-r--r--src/com/google/common/base/Preconditions.java403
-rw-r--r--src/com/google/common/base/Predicate.java62
-rw-r--r--src/com/google/common/base/Predicates.java554
-rw-r--r--src/com/google/common/base/Supplier.java37
-rw-r--r--src/com/google/common/base/Suppliers.java144
-rw-r--r--src/com/google/common/base/internal/Finalizer.java207
-rw-r--r--src/com/google/common/base/package-info.java20
-rw-r--r--src/com/google/common/collect/AbstractBiMap.java394
-rw-r--r--src/com/google/common/collect/AbstractIterator.java164
-rw-r--r--src/com/google/common/collect/AbstractListMultimap.java86
-rw-r--r--src/com/google/common/collect/AbstractMapBasedMultiset.java414
-rw-r--r--src/com/google/common/collect/AbstractMapEntry.java64
-rw-r--r--src/com/google/common/collect/AbstractMultimap.java1492
-rw-r--r--src/com/google/common/collect/AbstractMultiset.java295
-rw-r--r--src/com/google/common/collect/AbstractSetMultimap.java95
-rw-r--r--src/com/google/common/collect/AbstractSortedSetMultimap.java74
-rw-r--r--src/com/google/common/collect/ArrayListMultimap.java158
-rw-r--r--src/com/google/common/collect/AsynchronousComputationException.java32
-rw-r--r--src/com/google/common/collect/BiMap.java102
-rw-r--r--src/com/google/common/collect/ByFunctionOrdering.java69
-rw-r--r--src/com/google/common/collect/ClassToInstanceMap.java58
-rw-r--r--src/com/google/common/collect/Collections2.java287
-rw-r--r--src/com/google/common/collect/ComparatorOrdering.java74
-rw-r--r--src/com/google/common/collect/CompoundOrdering.java76
-rw-r--r--src/com/google/common/collect/ComputationException.java33
-rw-r--r--src/com/google/common/collect/ConcurrentHashMultiset.java485
-rw-r--r--src/com/google/common/collect/ConstrainedMap.java155
-rw-r--r--src/com/google/common/collect/CustomConcurrentHashMap.java2161
-rw-r--r--src/com/google/common/collect/EmptyImmutableList.java124
-rw-r--r--src/com/google/common/collect/EmptyImmutableListMultimap.java40
-rw-r--r--src/com/google/common/collect/EmptyImmutableMap.java90
-rw-r--r--src/com/google/common/collect/EmptyImmutableMultiset.java39
-rw-r--r--src/com/google/common/collect/EmptyImmutableSet.java95
-rw-r--r--src/com/google/common/collect/EmptyImmutableSetMultimap.java40
-rw-r--r--src/com/google/common/collect/EmptyImmutableSortedSet.java112
-rw-r--r--src/com/google/common/collect/EnumBiMap.java125
-rw-r--r--src/com/google/common/collect/EnumHashBiMap.java109
-rw-r--r--src/com/google/common/collect/EnumMultiset.java89
-rw-r--r--src/com/google/common/collect/ExpirationTimer.java26
-rw-r--r--src/com/google/common/collect/ExplicitOrdering.java78
-rw-r--r--src/com/google/common/collect/ForwardingCollection.java90
-rw-r--r--src/com/google/common/collect/ForwardingConcurrentMap.java54
-rw-r--r--src/com/google/common/collect/ForwardingIterator.java49
-rw-r--r--src/com/google/common/collect/ForwardingList.java94
-rw-r--r--src/com/google/common/collect/ForwardingListIterator.java61
-rw-r--r--src/com/google/common/collect/ForwardingMap.java98
-rw-r--r--src/com/google/common/collect/ForwardingMapEntry.java59
-rw-r--r--src/com/google/common/collect/ForwardingMultimap.java122
-rw-r--r--src/com/google/common/collect/ForwardingMultiset.java75
-rw-r--r--src/com/google/common/collect/ForwardingObject.java75
-rw-r--r--src/com/google/common/collect/ForwardingQueue.java57
-rw-r--r--src/com/google/common/collect/ForwardingSet.java47
-rw-r--r--src/com/google/common/collect/ForwardingSortedMap.java62
-rw-r--r--src/com/google/common/collect/ForwardingSortedSet.java62
-rw-r--r--src/com/google/common/collect/HashBiMap.java108
-rw-r--r--src/com/google/common/collect/HashMultimap.java137
-rw-r--r--src/com/google/common/collect/HashMultiset.java94
-rw-r--r--src/com/google/common/collect/Hashing.java58
-rw-r--r--src/com/google/common/collect/ImmutableBiMap.java311
-rw-r--r--src/com/google/common/collect/ImmutableClassToInstanceMap.java143
-rw-r--r--src/com/google/common/collect/ImmutableCollection.java317
-rw-r--r--src/com/google/common/collect/ImmutableEntry.java47
-rw-r--r--src/com/google/common/collect/ImmutableEnumSet.java121
-rw-r--r--src/com/google/common/collect/ImmutableList.java510
-rw-r--r--src/com/google/common/collect/ImmutableListMultimap.java336
-rw-r--r--src/com/google/common/collect/ImmutableMap.java380
-rw-r--r--src/com/google/common/collect/ImmutableMultimap.java513
-rw-r--r--src/com/google/common/collect/ImmutableMultiset.java502
-rw-r--r--src/com/google/common/collect/ImmutableSet.java536
-rw-r--r--src/com/google/common/collect/ImmutableSetMultimap.java387
-rw-r--r--src/com/google/common/collect/ImmutableSortedMap.java695
-rw-r--r--src/com/google/common/collect/ImmutableSortedMapFauxverideShim.java117
-rw-r--r--src/com/google/common/collect/ImmutableSortedSet.java678
-rw-r--r--src/com/google/common/collect/ImmutableSortedSetFauxverideShim.java152
-rw-r--r--src/com/google/common/collect/Iterables.java717
-rw-r--r--src/com/google/common/collect/Iterators.java976
-rw-r--r--src/com/google/common/collect/LinkedHashMultimap.java381
-rw-r--r--src/com/google/common/collect/LinkedHashMultiset.java102
-rw-r--r--src/com/google/common/collect/LinkedListMultimap.java951
-rw-r--r--src/com/google/common/collect/ListMultimap.java82
-rw-r--r--src/com/google/common/collect/Lists.java503
-rw-r--r--src/com/google/common/collect/MapConstraint.java38
-rw-r--r--src/com/google/common/collect/MapDifference.java109
-rw-r--r--src/com/google/common/collect/MapMaker.java1118
-rw-r--r--src/com/google/common/collect/Maps.java1334
-rw-r--r--src/com/google/common/collect/Multimap.java262
-rw-r--r--src/com/google/common/collect/Multimaps.java1227
-rw-r--r--src/com/google/common/collect/Multiset.java405
-rw-r--r--src/com/google/common/collect/Multisets.java397
-rw-r--r--src/com/google/common/collect/MutableClassToInstanceMap.java94
-rw-r--r--src/com/google/common/collect/NaturalOrdering.java76
-rw-r--r--src/com/google/common/collect/NullOutputException.java31
-rw-r--r--src/com/google/common/collect/NullsFirstOrdering.java81
-rw-r--r--src/com/google/common/collect/NullsLastOrdering.java81
-rw-r--r--src/com/google/common/collect/ObjectArrays.java175
-rw-r--r--src/com/google/common/collect/Ordering.java474
-rw-r--r--src/com/google/common/collect/PeekingIterator.java62
-rw-r--r--src/com/google/common/collect/Platform.java93
-rw-r--r--src/com/google/common/collect/RegularImmutableBiMap.java56
-rw-r--r--src/com/google/common/collect/RegularImmutableList.java227
-rw-r--r--src/com/google/common/collect/RegularImmutableMap.java209
-rw-r--r--src/com/google/common/collect/RegularImmutableSet.java67
-rw-r--r--src/com/google/common/collect/RegularImmutableSortedSet.java253
-rw-r--r--src/com/google/common/collect/ReverseNaturalOrdering.java84
-rw-r--r--src/com/google/common/collect/ReverseOrdering.java90
-rw-r--r--src/com/google/common/collect/Serialization.java249
-rw-r--r--src/com/google/common/collect/SetMultimap.java94
-rw-r--r--src/com/google/common/collect/Sets.java729
-rw-r--r--src/com/google/common/collect/SingletonImmutableList.java118
-rw-r--r--src/com/google/common/collect/SingletonImmutableMap.java151
-rw-r--r--src/com/google/common/collect/SingletonImmutableSet.java116
-rw-r--r--src/com/google/common/collect/SortedSetMultimap.java100
-rw-r--r--src/com/google/common/collect/Synchronized.java1366
-rw-r--r--src/com/google/common/collect/TreeMultimap.java206
-rw-r--r--src/com/google/common/collect/TreeMultiset.java214
-rw-r--r--src/com/google/common/collect/UnmodifiableIterator.java38
-rw-r--r--src/com/google/common/collect/UsingToStringOrdering.java45
-rw-r--r--src/com/google/common/collect/package-info.java188
-rw-r--r--test/com/google/common/base/FinalizableReferenceQueueTest.java163
-rw-r--r--test/com/google/common/base/FunctionsTest.java313
-rw-r--r--test/com/google/common/base/JoinerTest.java264
-rw-r--r--test/com/google/common/base/ObjectsTest.java56
-rw-r--r--test/com/google/common/base/PreconditionsTest.java383
-rw-r--r--test/com/google/common/base/PredicatesTest.java862
-rw-r--r--test/com/google/common/base/SuppliersTest.java203
-rw-r--r--test/com/google/common/collect/AbstractBiMapTest.java542
-rw-r--r--test/com/google/common/collect/AbstractCollectionTest.java228
-rw-r--r--test/com/google/common/collect/AbstractConcurrentHashMultisetTest.java124
-rw-r--r--test/com/google/common/collect/AbstractImmutableSetTest.java421
-rw-r--r--test/com/google/common/collect/AbstractIteratorTest.java279
-rw-r--r--test/com/google/common/collect/AbstractListMultimapTest.java510
-rw-r--r--test/com/google/common/collect/AbstractMapEntryTest.java88
-rw-r--r--test/com/google/common/collect/AbstractMultimapAsMapImplementsMapTest.java92
-rw-r--r--test/com/google/common/collect/AbstractMultimapTest.java1368
-rw-r--r--test/com/google/common/collect/AbstractMultisetTest.java684
-rw-r--r--test/com/google/common/collect/AbstractSetMultimapTest.java183
-rw-r--r--test/com/google/common/collect/ArrayListMultimapTest.java152
-rw-r--r--test/com/google/common/collect/BiMapCollectionTest.java73
-rw-r--r--test/com/google/common/collect/BiMapMapInterfaceTest.java116
-rw-r--r--test/com/google/common/collect/CollectTestSuite.java172
-rw-r--r--test/com/google/common/collect/Collections2Test.java360
-rw-r--r--test/com/google/common/collect/ConcurrentHashMultisetTest.java362
-rw-r--r--test/com/google/common/collect/ConcurrentHashMultisetWithChmTest.java31
-rw-r--r--test/com/google/common/collect/EnumBiMapTest.java146
-rw-r--r--test/com/google/common/collect/EnumHashBiMapTest.java155
-rw-r--r--test/com/google/common/collect/EnumMultisetTest.java76
-rw-r--r--test/com/google/common/collect/FauxveridesTest.java285
-rw-r--r--test/com/google/common/collect/ForMapMultimapAsMapImplementsMapTest.java49
-rw-r--r--test/com/google/common/collect/ForwardingCollectionTest.java130
-rw-r--r--test/com/google/common/collect/ForwardingConcurrentMapTest.java78
-rw-r--r--test/com/google/common/collect/ForwardingListIteratorTest.java90
-rw-r--r--test/com/google/common/collect/ForwardingListTest.java183
-rw-r--r--test/com/google/common/collect/ForwardingMapTest.java126
-rw-r--r--test/com/google/common/collect/ForwardingMultimapTest.java154
-rw-r--r--test/com/google/common/collect/ForwardingMultisetTest.java164
-rw-r--r--test/com/google/common/collect/ForwardingObjectTest.java49
-rw-r--r--test/com/google/common/collect/ForwardingQueueTest.java142
-rw-r--r--test/com/google/common/collect/ForwardingSetTest.java119
-rw-r--r--test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java70
-rw-r--r--test/com/google/common/collect/ForwardingSortedMapTest.java142
-rw-r--r--test/com/google/common/collect/ForwardingTestCase.java114
-rw-r--r--test/com/google/common/collect/HashBiMapTest.java123
-rw-r--r--test/com/google/common/collect/HashMultimapTest.java77
-rw-r--r--test/com/google/common/collect/HashMultisetTest.java98
-rw-r--r--test/com/google/common/collect/ImmutableBiMapTest.java612
-rw-r--r--test/com/google/common/collect/ImmutableClassToInstanceMapTest.java185
-rw-r--r--test/com/google/common/collect/ImmutableListMultimapTest.java342
-rw-r--r--test/com/google/common/collect/ImmutableListTest.java738
-rw-r--r--test/com/google/common/collect/ImmutableMapTest.java578
-rw-r--r--test/com/google/common/collect/ImmutableMultimapAsMapImplementsMapTest.java46
-rw-r--r--test/com/google/common/collect/ImmutableMultimapTest.java67
-rw-r--r--test/com/google/common/collect/ImmutableMultisetTest.java400
-rw-r--r--test/com/google/common/collect/ImmutableSetCollectionTest.java273
-rw-r--r--test/com/google/common/collect/ImmutableSetMultimapAsMapImplementsMapTest.java46
-rw-r--r--test/com/google/common/collect/ImmutableSetMultimapTest.java329
-rw-r--r--test/com/google/common/collect/ImmutableSetTest.java116
-rw-r--r--test/com/google/common/collect/ImmutableSortedMapTest.java794
-rw-r--r--test/com/google/common/collect/ImmutableSortedSetTest.java689
-rw-r--r--test/com/google/common/collect/InverseBiMapTest.java29
-rw-r--r--test/com/google/common/collect/IterablesTest.java797
-rw-r--r--test/com/google/common/collect/IteratorsTest.java1181
-rw-r--r--test/com/google/common/collect/Jsr166HashMap.java138
-rw-r--r--test/com/google/common/collect/Jsr166HashMapTest.java629
-rw-r--r--test/com/google/common/collect/LegacyComparable.java66
-rw-r--r--test/com/google/common/collect/LinkedHashMultimapTest.java348
-rw-r--r--test/com/google/common/collect/LinkedHashMultisetTest.java128
-rw-r--r--test/com/google/common/collect/LinkedListMultimapTest.java448
-rw-r--r--test/com/google/common/collect/ListsTest.java705
-rw-r--r--test/com/google/common/collect/MapMakerTestSuite.java1219
-rw-r--r--test/com/google/common/collect/MapsTest.java946
-rw-r--r--test/com/google/common/collect/MapsTransformValuesTest.java269
-rw-r--r--test/com/google/common/collect/MultimapCollectionTest.java724
-rw-r--r--test/com/google/common/collect/MultimapsTest.java555
-rw-r--r--test/com/google/common/collect/MultisetCollectionTest.java131
-rw-r--r--test/com/google/common/collect/MultisetsImmutableEntryTest.java84
-rw-r--r--test/com/google/common/collect/MultisetsTest.java121
-rw-r--r--test/com/google/common/collect/MutableClassToInstanceMapTest.java150
-rw-r--r--test/com/google/common/collect/ObjectArraysTest.java187
-rw-r--r--test/com/google/common/collect/OrderingTest.java618
-rw-r--r--test/com/google/common/collect/PeekingIteratorTest.java242
-rw-r--r--test/com/google/common/collect/SetOperationsTest.java313
-rw-r--r--test/com/google/common/collect/SetsTest.java626
-rw-r--r--test/com/google/common/collect/SimpleAbstractMultisetTest.java116
-rw-r--r--test/com/google/common/collect/SubMapMultimapAsMapImplementsMapTest.java67
-rw-r--r--test/com/google/common/collect/SynchronizedBiMapTest.java113
-rw-r--r--test/com/google/common/collect/SynchronizedMapTest.java220
-rw-r--r--test/com/google/common/collect/SynchronizedMultimapTest.java217
-rw-r--r--test/com/google/common/collect/SynchronizedSetTest.java144
-rw-r--r--test/com/google/common/collect/TreeMultimapExplicitTest.java194
-rw-r--r--test/com/google/common/collect/TreeMultimapNaturalTest.java484
-rw-r--r--test/com/google/common/collect/TreeMultisetTest.java315
-rw-r--r--test/com/google/common/collect/UnmodifiableIteratorTest.java54
-rw-r--r--test/com/google/common/collect/UnmodifiableMultimapAsMapImplementsMapTest.java47
-rw-r--r--test/com/google/common/collect/testing/IteratorTesterTest.java335
-rw-r--r--test/com/google/common/collect/testing/MapTestSuiteBuilderTests.java117
-rw-r--r--test/com/google/common/collect/testing/MinimalCollectionTest.java50
-rw-r--r--test/com/google/common/collect/testing/MinimalIterableTest.java106
-rw-r--r--test/com/google/common/collect/testing/MinimalSetTest.java47
-rw-r--r--test/com/google/common/collect/testing/OpenJdk6ListTests.java69
-rw-r--r--test/com/google/common/collect/testing/OpenJdk6MapTests.java41
-rw-r--r--test/com/google/common/collect/testing/OpenJdk6QueueTests.java50
-rw-r--r--test/com/google/common/collect/testing/OpenJdk6SetTests.java61
-rw-r--r--test/com/google/common/collect/testing/OpenJdk6Tests.java39
-rw-r--r--test/com/google/common/collect/testing/features/FeatureEnumTest.java108
-rw-r--r--test/com/google/common/collect/testing/features/FeatureUtilTest.java275
-rw-r--r--test/com/google/common/collect/testing/google/AbstractMultisetSetCountTester.java348
-rw-r--r--test/com/google/common/collect/testing/google/AbstractMultisetTester.java36
-rw-r--r--test/com/google/common/collect/testing/google/MultisetReadsTester.java156
-rw-r--r--test/com/google/common/collect/testing/google/MultisetSetCountConditionallyTester.java105
-rw-r--r--test/com/google/common/collect/testing/google/MultisetSetCountUnconditionallyTester.java40
-rw-r--r--test/com/google/common/collect/testing/google/MultisetTestSuiteBuilder.java49
-rw-r--r--test/com/google/common/collect/testing/google/MultisetWritesTester.java232
-rw-r--r--test/com/google/common/collect/testing/google/TestEnumMultisetGenerator.java61
-rw-r--r--test/com/google/common/collect/testing/google/TestMultisetGenerator.java29
-rw-r--r--test/com/google/common/collect/testing/google/TestStringMultisetGenerator.java56
-rw-r--r--test/com/google/common/collect/testing/google/UnmodifiableCollectionTests.java415
-rw-r--r--test/com/google/common/testutils/EqualsTester.java201
-rw-r--r--test/com/google/common/testutils/NullPointerTester.java285
-rw-r--r--test/com/google/common/testutils/SerializableTester.java88
-rw-r--r--test/com/google/common/testutils/SerializationException.java33
-rw-r--r--test/test.iml60
-rw-r--r--testfw/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java85
-rw-r--r--testfw/com/google/common/collect/testing/AbstractCollectionTester.java82
-rw-r--r--testfw/com/google/common/collect/testing/AbstractContainerTester.java231
-rw-r--r--testfw/com/google/common/collect/testing/AbstractIteratorTester.java636
-rw-r--r--testfw/com/google/common/collect/testing/AbstractMapTester.java227
-rw-r--r--testfw/com/google/common/collect/testing/AbstractTester.java58
-rw-r--r--testfw/com/google/common/collect/testing/AnEnum.java26
-rw-r--r--testfw/com/google/common/collect/testing/CollectionTestSuiteBuilder.java33
-rw-r--r--testfw/com/google/common/collect/testing/ConcurrentMapInterfaceTest.java840
-rw-r--r--testfw/com/google/common/collect/testing/DerivedIteratorTestSuiteBuilder.java73
-rw-r--r--testfw/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilder.java301
-rw-r--r--testfw/com/google/common/collect/testing/Helpers.java208
-rw-r--r--testfw/com/google/common/collect/testing/IteratorFeature.java62
-rw-r--r--testfw/com/google/common/collect/testing/IteratorTestSuiteBuilder.java47
-rw-r--r--testfw/com/google/common/collect/testing/IteratorTester.java82
-rw-r--r--testfw/com/google/common/collect/testing/ListIteratorTester.java58
-rw-r--r--testfw/com/google/common/collect/testing/ListTestSuiteBuilder.java96
-rw-r--r--testfw/com/google/common/collect/testing/MapInterfaceTest.java1536
-rw-r--r--testfw/com/google/common/collect/testing/MapTestSuiteBuilder.java316
-rw-r--r--testfw/com/google/common/collect/testing/MinimalCollection.java112
-rw-r--r--testfw/com/google/common/collect/testing/MinimalIterable.java88
-rw-r--r--testfw/com/google/common/collect/testing/MinimalSet.java78
-rw-r--r--testfw/com/google/common/collect/testing/OneSizeTestContainerGenerator.java40
-rw-r--r--testfw/com/google/common/collect/testing/PerCollectionSizeTestSuiteBuilder.java190
-rw-r--r--testfw/com/google/common/collect/testing/QueueTestSuiteBuilder.java69
-rw-r--r--testfw/com/google/common/collect/testing/ReserializingTestCollectionGenerator.java79
-rw-r--r--testfw/com/google/common/collect/testing/ReserializingTestSetGenerator.java44
-rw-r--r--testfw/com/google/common/collect/testing/SampleElements.java106
-rw-r--r--testfw/com/google/common/collect/testing/SetTestSuiteBuilder.java58
-rw-r--r--testfw/com/google/common/collect/testing/SortedMapInterfaceTest.java217
-rw-r--r--testfw/com/google/common/collect/testing/TestCollectionGenerator.java28
-rw-r--r--testfw/com/google/common/collect/testing/TestCollidingSetGenerator.java42
-rw-r--r--testfw/com/google/common/collect/testing/TestContainerGenerator.java65
-rw-r--r--testfw/com/google/common/collect/testing/TestEnumMapGenerator.java74
-rw-r--r--testfw/com/google/common/collect/testing/TestEnumSetGenerator.java57
-rw-r--r--testfw/com/google/common/collect/testing/TestIteratorGenerator.java30
-rw-r--r--testfw/com/google/common/collect/testing/TestListGenerator.java28
-rw-r--r--testfw/com/google/common/collect/testing/TestMapEntrySetGenerator.java61
-rw-r--r--testfw/com/google/common/collect/testing/TestMapGenerator.java31
-rw-r--r--testfw/com/google/common/collect/testing/TestQueueGenerator.java28
-rw-r--r--testfw/com/google/common/collect/testing/TestSetGenerator.java28
-rw-r--r--testfw/com/google/common/collect/testing/TestStringCollectionGenerator.java54
-rw-r--r--testfw/com/google/common/collect/testing/TestStringListGenerator.java57
-rw-r--r--testfw/com/google/common/collect/testing/TestStringMapGenerator.java77
-rw-r--r--testfw/com/google/common/collect/testing/TestStringQueueGenerator.java55
-rw-r--r--testfw/com/google/common/collect/testing/TestStringSetGenerator.java54
-rw-r--r--testfw/com/google/common/collect/testing/TestStringSortedSetGenerator.java38
-rw-r--r--testfw/com/google/common/collect/testing/TestSubjectGenerator.java29
-rw-r--r--testfw/com/google/common/collect/testing/TestUnhashableCollectionGenerator.java59
-rw-r--r--testfw/com/google/common/collect/testing/TestsForListsInJavaUtil.java277
-rw-r--r--testfw/com/google/common/collect/testing/TestsForMapsInJavaUtil.java235
-rw-r--r--testfw/com/google/common/collect/testing/TestsForQueuesInJavaUtil.java182
-rw-r--r--testfw/com/google/common/collect/testing/TestsForSetsInJavaUtil.java332
-rw-r--r--testfw/com/google/common/collect/testing/UnhashableObject.java51
-rw-r--r--testfw/com/google/common/collect/testing/WrongType.java26
-rw-r--r--testfw/com/google/common/collect/testing/features/CollectionFeature.java116
-rw-r--r--testfw/com/google/common/collect/testing/features/CollectionSize.java102
-rw-r--r--testfw/com/google/common/collect/testing/features/ConflictingRequirementsException.java50
-rw-r--r--testfw/com/google/common/collect/testing/features/Feature.java29
-rw-r--r--testfw/com/google/common/collect/testing/features/FeatureUtil.java290
-rw-r--r--testfw/com/google/common/collect/testing/features/ListFeature.java70
-rw-r--r--testfw/com/google/common/collect/testing/features/MapFeature.java80
-rw-r--r--testfw/com/google/common/collect/testing/features/SetFeature.java61
-rw-r--r--testfw/com/google/common/collect/testing/features/TesterAnnotation.java41
-rw-r--r--testfw/com/google/common/collect/testing/features/TesterRequirements.java78
-rw-r--r--testfw/com/google/common/collect/testing/testers/AbstractListIndexOfTester.java92
-rw-r--r--testfw/com/google/common/collect/testing/testers/AbstractListTester.java60
-rw-r--r--testfw/com/google/common/collect/testing/testers/AbstractQueueTester.java32
-rw-r--r--testfw/com/google/common/collect/testing/testers/AbstractSetTester.java35
-rw-r--r--testfw/com/google/common/collect/testing/testers/CollectionAddAllTester.java158
-rw-r--r--testfw/com/google/common/collect/testing/testers/CollectionAddTester.java123
-rw-r--r--testfw/com/google/common/collect/testing/testers/CollectionClearTester.java61
-rw-r--r--testfw/com/google/common/collect/testing/testers/CollectionContainsAllTester.java77
-rw-r--r--testfw/com/google/common/collect/testing/testers/CollectionContainsTester.java80
-rw-r--r--testfw/com/google/common/collect/testing/testers/CollectionCreationTester.java70
-rw-r--r--testfw/com/google/common/collect/testing/testers/CollectionEqualsTester.java45
-rw-r--r--testfw/com/google/common/collect/testing/testers/CollectionIsEmptyTester.java40
-rw-r--r--testfw/com/google/common/collect/testing/testers/CollectionIteratorTester.java167
-rw-r--r--testfw/com/google/common/collect/testing/testers/CollectionRemoveAllTester.java174
-rw-r--r--testfw/com/google/common/collect/testing/testers/CollectionRemoveTester.java134
-rw-r--r--testfw/com/google/common/collect/testing/testers/CollectionRetainAllTester.java340
-rw-r--r--testfw/com/google/common/collect/testing/testers/CollectionSizeTester.java32
-rw-r--r--testfw/com/google/common/collect/testing/testers/CollectionToArrayTester.java200
-rw-r--r--testfw/com/google/common/collect/testing/testers/CollectionToStringTester.java65
-rw-r--r--testfw/com/google/common/collect/testing/testers/ListAddAllAtIndexTester.java180
-rw-r--r--testfw/com/google/common/collect/testing/testers/ListAddAllTester.java61
-rw-r--r--testfw/com/google/common/collect/testing/testers/ListAddAtIndexTester.java146
-rw-r--r--testfw/com/google/common/collect/testing/testers/ListAddTester.java83
-rw-r--r--testfw/com/google/common/collect/testing/testers/ListCreationTester.java39
-rw-r--r--testfw/com/google/common/collect/testing/testers/ListEqualsTester.java88
-rw-r--r--testfw/com/google/common/collect/testing/testers/ListGetTester.java47
-rw-r--r--testfw/com/google/common/collect/testing/testers/ListHashCodeTester.java50
-rw-r--r--testfw/com/google/common/collect/testing/testers/ListIndexOfTester.java47
-rw-r--r--testfw/com/google/common/collect/testing/testers/ListLastIndexOfTester.java48
-rw-r--r--testfw/com/google/common/collect/testing/testers/ListListIteratorTester.java121
-rw-r--r--testfw/com/google/common/collect/testing/testers/ListRemoveAllTester.java50
-rw-r--r--testfw/com/google/common/collect/testing/testers/ListRemoveAtIndexTester.java93
-rw-r--r--testfw/com/google/common/collect/testing/testers/ListRemoveTester.java53
-rw-r--r--testfw/com/google/common/collect/testing/testers/ListRetainAllTester.java57
-rw-r--r--testfw/com/google/common/collect/testing/testers/ListSetTester.java153
-rw-r--r--testfw/com/google/common/collect/testing/testers/ListSubListTester.java354
-rw-r--r--testfw/com/google/common/collect/testing/testers/ListToArrayTester.java57
-rw-r--r--testfw/com/google/common/collect/testing/testers/MapClearTester.java62
-rw-r--r--testfw/com/google/common/collect/testing/testers/MapContainsKeyTester.java81
-rw-r--r--testfw/com/google/common/collect/testing/testers/MapContainsValueTester.java82
-rw-r--r--testfw/com/google/common/collect/testing/testers/MapCreationTester.java139
-rw-r--r--testfw/com/google/common/collect/testing/testers/MapEqualsTester.java131
-rw-r--r--testfw/com/google/common/collect/testing/testers/MapGetTester.java80
-rw-r--r--testfw/com/google/common/collect/testing/testers/MapHashCodeTester.java80
-rw-r--r--testfw/com/google/common/collect/testing/testers/MapIsEmptyTester.java40
-rw-r--r--testfw/com/google/common/collect/testing/testers/MapPutAllTester.java176
-rw-r--r--testfw/com/google/common/collect/testing/testers/MapPutTester.java193
-rw-r--r--testfw/com/google/common/collect/testing/testers/MapRemoveTester.java120
-rw-r--r--testfw/com/google/common/collect/testing/testers/MapSizeTester.java32
-rw-r--r--testfw/com/google/common/collect/testing/testers/QueueElementTester.java59
-rw-r--r--testfw/com/google/common/collect/testing/testers/QueueOfferTester.java56
-rw-r--r--testfw/com/google/common/collect/testing/testers/QueuePeekTester.java54
-rw-r--r--testfw/com/google/common/collect/testing/testers/QueuePollTester.java58
-rw-r--r--testfw/com/google/common/collect/testing/testers/QueueRemoveTester.java63
-rw-r--r--testfw/com/google/common/collect/testing/testers/SetAddAllTester.java58
-rw-r--r--testfw/com/google/common/collect/testing/testers/SetAddTester.java64
-rw-r--r--testfw/com/google/common/collect/testing/testers/SetCreationTester.java87
-rw-r--r--testfw/com/google/common/collect/testing/testers/SetEqualsTester.java91
-rw-r--r--testfw/com/google/common/collect/testing/testers/SetHashCodeTester.java74
-rw-r--r--testfw/com/google/common/collect/testing/testers/SetRemoveTester.java41
-rw-r--r--testfw/testfw.iml21
666 files changed, 173315 insertions, 0 deletions
diff --git a/Android.mk b/Android.mk
new file mode 100644
index 0000000..0ef7ab8
--- /dev/null
+++ b/Android.mk
@@ -0,0 +1,27 @@
+# Copyright (C) 2009 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_MODULE := guava
+
+LOCAL_JAVA_LIBRARIES := jsr305
+
+include $(BUILD_JAVA_LIBRARY)
+
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/MODULE_LICENSE_APACHE2 b/MODULE_LICENSE_APACHE2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/MODULE_LICENSE_APACHE2
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/README.android b/README.android
new file mode 100644
index 0000000..63d7a63
--- /dev/null
+++ b/README.android
@@ -0,0 +1,11 @@
+URL: http://code.google.com/p/google-collections/
+Version: r127
+License: Apache 2
+Description: "Google Collections Library". Multimap, immutable collections, etc.
+
+This project will eventually hold Guava-libraries, a superset of Google
+Collections.
+
+This APIs in this library are not included on the device. They may, however, be
+included in test cases etc.
+
diff --git a/build.properties b/build.properties
new file mode 100644
index 0000000..580fc93
--- /dev/null
+++ b/build.properties
@@ -0,0 +1,7 @@
+lib.dir=lib
+src.dir=src
+gwt.dir=gwt
+gwt.serializers=**/*_CustomFieldSerializer*.java
+testfw.dir=testfw
+test.dir=test
+build.dir=build
diff --git a/build.xml b/build.xml
new file mode 100644
index 0000000..69c6dd1
--- /dev/null
+++ b/build.xml
@@ -0,0 +1,189 @@
+<?xml version="1.0"?>
+
+<!--
+
+ You must:
+ * have JAVA_HOME set to a recent JDK 6 installation
+ * have JAVA5_HOME set to a JDK 1.5.0 (_0) installation
+ * have unzipped $JAVA_HOME/src.zip to $JAVA_HOME/src
+ * specify -Dversion=1.0-rc1 (for example) on the ant command line
+
+-->
+
+<project name="google-collections" default="compile">
+
+ <property environment="env"/>
+ <property file="build.properties"/>
+
+ <!-- can be overridden at the command line with -Dversion=
+ or in IDEA, in the ant properties dialog -->
+ <property name="version" value="snapshot"/>
+
+ <target name="compile" description="Compile Java source.">
+ <mkdir dir="${build.dir}/classes"/>
+ <javac
+ srcdir="${src.dir}"
+ destdir="${build.dir}/classes"
+ debug="on"
+ target="1.5"
+ bootclasspath="${env.JAVA5_HOME}/lib/rt.jar"
+ extdirs=""
+ >
+ <compilerarg value="-Xlint:all"/>
+ <classpath>
+ <pathelement location="${lib.dir}/jsr305.jar"/>
+ </classpath>
+ </javac>
+
+<!-- uncomment when GWT support is official
+ <javac
+ srcdir="${gwt.dir}"
+ destdir="${build.dir}/classes"
+ debug="on"
+ target="1.5"
+ bootclasspath="${env.JAVA5_HOME}/lib/rt.jar"
+ extdirs=""
+ >
+ <include name="${gwt.serializers}"/>
+ <compilerarg value="-Xlint:all"/>
+ <classpath>
+ <pathelement location="${build.dir}/dist/google-collect-${version}/google-collect-${version}.jar"/>
+ <pathelement location="${lib.dir}/jsr305.jar"/>
+ <pathelement location="${lib.dir}/gwt-servlet.jar"/>
+ </classpath>
+ </javac>
+-->
+ </target>
+
+ <target name="testfw" description="Compile test framework.">
+ <mkdir dir="${build.dir}/testfwclasses"/>
+ <javac
+ srcdir="${testfw.dir}"
+ destdir="${build.dir}/testfwclasses"
+ debug="on"
+ target="1.5"
+ bootclasspath="${env.JAVA5_HOME}/lib/rt.jar"
+ extdirs=""
+ >
+ <compilerarg value="-Xlint:all"/>
+ <classpath>
+ <pathelement location="${lib.dir}/junit.jar"/>
+ </classpath>
+ </javac>
+ </target>
+
+ <target name="test.compile"
+ depends="dist,testfw"
+ description="Compile test source.">
+ <mkdir dir="${build.dir}/test"/>
+ <javac srcdir="${test.dir}"
+ destdir="${build.dir}/test"
+ debug="on"
+ >
+ <compilerarg value="-Xlint:all"/>
+ <classpath>
+ <pathelement location="${build.dir}/dist/google-collect-${version}/google-collect-${version}.jar"/>
+ <pathelement location="${build.dir}/testfwclasses"/>
+ <pathelement location="${lib.dir}/junit.jar"/>
+ <pathelement location="${lib.dir}/tl4j-1.1.0.jar"/>
+ <pathelement location="${lib.dir}/jsr305.jar"/>
+ <pathelement location="${lib.dir}/easymock-2.4.jar"/>
+ <pathelement location="${lib.dir}/easymockclassextension-2.4.jar"/>
+ </classpath>
+ </javac>
+ </target>
+
+ <target name="test"
+ depends="test.compile"
+ description="Execute JUnit tests.">
+ <java fork="true"
+ classname="junit.textui.TestRunner"
+ failonerror="true"
+ taskname="junit">
+ <classpath>
+ <pathelement location="${build.dir}/test"/>
+ <pathelement location="${build.dir}/dist/google-collect-${version}/google-collect-${version}.jar"/>
+ <pathelement location="${build.dir}/testfwclasses"/>
+ <pathelement location="${lib.dir}/junit.jar"/>
+ <pathelement location="${lib.dir}/tl4j-1.1.0.jar"/>
+ <pathelement location="${lib.dir}/jsr305.jar"/>
+ <pathelement location="${lib.dir}/easymock-2.4.jar"/>
+ <pathelement location="${lib.dir}/easymockclassextension-2.4.jar"/>
+ <pathelement location="${lib.dir}/cglib-nodep-2.2.jar"/>
+ </classpath>
+ <arg value="com.google.common.collect.CollectTestSuite"/>
+ </java>
+ </target>
+
+ <target name="clean"
+ description="Remove generated files.">
+ <delete dir="${build.dir}"/>
+ </target>
+
+ <target name="jar" depends="compile" description="Build jars.">
+ <mkdir dir="${build.dir}/dist/google-collect-${version}"/>
+ <jar jarfile="${build.dir}/dist/google-collect-${version}/google-collect-${version}.jar">
+ <fileset dir="${build.dir}/classes"/>
+ </jar>
+ </target>
+
+ <target name="jargwt" description="Build GWT jar.">
+ <mkdir dir="${build.dir}/dist/google-collect-${version}"/>
+ <jar jarfile="${build.dir}/dist/google-collect-${version}/google-collect-gwt-${version}.jar">
+ <fileset dir="${gwt.dir}"/>
+ <fileset dir="${src.dir}">
+ <and>
+ <contains text="@GwtCompatible"/>
+ <not>
+ <contains text="emulated = true"/>
+ </not>
+ </and>
+ </fileset>
+ </jar>
+ </target>
+
+ <target name="jarsrc" description="Build jar of source.">
+ <mkdir dir="${build.dir}/dist/google-collect-${version}"/>
+ <jar jarfile="${build.dir}/dist/google-collect-${version}/src-${version}.zip">
+ <fileset dir="${src.dir}"/>
+<!-- uncomment when GWT support is official
+ <fileset dir="${gwt.dir}">
+ <include name="${gwt.serializers}"/>
+ </fileset>
+-->
+ </jar>
+ </target>
+
+ <target name="dist" depends="jar, jarsrc, javadoc"
+ description="Build entire distribution.">
+ <copy toDir="${build.dir}/dist/google-collect-${version}" file="COPYING"/>
+ <copy toDir="${build.dir}/dist/google-collect-${version}">
+ <fileset dir="${build.dir}" includes="javadoc/**/*"/>
+ </copy>
+
+ <zip destfile="${build.dir}/google-collect-${version}.zip"
+ basedir="${build.dir}/dist"/>
+ </target>
+
+ <target name="javadoc"
+ description="Generate Javadocs.">
+ <delete dir="${build.dir}/javadoc"/>
+ <mkdir dir="${build.dir}/javadoc"/>
+ <javadoc packagenames="com.google.common.annotations,com.google.common.base,com.google.common.collect"
+ destdir="${build.dir}/javadoc"
+ use="true"
+ author="true"
+ protected="true"
+ windowtitle="Google Collections Library ${version}">
+ <sourcepath>
+ <pathelement location="${src.dir}"/>
+ <pathelement location="${env.JAVA_HOME}/src"/>
+ </sourcepath>
+ <classpath>
+ <pathelement location="${lib.dir}/jsr305.jar"/>
+ </classpath>
+ <link href="http://jsr-305.googlecode.com/svn/trunk/javadoc"/>
+ <link href="http://java.sun.com/javase/6/docs/api"/>
+ </javadoc>
+ </target>
+</project>
diff --git a/google-collect.iml b/google-collect.iml
new file mode 100644
index 0000000..795e233
--- /dev/null
+++ b/google-collect.iml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module relativePaths="true" type="JAVA_MODULE" version="4">
+ <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_5" inherit-compiler-output="true">
+ <exclude-output />
+ <content url="file://$MODULE_DIR$/src">
+ <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+ </content>
+ <orderEntry type="inheritedJdk" />
+ <orderEntry type="sourceFolder" forTests="false" />
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/lib/jsr305.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ </component>
+</module>
+
diff --git a/google-collect.ipr b/google-collect.ipr
new file mode 100644
index 0000000..118f0cb
--- /dev/null
+++ b/google-collect.ipr
@@ -0,0 +1,405 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project relativePaths="true" version="4">
+ <component name="AntConfiguration">
+ <defaultAnt bundledAnt="true" />
+ <buildFile url="file://$PROJECT_DIR$/build.xml">
+ <additionalClassPath />
+ <antReference projectDefault="true" />
+ <customJdkName value="1.5" />
+ <maximumHeapSize value="128" />
+ <properties />
+ </buildFile>
+ </component>
+ <component name="BlazePluginSettings" buildBeforeRefresh="true" blazeTestProducers="true" updater="default" />
+ <component name="BuildJarProjectSettings">
+ <option name="BUILD_JARS_ON_MAKE" value="false" />
+ </component>
+ <component name="CodeStyleProjectProfileManger">
+ <option name="PROJECT_PROFILE" value="Project Default" />
+ <option name="USE_PROJECT_LEVEL_SETTINGS" value="true" />
+ <scopes />
+ <profiles>
+ <profile>
+ <option name="myName" value="Project Default" />
+ <option name="myLocal" value="false" />
+ </profile>
+ </profiles>
+ </component>
+ <component name="CodeStyleSettingsManager">
+ <option name="PER_PROJECT_SETTINGS">
+ <value>
+ <option name="KEEP_LINE_BREAKS" value="false" />
+ <option name="JAVA_INDENT_OPTIONS">
+ <value>
+ <option name="INDENT_SIZE" value="2" />
+ <option name="CONTINUATION_INDENT_SIZE" value="4" />
+ <option name="TAB_SIZE" value="8" />
+ <option name="USE_TAB_CHARACTER" value="false" />
+ <option name="SMART_TABS" value="false" />
+ <option name="LABEL_INDENT_SIZE" value="0" />
+ <option name="LABEL_INDENT_ABSOLUTE" value="false" />
+ </value>
+ </option>
+ <option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" />
+ <option name="ELSE_ON_NEW_LINE" value="true" />
+ <option name="WHILE_ON_NEW_LINE" value="true" />
+ <option name="CATCH_ON_NEW_LINE" value="true" />
+ <option name="FINALLY_ON_NEW_LINE" value="true" />
+ <option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
+ <option name="ALIGN_MULTILINE_FOR" value="false" />
+ <option name="KEEP_BLANK_LINES_IN_DECLARATIONS" value="1" />
+ <option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
+ <option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="1" />
+ <option name="BLANK_LINES_AFTER_CLASS_HEADER" value="1" />
+ <option name="SPACE_WITHIN_ARRAY_INITIALIZER_BRACES" value="true" />
+ <option name="SPACE_BEFORE_ARRAY_INITIALIZER_LBRACE" value="true" />
+ <option name="INSERT_INNER_CLASS_IMPORTS" value="true" />
+ <option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" />
+ <option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" />
+ <option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND">
+ <value />
+ </option>
+ <option name="IMPORT_LAYOUT_TABLE">
+ <value>
+ <package name="com.google" withSubpackages="true" />
+ <emptyLine />
+ <package name="com" withSubpackages="true" />
+ <emptyLine />
+ <package name="junit" withSubpackages="true" />
+ <emptyLine />
+ <package name="org" withSubpackages="true" />
+ <emptyLine />
+ <package name="java" withSubpackages="true" />
+ <emptyLine />
+ <package name="javax" withSubpackages="true" />
+ <emptyLine />
+ <package name="" withSubpackages="true" />
+ </value>
+ </option>
+ <option name="RIGHT_MARGIN" value="80" />
+ <option name="CALL_PARAMETERS_WRAP" value="1" />
+ <option name="METHOD_PARAMETERS_WRAP" value="1" />
+ <option name="EXTENDS_LIST_WRAP" value="1" />
+ <option name="THROWS_LIST_WRAP" value="1" />
+ <option name="EXTENDS_KEYWORD_WRAP" value="1" />
+ <option name="THROWS_KEYWORD_WRAP" value="1" />
+ <option name="METHOD_CALL_CHAIN_WRAP" value="1" />
+ <option name="BINARY_OPERATION_WRAP" value="1" />
+ <option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
+ <option name="TERNARY_OPERATION_WRAP" value="1" />
+ <option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
+ <option name="FOR_STATEMENT_WRAP" value="1" />
+ <option name="ARRAY_INITIALIZER_WRAP" value="1" />
+ <option name="ASSIGNMENT_WRAP" value="1" />
+ <option name="PLACE_ASSIGNMENT_SIGN_ON_NEXT_LINE" value="true" />
+ <option name="LABELED_STATEMENT_WRAP" value="1" />
+ <option name="WRAP_COMMENTS" value="true" />
+ <option name="ASSERT_STATEMENT_WRAP" value="1" />
+ <option name="IF_BRACE_FORCE" value="3" />
+ <option name="DOWHILE_BRACE_FORCE" value="3" />
+ <option name="WHILE_BRACE_FORCE" value="3" />
+ <option name="FOR_BRACE_FORCE" value="3" />
+ <option name="JD_ALIGN_PARAM_COMMENTS" value="false" />
+ <option name="JD_ALIGN_EXCEPTION_COMMENTS" value="false" />
+ <option name="JD_P_AT_EMPTY_LINES" value="false" />
+ <option name="JD_KEEP_EMPTY_PARAMETER" value="false" />
+ <option name="JD_KEEP_EMPTY_EXCEPTION" value="false" />
+ <option name="JD_KEEP_EMPTY_RETURN" value="false" />
+ <option name="METHOD_ANNOTATION_WRAP" value="1" />
+ <option name="CLASS_ANNOTATION_WRAP" value="1" />
+ <option name="FIELD_ANNOTATION_WRAP" value="1" />
+ <option name="PARAMETER_ANNOTATION_WRAP" value="1" />
+ <option name="VARIABLE_ANNOTATION_WRAP" value="1" />
+ <option name="ENUM_CONSTANTS_WRAP" value="1" />
+ <ADDITIONAL_INDENT_OPTIONS fileType="java">
+ <option name="INDENT_SIZE" value="2" />
+ <option name="CONTINUATION_INDENT_SIZE" value="4" />
+ <option name="TAB_SIZE" value="8" />
+ <option name="USE_TAB_CHARACTER" value="false" />
+ <option name="SMART_TABS" value="false" />
+ <option name="LABEL_INDENT_SIZE" value="0" />
+ <option name="LABEL_INDENT_ABSOLUTE" value="false" />
+ </ADDITIONAL_INDENT_OPTIONS>
+ <ADDITIONAL_INDENT_OPTIONS fileType="xml">
+ <option name="INDENT_SIZE" value="4" />
+ <option name="CONTINUATION_INDENT_SIZE" value="8" />
+ <option name="TAB_SIZE" value="4" />
+ <option name="USE_TAB_CHARACTER" value="false" />
+ <option name="SMART_TABS" value="false" />
+ <option name="LABEL_INDENT_SIZE" value="0" />
+ <option name="LABEL_INDENT_ABSOLUTE" value="false" />
+ </ADDITIONAL_INDENT_OPTIONS>
+ </value>
+ </option>
+ <option name="USE_PER_PROJECT_SETTINGS" value="true" />
+ </component>
+ <component name="CompilerConfiguration">
+ <option name="DEFAULT_COMPILER" value="Javac" />
+ <option name="DEPLOY_AFTER_MAKE" value="0" />
+ <resourceExtensions />
+ <wildcardResourcePatterns />
+ </component>
+ <component name="DependenciesAnalyzeManager">
+ <option name="myForwardDirection" value="false" />
+ </component>
+ <component name="DependencyValidationManager">
+ <option name="SKIP_IMPORT_STATEMENTS" value="false" />
+ </component>
+ <component name="EclipseCompilerSettings">
+ <option name="DEBUGGING_INFO" value="true" />
+ <option name="GENERATE_NO_WARNINGS" value="true" />
+ <option name="DEPRECATION" value="false" />
+ <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+ <option name="MAXIMUM_HEAP_SIZE" value="128" />
+ </component>
+ <component name="EclipseEmbeddedCompilerSettings">
+ <option name="DEBUGGING_INFO" value="true" />
+ <option name="GENERATE_NO_WARNINGS" value="true" />
+ <option name="DEPRECATION" value="false" />
+ <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+ <option name="MAXIMUM_HEAP_SIZE" value="128" />
+ </component>
+ <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
+ <component name="EntryPointsManager">
+ <entry_points version="2.0" />
+ </component>
+ <component name="ExportToHTMLSettings">
+ <option name="PRINT_LINE_NUMBERS" value="false" />
+ <option name="OPEN_IN_BROWSER" value="false" />
+ <option name="OUTPUT_DIRECTORY" />
+ </component>
+ <component name="IdProvider" IDEtalkID="0FACE31A44579D2420BBAE592490FBFA" />
+ <component name="InspectionProjectProfileManager">
+ <option name="PROJECT_PROFILE" value="Project Default" />
+ <option name="USE_PROJECT_LEVEL_SETTINGS" value="false" />
+ <scopes />
+ <profiles>
+ <profile version="1.0" is_locked="false">
+ <option name="myName" value="Project Default" />
+ <option name="myLocal" value="false" />
+ </profile>
+ </profiles>
+ <list size="0" />
+ </component>
+ <component name="JavacSettings">
+ <option name="DEBUGGING_INFO" value="true" />
+ <option name="GENERATE_NO_WARNINGS" value="false" />
+ <option name="DEPRECATION" value="true" />
+ <option name="ADDITIONAL_OPTIONS_STRING" value="-Xlint:all -source 1.5 -target 1.5" />
+ <option name="MAXIMUM_HEAP_SIZE" value="256" />
+ </component>
+ <component name="JavadocGenerationManager">
+ <option name="OUTPUT_DIRECTORY" value="$PROJECT_DIR$/javadoc" />
+ <option name="OPTION_SCOPE" value="protected" />
+ <option name="OPTION_HIERARCHY" value="true" />
+ <option name="OPTION_NAVIGATOR" value="true" />
+ <option name="OPTION_INDEX" value="true" />
+ <option name="OPTION_SEPARATE_INDEX" value="false" />
+ <option name="OPTION_DOCUMENT_TAG_USE" value="true" />
+ <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="true" />
+ <option name="OPTION_DOCUMENT_TAG_VERSION" value="true" />
+ <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" />
+ <option name="OPTION_DEPRECATED_LIST" value="true" />
+ <option name="OTHER_OPTIONS" value="-windowtitle &quot;Google Collections Library 0.5 (ALPHA)&quot; -link http://java.sun.com/javase/6/docs/api" />
+ <option name="HEAP_SIZE" value="256" />
+ <option name="LOCALE" />
+ <option name="OPEN_IN_BROWSER" value="false" />
+ </component>
+ <component name="JikesSettings">
+ <option name="JIKES_PATH" value="" />
+ <option name="DEBUGGING_INFO" value="true" />
+ <option name="DEPRECATION" value="true" />
+ <option name="GENERATE_NO_WARNINGS" value="false" />
+ <option name="IS_EMACS_ERRORS_MODE" value="true" />
+ <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+ </component>
+ <component name="LogConsolePreferences">
+ <option name="FILTER_ERRORS" value="false" />
+ <option name="FILTER_WARNINGS" value="false" />
+ <option name="FILTER_INFO" value="true" />
+ <option name="CUSTOM_FILTER" />
+ </component>
+ <component name="Palette2">
+ <group name="Swing">
+ <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+ </item>
+ <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+ </item>
+ <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+ </item>
+ <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
+ <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+ </item>
+ <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+ <initial-values>
+ <property name="text" value="Button" />
+ </initial-values>
+ </item>
+ <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+ <initial-values>
+ <property name="text" value="RadioButton" />
+ </initial-values>
+ </item>
+ <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+ <initial-values>
+ <property name="text" value="CheckBox" />
+ </initial-values>
+ </item>
+ <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+ <initial-values>
+ <property name="text" value="Label" />
+ </initial-values>
+ </item>
+ <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+ <preferred-size width="150" height="-1" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+ <preferred-size width="150" height="-1" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+ <preferred-size width="150" height="-1" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+ <preferred-size width="150" height="50" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+ <preferred-size width="150" height="50" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+ <preferred-size width="150" height="50" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+ </item>
+ <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+ <preferred-size width="150" height="50" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+ <preferred-size width="150" height="50" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+ <preferred-size width="150" height="50" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+ <preferred-size width="200" height="200" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+ <preferred-size width="200" height="200" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+ </item>
+ <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+ </item>
+ <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+ </item>
+ <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+ </item>
+ <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+ <preferred-size width="-1" height="20" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+ </item>
+ <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+ </item>
+ </group>
+ </component>
+ <component name="ProjectDetails">
+ <option name="projectName" value="google-collect" />
+ </component>
+ <component name="ProjectFileVersion" converted="true" />
+ <component name="ProjectKey">
+ <option name="state" value="https://google-collections.googlecode.com/svn/trunk/google-collect.ipr" />
+ </component>
+ <component name="ProjectModuleManager">
+ <modules>
+ <module fileurl="file://$PROJECT_DIR$/google-collect.iml" filepath="$PROJECT_DIR$/google-collect.iml" />
+ <module fileurl="file://$PROJECT_DIR$/test/test.iml" filepath="$PROJECT_DIR$/test/test.iml" />
+ <module fileurl="file://$PROJECT_DIR$/testfw/testfw.iml" filepath="$PROJECT_DIR$/testfw/testfw.iml" />
+ </modules>
+ </component>
+ <component name="ProjectRootManager" version="2" languageLevel="JDK_1_5" assert-keyword="true" jdk-15="true" project-jdk-name="OpenJDK (gg5)" project-jdk-type="JavaSDK">
+ <output url="file://$PROJECT_DIR$/build/ideaclasses" />
+ </component>
+ <component name="RmicSettings">
+ <option name="IS_EANABLED" value="false" />
+ <option name="DEBUGGING_INFO" value="true" />
+ <option name="GENERATE_NO_WARNINGS" value="false" />
+ <option name="GENERATE_IIOP_STUBS" value="false" />
+ <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+ </component>
+ <component name="SvnBranchConfigurationManager">
+ <option name="myConfigurationMap">
+ <map>
+ <entry key="$PROJECT_DIR$">
+ <value>
+ <SvnBranchConfiguration>
+ <option name="branchUrls">
+ <list>
+ <option value="https://google-collections.googlecode.com/svn/branches" />
+ <option value="https://google-collections.googlecode.com/svn/tags" />
+ <option value="https://google-collections.googlecode.com/svn/wiki" />
+ </list>
+ </option>
+ <option name="trunkUrl" value="https://google-collections.googlecode.com/svn/trunk" />
+ </SvnBranchConfiguration>
+ </value>
+ </entry>
+ </map>
+ </option>
+ <option name="myVersion" value="124" />
+ <option name="mySupportsUserInfoFilter" value="true" />
+ </component>
+ <component name="VcsDirectoryMappings">
+ <mapping directory="" vcs="svn" />
+ </component>
+ <component name="com.intellij.jsf.UserDefinedFacesConfigs">
+ <option name="USER_DEFINED_CONFIGS">
+ <value>
+ <list size="0" />
+ </value>
+ </option>
+ </component>
+ <component name="uidesigner-configuration">
+ <option name="INSTRUMENT_CLASSES" value="true" />
+ <option name="COPY_FORMS_RUNTIME_TO_OUTPUT" value="true" />
+ <option name="DEFAULT_LAYOUT_MANAGER" value="GridLayoutManager" />
+ </component>
+</project>
+
diff --git a/gwt/com/google/common/Collect.gwt.xml b/gwt/com/google/common/Collect.gwt.xml
new file mode 100644
index 0000000..5214110
--- /dev/null
+++ b/gwt/com/google/common/Collect.gwt.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 1.7.1//EN" "http://google-web-toolkit.googlecode.com/svn/tags/1.7.1/distro-source/core/src/gwt-module.dtd">
+<module>
+ <source path="" />
+ <super-source path="super"/>
+</module>
diff --git a/gwt/com/google/common/collect/ArrayListMultimap_CustomFieldSerializer.java b/gwt/com/google/common/collect/ArrayListMultimap_CustomFieldSerializer.java
new file mode 100644
index 0000000..31832f3
--- /dev/null
+++ b/gwt/com/google/common/collect/ArrayListMultimap_CustomFieldSerializer.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link ArrayListMultimap}.
+ *
+ * @author Chris Povirk
+ */
+public class ArrayListMultimap_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader in,
+ ArrayListMultimap<?, ?> out) {
+ }
+
+ public static ArrayListMultimap<Object, Object> instantiate(
+ SerializationStreamReader in) throws SerializationException {
+ return (ArrayListMultimap<Object, Object>)
+ Multimap_CustomFieldSerializerBase.populate(
+ in, ArrayListMultimap.create());
+ }
+
+ public static void serialize(SerializationStreamWriter out,
+ ArrayListMultimap<?, ?> multimap) throws SerializationException {
+ Multimap_CustomFieldSerializerBase.serialize(out, multimap);
+ }
+}
diff --git a/gwt/com/google/common/collect/ByFunctionOrdering_CustomFieldSerializer.java b/gwt/com/google/common/collect/ByFunctionOrdering_CustomFieldSerializer.java
new file mode 100644
index 0000000..73098f1
--- /dev/null
+++ b/gwt/com/google/common/collect/ByFunctionOrdering_CustomFieldSerializer.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.base.Function;
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link ByFunctionOrdering}.
+ *
+ * @author Chris Povirk
+ */
+public class ByFunctionOrdering_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader reader,
+ ByFunctionOrdering<?, ?> instance) {
+ }
+
+ @SuppressWarnings("unchecked") // deserialization is unsafe
+ public static ByFunctionOrdering<Object, Object> instantiate(
+ SerializationStreamReader reader) throws SerializationException {
+ return new ByFunctionOrdering<Object, Object>(
+ (Function<Object, Object>) reader.readObject(),
+ (Ordering<Object>) reader.readObject());
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ ByFunctionOrdering<?, ?> instance) throws SerializationException {
+ writer.writeObject(instance.function);
+ writer.writeObject(instance.ordering);
+ }
+}
diff --git a/gwt/com/google/common/collect/ComparatorOrdering_CustomFieldSerializer.java b/gwt/com/google/common/collect/ComparatorOrdering_CustomFieldSerializer.java
new file mode 100644
index 0000000..551a6e4
--- /dev/null
+++ b/gwt/com/google/common/collect/ComparatorOrdering_CustomFieldSerializer.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+import java.util.Comparator;
+
+/**
+ * This class implements the GWT serialization of {@link ComparatorOrdering}.
+ *
+ * @author Chris Povirk
+ */
+public class ComparatorOrdering_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader reader,
+ ComparatorOrdering<?> instance) {
+ }
+
+ @SuppressWarnings("unchecked") // deserialization is unsafe
+ public static ComparatorOrdering<Object> instantiate(
+ SerializationStreamReader reader) throws SerializationException {
+ return new ComparatorOrdering<Object>(
+ (Comparator<Object>) reader.readObject());
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ ComparatorOrdering<?> instance) throws SerializationException {
+ writer.writeObject(instance.comparator);
+ }
+}
diff --git a/gwt/com/google/common/collect/CompoundOrdering_CustomFieldSerializer.java b/gwt/com/google/common/collect/CompoundOrdering_CustomFieldSerializer.java
new file mode 100644
index 0000000..5a7f6ff
--- /dev/null
+++ b/gwt/com/google/common/collect/CompoundOrdering_CustomFieldSerializer.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+import java.util.Comparator;
+
+/**
+ * This class implements the GWT serialization of {@link CompoundOrdering}.
+ *
+ * @author Chris Povirk
+ */
+public class CompoundOrdering_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader reader,
+ CompoundOrdering<?> instance) {
+ }
+
+ @SuppressWarnings("unchecked") // deserialization is unsafe
+ public static CompoundOrdering<Object> instantiate(
+ SerializationStreamReader reader) throws SerializationException {
+ return new CompoundOrdering<Object>(
+ (ImmutableList<Comparator<Object>>) reader.readObject());
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ CompoundOrdering<?> instance) throws SerializationException {
+ writer.writeObject(instance.comparators);
+ }
+}
diff --git a/gwt/com/google/common/collect/EmptyImmutableListMultimap_CustomFieldSerializer.java b/gwt/com/google/common/collect/EmptyImmutableListMultimap_CustomFieldSerializer.java
new file mode 100644
index 0000000..1da6828
--- /dev/null
+++ b/gwt/com/google/common/collect/EmptyImmutableListMultimap_CustomFieldSerializer.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of
+ * {@link EmptyImmutableListMultimap}.
+ *
+ * @author Chris Povirk
+ */
+public class EmptyImmutableListMultimap_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader reader,
+ EmptyImmutableListMultimap instance) {
+ }
+
+ public static EmptyImmutableListMultimap instantiate(
+ SerializationStreamReader reader) {
+ return EmptyImmutableListMultimap.INSTANCE;
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ EmptyImmutableListMultimap instance) {
+ }
+}
diff --git a/gwt/com/google/common/collect/EmptyImmutableList_CustomFieldSerializer.java b/gwt/com/google/common/collect/EmptyImmutableList_CustomFieldSerializer.java
new file mode 100644
index 0000000..18b3b02
--- /dev/null
+++ b/gwt/com/google/common/collect/EmptyImmutableList_CustomFieldSerializer.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link EmptyImmutableList}.
+ *
+ * @author Chris Povirk
+ */
+public class EmptyImmutableList_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader reader,
+ EmptyImmutableList instance) {
+ }
+
+ public static EmptyImmutableList instantiate(
+ SerializationStreamReader reader) {
+ return EmptyImmutableList.INSTANCE;
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ EmptyImmutableList instance) {
+ }
+}
diff --git a/gwt/com/google/common/collect/EmptyImmutableMap_CustomFieldSerializer.java b/gwt/com/google/common/collect/EmptyImmutableMap_CustomFieldSerializer.java
new file mode 100644
index 0000000..a92ce6b
--- /dev/null
+++ b/gwt/com/google/common/collect/EmptyImmutableMap_CustomFieldSerializer.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of
+ * {@link EmptyImmutableMap}.
+ *
+ * @author Chris Povirk
+ */
+public class EmptyImmutableMap_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader reader,
+ EmptyImmutableMap instance) {
+ }
+
+ public static EmptyImmutableMap instantiate(
+ SerializationStreamReader reader) {
+ return EmptyImmutableMap.INSTANCE;
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ EmptyImmutableMap instance) {
+ }
+}
diff --git a/gwt/com/google/common/collect/EmptyImmutableMultiset_CustomFieldSerializer.java b/gwt/com/google/common/collect/EmptyImmutableMultiset_CustomFieldSerializer.java
new file mode 100644
index 0000000..6f1f51c
--- /dev/null
+++ b/gwt/com/google/common/collect/EmptyImmutableMultiset_CustomFieldSerializer.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of
+ * {@link EmptyImmutableMultiset}.
+ *
+ * @author Chris Povirk
+ */
+public class EmptyImmutableMultiset_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader reader,
+ EmptyImmutableMultiset instance) {
+ }
+
+ public static EmptyImmutableMultiset instantiate(
+ SerializationStreamReader reader) {
+ return EmptyImmutableMultiset.INSTANCE;
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ EmptyImmutableMultiset instance) {
+ }
+}
diff --git a/gwt/com/google/common/collect/EmptyImmutableSetMultimap_CustomFieldSerializer.java b/gwt/com/google/common/collect/EmptyImmutableSetMultimap_CustomFieldSerializer.java
new file mode 100644
index 0000000..8113ac3
--- /dev/null
+++ b/gwt/com/google/common/collect/EmptyImmutableSetMultimap_CustomFieldSerializer.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of
+ * {@link EmptyImmutableSetMultimap}.
+ *
+ * @author Chris Povirk
+ */
+public class EmptyImmutableSetMultimap_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader reader,
+ EmptyImmutableSetMultimap instance) {
+ }
+
+ public static EmptyImmutableSetMultimap instantiate(
+ SerializationStreamReader reader) {
+ return EmptyImmutableSetMultimap.INSTANCE;
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ EmptyImmutableSetMultimap instance) {
+ }
+}
diff --git a/gwt/com/google/common/collect/EmptyImmutableSet_CustomFieldSerializer.java b/gwt/com/google/common/collect/EmptyImmutableSet_CustomFieldSerializer.java
new file mode 100644
index 0000000..289f584
--- /dev/null
+++ b/gwt/com/google/common/collect/EmptyImmutableSet_CustomFieldSerializer.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link EmptyImmutableSet}.
+ *
+ * @author Chris Povirk
+ */
+public class EmptyImmutableSet_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader reader,
+ EmptyImmutableSet instance) {
+ }
+
+ public static EmptyImmutableSet instantiate(
+ SerializationStreamReader reader) {
+ return EmptyImmutableSet.INSTANCE;
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ EmptyImmutableSet instance) {
+ }
+}
diff --git a/gwt/com/google/common/collect/EmptyImmutableSortedSet_CustomFieldSerializer.java b/gwt/com/google/common/collect/EmptyImmutableSortedSet_CustomFieldSerializer.java
new file mode 100644
index 0000000..bda10fc
--- /dev/null
+++ b/gwt/com/google/common/collect/EmptyImmutableSortedSet_CustomFieldSerializer.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+import java.util.Comparator;
+
+/**
+ * This class implements the GWT serialization of
+ * {@link EmptyImmutableSortedSet}.
+ *
+ * @author Chris Povirk
+ */
+public class EmptyImmutableSortedSet_CustomFieldSerializer {
+ public static void deserialize(SerializationStreamReader reader,
+ EmptyImmutableSortedSet<?> instance) {
+ }
+
+ public static EmptyImmutableSortedSet<Object> instantiate(
+ SerializationStreamReader reader) throws SerializationException {
+ /*
+ * Nothing we can do, but we're already assuming the serialized form is
+ * correctly typed, anyway.
+ */
+ @SuppressWarnings("unchecked")
+ Comparator<Object> comparator = (Comparator<Object>) reader.readObject();
+
+ /*
+ * For this custom field serializer to be invoked, the set must have been
+ * EmptyImmutableSortedSet before it's serialized. Since
+ * EmptyImmutableSortedSet always has no elements, ImmutableSortedSet.copyOf
+ * always return an EmptyImmutableSortedSet back.
+ */
+ return (EmptyImmutableSortedSet<Object>)
+ ImmutableSortedSet.orderedBy(comparator).build();
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ EmptyImmutableSortedSet<?> instance) throws SerializationException {
+ writer.writeObject(instance.comparator());
+ }
+}
diff --git a/gwt/com/google/common/collect/ExplicitOrdering_CustomFieldSerializer.java b/gwt/com/google/common/collect/ExplicitOrdering_CustomFieldSerializer.java
new file mode 100644
index 0000000..d6ef9c0
--- /dev/null
+++ b/gwt/com/google/common/collect/ExplicitOrdering_CustomFieldSerializer.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link ExplicitOrdering}.
+ *
+ * @author Chris Povirk
+ */
+public class ExplicitOrdering_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader reader,
+ ExplicitOrdering<?> instance) {
+ }
+
+ @SuppressWarnings("unchecked") // deserialization is unsafe
+ public static ExplicitOrdering<Object> instantiate(
+ SerializationStreamReader reader) throws SerializationException {
+ return new ExplicitOrdering<Object>(
+ (ImmutableMap<Object, Integer>) reader.readObject());
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ ExplicitOrdering<?> instance) throws SerializationException {
+ writer.writeObject(instance.rankMap);
+ }
+}
diff --git a/gwt/com/google/common/collect/HashMultimap_CustomFieldSerializer.java b/gwt/com/google/common/collect/HashMultimap_CustomFieldSerializer.java
new file mode 100644
index 0000000..bd0f36b
--- /dev/null
+++ b/gwt/com/google/common/collect/HashMultimap_CustomFieldSerializer.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link HashMultimap}.
+ *
+ * @author Jord Sonneveld
+ *
+ */
+public class HashMultimap_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader in,
+ HashMultimap<?, ?> out) {
+ }
+
+ public static HashMultimap<Object, Object> instantiate(
+ SerializationStreamReader in) throws SerializationException {
+ return (HashMultimap<Object, Object>)
+ Multimap_CustomFieldSerializerBase.populate(in, HashMultimap.create());
+ }
+
+ public static void serialize(SerializationStreamWriter out,
+ HashMultimap<?, ?> multimap) throws SerializationException {
+ Multimap_CustomFieldSerializerBase.serialize(out, multimap);
+ }
+}
diff --git a/gwt/com/google/common/collect/HashMultiset_CustomFieldSerializer.java b/gwt/com/google/common/collect/HashMultiset_CustomFieldSerializer.java
new file mode 100644
index 0000000..d5ba698
--- /dev/null
+++ b/gwt/com/google/common/collect/HashMultiset_CustomFieldSerializer.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link HashMultiset}.
+ *
+ * @author Chris Povirk
+ */
+public class HashMultiset_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader reader,
+ HashMultiset<?> instance) {
+ }
+
+ public static HashMultiset<Object> instantiate(
+ SerializationStreamReader reader) throws SerializationException {
+ return (HashMultiset<Object>) Multiset_CustomFieldSerializerBase.populate(
+ reader, HashMultiset.create());
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ HashMultiset<?> instance) throws SerializationException {
+ Multiset_CustomFieldSerializerBase.serialize(writer, instance);
+ }
+}
diff --git a/gwt/com/google/common/collect/ImmutableListMultimap_CustomFieldSerializer.java b/gwt/com/google/common/collect/ImmutableListMultimap_CustomFieldSerializer.java
new file mode 100644
index 0000000..0457a27
--- /dev/null
+++ b/gwt/com/google/common/collect/ImmutableListMultimap_CustomFieldSerializer.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link ImmutableListMultimap}.
+ *
+ * @author Chris Povirk
+ */
+public class ImmutableListMultimap_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader reader,
+ ImmutableListMultimap<?, ?> instance) {
+ }
+
+ public static ImmutableListMultimap<Object, Object> instantiate(
+ SerializationStreamReader reader) throws SerializationException {
+ return (ImmutableListMultimap<Object, Object>)
+ Multimap_CustomFieldSerializerBase.instantiate(
+ reader, ImmutableListMultimap.builder());
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ ImmutableListMultimap<?, ?> instance) throws SerializationException {
+ Multimap_CustomFieldSerializerBase.serialize(writer, instance);
+ }
+}
diff --git a/gwt/com/google/common/collect/ImmutableMultiset_CustomFieldSerializer.java b/gwt/com/google/common/collect/ImmutableMultiset_CustomFieldSerializer.java
new file mode 100644
index 0000000..d1aba61
--- /dev/null
+++ b/gwt/com/google/common/collect/ImmutableMultiset_CustomFieldSerializer.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link ImmutableMultiset}.
+ *
+ * @author Chris Povirk
+ */
+public class ImmutableMultiset_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader reader,
+ ImmutableMultiset<?> instance) {
+ }
+
+ public static ImmutableMultiset<Object> instantiate(
+ SerializationStreamReader reader) throws SerializationException {
+ return Multiset_CustomFieldSerializerBase.instantiate(
+ reader, ImmutableMultiset.builder());
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ ImmutableMultiset<?> instance) throws SerializationException {
+ Multiset_CustomFieldSerializerBase.serialize(writer, instance);
+ }
+}
diff --git a/gwt/com/google/common/collect/ImmutableSetMultimap_CustomFieldSerializer.java b/gwt/com/google/common/collect/ImmutableSetMultimap_CustomFieldSerializer.java
new file mode 100644
index 0000000..8d5ebd7
--- /dev/null
+++ b/gwt/com/google/common/collect/ImmutableSetMultimap_CustomFieldSerializer.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link ImmutableSetMultimap}.
+ *
+ * @author Chris Povirk
+ */
+public class ImmutableSetMultimap_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader reader,
+ ImmutableSetMultimap<?, ?> instance) {
+ }
+
+ public static ImmutableSetMultimap<Object, Object> instantiate(
+ SerializationStreamReader reader) throws SerializationException {
+ return (ImmutableSetMultimap<Object, Object>)
+ Multimap_CustomFieldSerializerBase.instantiate(
+ reader, ImmutableSetMultimap.builder());
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ ImmutableSetMultimap<?, ?> instance) throws SerializationException {
+ Multimap_CustomFieldSerializerBase.serialize(writer, instance);
+ }
+}
diff --git a/gwt/com/google/common/collect/ImmutableSortedMap_CustomFieldSerializer.java b/gwt/com/google/common/collect/ImmutableSortedMap_CustomFieldSerializer.java
new file mode 100644
index 0000000..750f5a8
--- /dev/null
+++ b/gwt/com/google/common/collect/ImmutableSortedMap_CustomFieldSerializer.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+import com.google.gwt.user.client.rpc.core.java.util.Map_CustomFieldSerializerBase;
+
+import java.util.Comparator;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+/**
+ * This class implements the GWT serialization of {@link ImmutableSortedMap}.
+ *
+ * @author Chris Povirk
+ */
+public class ImmutableSortedMap_CustomFieldSerializer {
+ public static void deserialize(SerializationStreamReader reader,
+ ImmutableSortedMap<?, ?> instance) {
+ }
+
+ public static ImmutableSortedMap<?, ?> instantiate(
+ SerializationStreamReader reader) throws SerializationException {
+ /*
+ * Nothing we can do, but we're already assuming the serialized form is
+ * correctly typed, anyway.
+ */
+ @SuppressWarnings("unchecked")
+ Comparator<Object> comparator = (Comparator<Object>) reader.readObject();
+
+ SortedMap<Object, Object> entries = new TreeMap<Object, Object>(comparator);
+ Map_CustomFieldSerializerBase.deserialize(reader, entries);
+
+ return ImmutableSortedMap.orderedBy(comparator).putAll(entries).build();
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ ImmutableSortedMap<?, ?> instance) throws SerializationException {
+ writer.writeObject(instance.comparator());
+
+ Map_CustomFieldSerializerBase.serialize(writer, instance);
+ }
+}
diff --git a/gwt/com/google/common/collect/LinkedHashMultimap_CustomFieldSerializer.java b/gwt/com/google/common/collect/LinkedHashMultimap_CustomFieldSerializer.java
new file mode 100644
index 0000000..07caa9b
--- /dev/null
+++ b/gwt/com/google/common/collect/LinkedHashMultimap_CustomFieldSerializer.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+import java.util.Map;
+
+/**
+ * This class implements the GWT serialization of {@link LinkedHashMultimap}.
+ *
+ * @author Chris Povirk
+ */
+public class LinkedHashMultimap_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader in,
+ LinkedHashMultimap<?, ?> out) {
+ }
+
+ public static LinkedHashMultimap<Object, Object> instantiate(
+ SerializationStreamReader in) throws SerializationException {
+ LinkedHashMultimap<Object, Object> multimap =
+ (LinkedHashMultimap<Object, Object>)
+ Multimap_CustomFieldSerializerBase.populate(
+ in, LinkedHashMultimap.create());
+
+ multimap.linkedEntries.clear(); // will clear and repopulate entries
+ for (int i = 0; i < multimap.size(); i++) {
+ Object key = in.readObject();
+ Object value = in.readObject();
+ multimap.linkedEntries.add(Maps.immutableEntry(key, value));
+ }
+
+ return multimap;
+ }
+
+ public static void serialize(SerializationStreamWriter out,
+ LinkedHashMultimap<?, ?> multimap) throws SerializationException {
+ Multimap_CustomFieldSerializerBase.serialize(out, multimap);
+ for (Map.Entry<?, ?> entry : multimap.entries()) {
+ out.writeObject(entry.getKey());
+ out.writeObject(entry.getValue());
+ }
+ }
+}
diff --git a/gwt/com/google/common/collect/LinkedHashMultiset_CustomFieldSerializer.java b/gwt/com/google/common/collect/LinkedHashMultiset_CustomFieldSerializer.java
new file mode 100644
index 0000000..9d752ff
--- /dev/null
+++ b/gwt/com/google/common/collect/LinkedHashMultiset_CustomFieldSerializer.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link LinkedHashMultiset}.
+ *
+ * @author Chris Povirk
+ */
+public class LinkedHashMultiset_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader reader,
+ LinkedHashMultiset<?> instance) {
+ }
+
+ public static LinkedHashMultiset<Object> instantiate(
+ SerializationStreamReader reader) throws SerializationException {
+ return (LinkedHashMultiset<Object>)
+ Multiset_CustomFieldSerializerBase.populate(
+ reader, LinkedHashMultiset.create());
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ LinkedHashMultiset<?> instance) throws SerializationException {
+ Multiset_CustomFieldSerializerBase.serialize(writer, instance);
+ }
+}
diff --git a/gwt/com/google/common/collect/LinkedListMultimap_CustomFieldSerializer.java b/gwt/com/google/common/collect/LinkedListMultimap_CustomFieldSerializer.java
new file mode 100644
index 0000000..d35b511
--- /dev/null
+++ b/gwt/com/google/common/collect/LinkedListMultimap_CustomFieldSerializer.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+import java.util.Map;
+
+/**
+ * This class implements the GWT serialization of {@link LinkedListMultimap}.
+ *
+ * @author Chris Povirk
+ */
+public class LinkedListMultimap_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader in,
+ LinkedListMultimap<?, ?> out) {
+ }
+
+ public static LinkedListMultimap<Object, Object> instantiate(
+ SerializationStreamReader in) throws SerializationException {
+ LinkedListMultimap<Object, Object> multimap = LinkedListMultimap.create();
+ int size = in.readInt();
+ for (int i = 0; i < size; i++) {
+ Object key = in.readObject();
+ Object value = in.readObject();
+ multimap.put(key, value);
+ }
+ return multimap;
+ }
+
+ public static void serialize(SerializationStreamWriter out,
+ LinkedListMultimap<?, ?> multimap) throws SerializationException {
+ out.writeInt(multimap.size());
+ for (Map.Entry<?, ?> entry : multimap.entries()) {
+ out.writeObject(entry.getKey());
+ out.writeObject(entry.getValue());
+ }
+ }
+}
diff --git a/gwt/com/google/common/collect/Multimap_CustomFieldSerializerBase.java b/gwt/com/google/common/collect/Multimap_CustomFieldSerializerBase.java
new file mode 100644
index 0000000..4b72003
--- /dev/null
+++ b/gwt/com/google/common/collect/Multimap_CustomFieldSerializerBase.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * This class contains static utility methods for writing {@code Multimap} GWT
+ * field serializers. Serializers should delegate to
+ * {@link #serialize(SerializationStreamWriter, Multimap)} and to either
+ * {@link #instantiate(SerializationStreamReader, ImmutableMultimap.Builder)} or
+ * {@link #populate(SerializationStreamReader, Multimap)}.
+ *
+ * @author Chris Povirk
+ */
+final class Multimap_CustomFieldSerializerBase {
+ static ImmutableMultimap<Object, Object> instantiate(
+ SerializationStreamReader reader,
+ ImmutableMultimap.Builder<Object, Object> builder)
+ throws SerializationException {
+ int keyCount = reader.readInt();
+ for (int i = 0; i < keyCount; ++i) {
+ Object key = reader.readObject();
+ int valueCount = reader.readInt();
+ for (int j = 0; j < valueCount; ++j) {
+ Object value = reader.readObject();
+ builder.put(key, value);
+ }
+ }
+ return builder.build();
+ }
+
+ static Multimap<Object, Object> populate(
+ SerializationStreamReader reader, Multimap<Object, Object> multimap)
+ throws SerializationException {
+ int keyCount = reader.readInt();
+ for (int i = 0; i < keyCount; ++i) {
+ Object key = reader.readObject();
+ int valueCount = reader.readInt();
+ for (int j = 0; j < valueCount; ++j) {
+ Object value = reader.readObject();
+ multimap.put(key, value);
+ }
+ }
+ return multimap;
+ }
+
+ static void serialize(
+ SerializationStreamWriter writer, Multimap<?, ?> instance)
+ throws SerializationException {
+ writer.writeInt(instance.asMap().size());
+ for (Map.Entry<?, ? extends Collection<?>> entry
+ : instance.asMap().entrySet()) {
+ writer.writeObject(entry.getKey());
+ writer.writeInt(entry.getValue().size());
+ for (Object value : entry.getValue()) {
+ writer.writeObject(value);
+ }
+ }
+ }
+
+ private Multimap_CustomFieldSerializerBase() {}
+}
diff --git a/gwt/com/google/common/collect/Multiset_CustomFieldSerializerBase.java b/gwt/com/google/common/collect/Multiset_CustomFieldSerializerBase.java
new file mode 100644
index 0000000..df532db
--- /dev/null
+++ b/gwt/com/google/common/collect/Multiset_CustomFieldSerializerBase.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class contains static utility methods for writing {@code Multiset} GWT
+ * field serializers. Serializers should delegate to
+ * {@link #serialize(SerializationStreamWriter, Multiset)} and to either
+ * {@link #instantiate(SerializationStreamReader, ImmutableMultiset.Builder)} or
+ * {@link #populate(SerializationStreamReader, Multiset)}.
+ *
+ * @author Chris Povirk
+ */
+final class Multiset_CustomFieldSerializerBase {
+ static ImmutableMultiset<Object> instantiate(
+ SerializationStreamReader reader,
+ ImmutableMultiset.Builder<Object> builder)
+ throws SerializationException {
+ int distinctElements = reader.readInt();
+ for (int i = 0; i < distinctElements; i++) {
+ Object element = reader.readObject();
+ int count = reader.readInt();
+ builder.addCopies(element, count);
+ }
+ return builder.build();
+ }
+
+ static Multiset<Object> populate(
+ SerializationStreamReader reader, Multiset<Object> multiset)
+ throws SerializationException {
+ int distinctElements = reader.readInt();
+ for (int i = 0; i < distinctElements; i++) {
+ Object element = reader.readObject();
+ int count = reader.readInt();
+ multiset.add(element, count);
+ }
+ return multiset;
+ }
+
+ static void serialize(SerializationStreamWriter writer, Multiset<?> instance)
+ throws SerializationException {
+ int entryCount = instance.entrySet().size();
+ writer.writeInt(entryCount);
+ for (Multiset.Entry<?> entry : instance.entrySet()) {
+ writer.writeObject(entry.getElement());
+ writer.writeInt(entry.getCount());
+ }
+ }
+
+ private Multiset_CustomFieldSerializerBase() {}
+}
diff --git a/gwt/com/google/common/collect/NaturalOrdering_CustomFieldSerializer.java b/gwt/com/google/common/collect/NaturalOrdering_CustomFieldSerializer.java
new file mode 100644
index 0000000..bfbf118
--- /dev/null
+++ b/gwt/com/google/common/collect/NaturalOrdering_CustomFieldSerializer.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link NaturalOrdering}.
+ *
+ * @author Chris Povirk
+ */
+public class NaturalOrdering_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader reader,
+ NaturalOrdering instance) {
+ }
+
+ public static NaturalOrdering instantiate(
+ SerializationStreamReader reader) {
+ return NaturalOrdering.INSTANCE;
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ NaturalOrdering instance) {
+ }
+}
diff --git a/gwt/com/google/common/collect/NullsFirstOrdering_CustomFieldSerializer.java b/gwt/com/google/common/collect/NullsFirstOrdering_CustomFieldSerializer.java
new file mode 100644
index 0000000..cb8c2f8
--- /dev/null
+++ b/gwt/com/google/common/collect/NullsFirstOrdering_CustomFieldSerializer.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link NullsFirstOrdering}.
+ *
+ * @author Chris Povirk
+ */
+public class NullsFirstOrdering_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader reader,
+ NullsFirstOrdering<?> instance) {
+ }
+
+ @SuppressWarnings("unchecked") // deserialization is unsafe
+ public static NullsFirstOrdering<Object> instantiate(
+ SerializationStreamReader reader) throws SerializationException {
+ return new NullsFirstOrdering<Object>(
+ (Ordering<Object>) reader.readObject());
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ NullsFirstOrdering<?> instance) throws SerializationException {
+ writer.writeObject(instance.ordering);
+ }
+}
diff --git a/gwt/com/google/common/collect/NullsLastOrdering_CustomFieldSerializer.java b/gwt/com/google/common/collect/NullsLastOrdering_CustomFieldSerializer.java
new file mode 100644
index 0000000..4fb0fe6
--- /dev/null
+++ b/gwt/com/google/common/collect/NullsLastOrdering_CustomFieldSerializer.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link NullsLastOrdering}.
+ *
+ * @author Chris Povirk
+ */
+public class NullsLastOrdering_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader reader,
+ NullsLastOrdering<?> instance) {
+ }
+
+ @SuppressWarnings("unchecked") // deserialization is unsafe
+ public static NullsLastOrdering<Object> instantiate(
+ SerializationStreamReader reader) throws SerializationException {
+ return new NullsLastOrdering<Object>(
+ (Ordering<Object>) reader.readObject());
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ NullsLastOrdering<?> instance) throws SerializationException {
+ writer.writeObject(instance.ordering);
+ }
+}
diff --git a/gwt/com/google/common/collect/RegularImmutableBiMap_CustomFieldSerializer.java b/gwt/com/google/common/collect/RegularImmutableBiMap_CustomFieldSerializer.java
new file mode 100644
index 0000000..f7e2572
--- /dev/null
+++ b/gwt/com/google/common/collect/RegularImmutableBiMap_CustomFieldSerializer.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+import com.google.gwt.user.client.rpc.core.java.util.Map_CustomFieldSerializerBase;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * This class implements the GWT serialization of
+ * {@link RegularImmutableBiMap}.
+ *
+ * @author Chris Povirk
+ */
+public class RegularImmutableBiMap_CustomFieldSerializer {
+ public static void deserialize(SerializationStreamReader reader,
+ RegularImmutableBiMap<?, ?> instance) {
+ }
+
+ public static RegularImmutableBiMap<Object, Object> instantiate(
+ SerializationStreamReader reader) throws SerializationException {
+ Map<Object, Object> entries = new LinkedHashMap<Object, Object>();
+ Map_CustomFieldSerializerBase.deserialize(reader, entries);
+ /*
+ * For this custom field serializer to be invoked, the map must have been
+ * RegularImmutableBiMap before it's serialized. Since RegularImmutableBiMap
+ * always have one or more elements, ImmutableBiMap.copyOf always return a
+ * RegularImmutableBiMap back.
+ */
+ return
+ (RegularImmutableBiMap<Object, Object>) ImmutableBiMap.copyOf(entries);
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ RegularImmutableBiMap<?, ?> instance) throws SerializationException {
+ Map_CustomFieldSerializerBase.serialize(writer, instance);
+ }
+}
diff --git a/gwt/com/google/common/collect/RegularImmutableList_CustomFieldSerializer.java b/gwt/com/google/common/collect/RegularImmutableList_CustomFieldSerializer.java
new file mode 100644
index 0000000..e89afdd
--- /dev/null
+++ b/gwt/com/google/common/collect/RegularImmutableList_CustomFieldSerializer.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+import com.google.gwt.user.client.rpc.core.java.util.Collection_CustomFieldSerializerBase;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * This class implements the GWT serialization of {@link
+ * RegularImmutableList}.
+ *
+ * @author Hayward Chan
+ */
+public class RegularImmutableList_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader reader,
+ RegularImmutableList<?> instance) {
+ }
+
+ public static RegularImmutableList<Object> instantiate(
+ SerializationStreamReader reader) throws SerializationException {
+ List<Object> elements = new ArrayList<Object>();
+ Collection_CustomFieldSerializerBase.deserialize(reader, elements);
+ /*
+ * For this custom field serializer to be invoked, the list must have been
+ * RegularImmutableList before it's serialized. Since RegularImmutableList
+ * always have one or more elements, ImmutableList.copyOf always return
+ * a RegularImmutableList back.
+ */
+ return (RegularImmutableList<Object>) ImmutableList.copyOf(elements);
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ RegularImmutableList<?> instance) throws SerializationException {
+ Collection_CustomFieldSerializerBase.serialize(writer, instance);
+ }
+}
diff --git a/gwt/com/google/common/collect/RegularImmutableMap_CustomFieldSerializer.java b/gwt/com/google/common/collect/RegularImmutableMap_CustomFieldSerializer.java
new file mode 100644
index 0000000..8a75463
--- /dev/null
+++ b/gwt/com/google/common/collect/RegularImmutableMap_CustomFieldSerializer.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+import com.google.gwt.user.client.rpc.core.java.util.Map_CustomFieldSerializerBase;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * This class implements the GWT serialization of {@link RegularImmutableMap}.
+ *
+ * @author Hayward Chan
+ */
+public class RegularImmutableMap_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader reader,
+ RegularImmutableMap<?, ?> instance) {
+ }
+
+ public static RegularImmutableMap<Object, Object> instantiate(
+ SerializationStreamReader reader) throws SerializationException {
+ Map<Object, Object> entries = new LinkedHashMap<Object, Object>();
+ Map_CustomFieldSerializerBase.deserialize(reader, entries);
+ /*
+ * For this custom field serializer to be invoked, the map must have been
+ * RegularImmutableMap before it's serialized. Since RegularImmutableMap
+ * always have two or more elements, ImmutableMap.copyOf always return
+ * a RegularImmutableMap back.
+ */
+ return (RegularImmutableMap<Object, Object>) ImmutableMap.copyOf(entries);
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ RegularImmutableMap<?, ?> instance) throws SerializationException {
+ Map_CustomFieldSerializerBase.serialize(writer, instance);
+ }
+}
diff --git a/gwt/com/google/common/collect/RegularImmutableSet_CustomFieldSerializer.java b/gwt/com/google/common/collect/RegularImmutableSet_CustomFieldSerializer.java
new file mode 100644
index 0000000..8179dfb
--- /dev/null
+++ b/gwt/com/google/common/collect/RegularImmutableSet_CustomFieldSerializer.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+import com.google.gwt.user.client.rpc.core.java.util.Collection_CustomFieldSerializerBase;
+
+import java.util.List;
+
+/**
+ * This class implements the GWT serialization of {@link RegularImmutableSet}.
+ *
+ * @author Hayward Chan
+ */
+public class RegularImmutableSet_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader reader,
+ RegularImmutableSet<?> instance) {
+ }
+
+ public static RegularImmutableSet<Object> instantiate(
+ SerializationStreamReader reader) throws SerializationException {
+ List<Object> elements = Lists.newArrayList();
+ Collection_CustomFieldSerializerBase.deserialize(reader, elements);
+ /*
+ * For this custom field serializer to be invoked, the set must have been
+ * RegularImmutableSet before it's serialized. Since RegularImmutableSet
+ * always have two or more elements, ImmutableSet.copyOf always return
+ * a RegularImmutableSet back.
+ */
+ return (RegularImmutableSet<Object>) ImmutableSet.copyOf(elements);
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ RegularImmutableSet<?> instance) throws SerializationException {
+ Collection_CustomFieldSerializerBase.serialize(writer, instance);
+ }
+}
diff --git a/gwt/com/google/common/collect/RegularImmutableSortedSet_CustomFieldSerializer.java b/gwt/com/google/common/collect/RegularImmutableSortedSet_CustomFieldSerializer.java
new file mode 100644
index 0000000..6ae20e1
--- /dev/null
+++ b/gwt/com/google/common/collect/RegularImmutableSortedSet_CustomFieldSerializer.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+import com.google.gwt.user.client.rpc.core.java.util.Collection_CustomFieldSerializerBase;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * This class implements the GWT serialization of
+ * {@link RegularImmutableSortedSet}.
+ *
+ * @author Chris Povirk
+ */
+public class RegularImmutableSortedSet_CustomFieldSerializer {
+ public static void deserialize(SerializationStreamReader reader,
+ RegularImmutableSortedSet<?> instance) {
+ }
+
+ public static RegularImmutableSortedSet<Object> instantiate(
+ SerializationStreamReader reader) throws SerializationException {
+ /*
+ * Nothing we can do, but we're already assuming the serialized form is
+ * correctly typed, anyway.
+ */
+ @SuppressWarnings("unchecked")
+ Comparator<Object> comparator = (Comparator<Object>) reader.readObject();
+
+ List<Object> elements = new ArrayList<Object>();
+ Collection_CustomFieldSerializerBase.deserialize(reader, elements);
+ /*
+ * For this custom field serializer to be invoked, the set must have been
+ * RegularImmutableSortedSet before it's serialized. Since
+ * RegularImmutableSortedSet always have one or more elements,
+ * ImmutableSortedSet.copyOf always return a RegularImmutableSortedSet back.
+ */
+ return (RegularImmutableSortedSet<Object>)
+ ImmutableSortedSet.copyOf(comparator, elements);
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ RegularImmutableSortedSet<?> instance) throws SerializationException {
+ writer.writeObject(instance.comparator());
+
+ Collection_CustomFieldSerializerBase.serialize(writer, instance);
+ }
+}
diff --git a/gwt/com/google/common/collect/ReverseNaturalOrdering_CustomFieldSerializer.java b/gwt/com/google/common/collect/ReverseNaturalOrdering_CustomFieldSerializer.java
new file mode 100644
index 0000000..d0f1e81
--- /dev/null
+++ b/gwt/com/google/common/collect/ReverseNaturalOrdering_CustomFieldSerializer.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of
+ * {@link ReverseNaturalOrdering}.
+ *
+ * @author Chris Povirk
+ */
+public class ReverseNaturalOrdering_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader reader,
+ ReverseNaturalOrdering instance) {
+ }
+
+ public static ReverseNaturalOrdering instantiate(
+ SerializationStreamReader reader) {
+ return ReverseNaturalOrdering.INSTANCE;
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ ReverseNaturalOrdering instance) {
+ }
+}
diff --git a/gwt/com/google/common/collect/ReverseOrdering_CustomFieldSerializer.java b/gwt/com/google/common/collect/ReverseOrdering_CustomFieldSerializer.java
new file mode 100644
index 0000000..94b6b0e
--- /dev/null
+++ b/gwt/com/google/common/collect/ReverseOrdering_CustomFieldSerializer.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link ReverseOrdering}.
+ *
+ * @author Chris Povirk
+ */
+public class ReverseOrdering_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader reader,
+ ReverseOrdering<?> instance) {
+ }
+
+ @SuppressWarnings("unchecked") // deserialization is unsafe
+ public static ReverseOrdering<Object> instantiate(
+ SerializationStreamReader reader) throws SerializationException {
+ return new ReverseOrdering<Object>(
+ (Ordering<Object>) reader.readObject());
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ ReverseOrdering<?> instance) throws SerializationException {
+ writer.writeObject(instance.forwardOrder);
+ }
+}
diff --git a/gwt/com/google/common/collect/SingletonImmutableSet_CustomFieldSerializer.java b/gwt/com/google/common/collect/SingletonImmutableSet_CustomFieldSerializer.java
new file mode 100644
index 0000000..a67b344
--- /dev/null
+++ b/gwt/com/google/common/collect/SingletonImmutableSet_CustomFieldSerializer.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link SingletonImmutableSet}.
+ *
+ * @author Hayward Chan
+ */
+public class SingletonImmutableSet_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader reader,
+ SingletonImmutableSet<?> instance) {
+ }
+
+ public static SingletonImmutableSet<Object> instantiate(
+ SerializationStreamReader reader) throws SerializationException {
+ Object element = reader.readObject();
+ return new SingletonImmutableSet<Object>(element, element.hashCode());
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ SingletonImmutableSet<?> instance) throws SerializationException {
+ writer.writeObject(instance.element);
+ }
+}
diff --git a/gwt/com/google/common/collect/UsingToStringOrdering_CustomFieldSerializer.java b/gwt/com/google/common/collect/UsingToStringOrdering_CustomFieldSerializer.java
new file mode 100644
index 0000000..b6e32a7
--- /dev/null
+++ b/gwt/com/google/common/collect/UsingToStringOrdering_CustomFieldSerializer.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link UsingToStringOrdering}.
+ *
+ * @author Chris Povirk
+ */
+public class UsingToStringOrdering_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader reader,
+ UsingToStringOrdering instance) {
+ }
+
+ public static UsingToStringOrdering instantiate(
+ SerializationStreamReader reader) {
+ return UsingToStringOrdering.INSTANCE;
+ }
+
+ public static void serialize(SerializationStreamWriter writer,
+ UsingToStringOrdering instance) {
+ }
+}
diff --git a/gwt/com/google/common/super/com/google/common/base/Platform.java b/gwt/com/google/common/super/com/google/common/base/Platform.java
new file mode 100644
index 0000000..e5f6b1c
--- /dev/null
+++ b/gwt/com/google/common/super/com/google/common/base/Platform.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.base;
+
+/**
+ * @author Jesse Wilson
+ */
+class Platform {
+ static boolean isInstance(Class<?> clazz, Object obj) {
+ throw new UnsupportedOperationException(
+ "Class.isInstance is not supported in GWT yet.");
+ }
+}
diff --git a/gwt/com/google/common/super/com/google/common/collect/MapMaker.java b/gwt/com/google/common/super/com/google/common/collect/MapMaker.java
new file mode 100644
index 0000000..2020f70
--- /dev/null
+++ b/gwt/com/google/common/super/com/google/common/collect/MapMaker.java
@@ -0,0 +1,165 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.base.Function;
+import com.google.gwt.user.client.Timer;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * MapMaker emulation. Since Javascript is single-threaded and have no
+ * references, this reduces to the creation of expiring and computing maps.
+ *
+ * @author Charles Fry
+ */
+public class MapMaker {
+
+ private static class ExpiringComputingMap<K, V>
+ extends ConcurrentHashMap<K, V> {
+ private long expirationMillis;
+ private final Function<? super K, ? extends V> computer;
+
+ public ExpiringComputingMap(long expirationMillis) {
+ this(expirationMillis, null);
+ }
+
+ public ExpiringComputingMap(long expirationMillis,
+ Function<? super K, ? extends V> computer) {
+ this.expirationMillis = expirationMillis;
+ this.computer = computer;
+ }
+
+ @Override
+ public V put(K key, V value) {
+ V result = super.put(key, value);
+ if (expirationMillis > 0) {
+ scheduleRemoval(key, value);
+ }
+ return result;
+ }
+
+ private void scheduleRemoval(final K key, final V value) {
+ // from MapMaker
+ /*
+ * TODO: Keep weak reference to map, too. Build a priority
+ * queue out of the entries themselves instead of creating a
+ * task per entry. Then, we could have one recurring task per
+ * map (which would clean the entire map and then reschedule
+ * itself depending upon when the next expiration comes). We
+ * also want to avoid removing an entry prematurely if the
+ * entry was set to the same value again.
+ */
+ Timer timer = new Timer() {
+ public void run() {
+ remove(key, value);
+ }
+ };
+ timer.schedule((int) expirationMillis);
+ }
+
+ @Override
+ public V get(Object k) {
+ // from CustomConcurrentHashMap
+ V result = super.get(k);
+ if (result == null && computer != null) {
+ /*
+ * This cast isn't safe, but we can rely on the fact that K is almost
+ * always passed to Map.get(), and tools like IDEs and Findbugs can
+ * catch situations where this isn't the case.
+ *
+ * The alternative is to add an overloaded method, but the chances of
+ * a user calling get() instead of the new API and the risks inherent
+ * in adding a new API outweigh this little hole.
+ */
+ @SuppressWarnings("unchecked")
+ K key = (K) k;
+ result = compute(key);
+ }
+ return result;
+ }
+
+ private V compute(K key) {
+ // from MapMaker
+ V value;
+ try {
+ value = computer.apply(key);
+ } catch (Throwable t) {
+ throw new ComputationException(t);
+ }
+
+ if (value == null) {
+ String message = computer + " returned null for key " + key + ".";
+ throw new NullPointerException(message);
+ }
+ put(key, value);
+ return value;
+ }
+
+ }
+
+ private int initialCapacity = 16;
+ private float loadFactor = 0.75f;
+ private long expirationMillis = 0;
+ private boolean useCustomMap;
+
+ public MapMaker() {
+ }
+
+ public MapMaker initialCapacity(int initialCapacity) {
+ if (initialCapacity < 0) {
+ throw new IllegalArgumentException();
+ }
+ this.initialCapacity = initialCapacity;
+ return this;
+ }
+
+ public MapMaker loadFactor(float loadFactor) {
+ if (loadFactor <= 0) {
+ throw new IllegalArgumentException();
+ }
+ this.loadFactor = loadFactor;
+ return this;
+ }
+
+ public MapMaker expiration(long duration, TimeUnit unit) {
+ if (expirationMillis != 0) {
+ throw new IllegalStateException("expiration time of "
+ + expirationMillis + " ns was already set");
+ }
+ if (duration <= 0) {
+ throw new IllegalArgumentException("invalid duration: " + duration);
+ }
+ this.expirationMillis = unit.toMillis(duration);
+ useCustomMap = true;
+ return this;
+ }
+
+ public <K, V> ConcurrentMap<K, V> makeMap() {
+ return useCustomMap
+ ? new ExpiringComputingMap<K, V>(expirationMillis)
+ : new ConcurrentHashMap<K, V>(initialCapacity, loadFactor);
+ }
+
+ public <K, V> ConcurrentMap<K, V> makeComputingMap(
+ Function<? super K, ? extends V> computer) {
+ return new ExpiringComputingMap<K, V>(expirationMillis, computer);
+ }
+
+}
diff --git a/gwt/com/google/common/super/com/google/common/collect/Platform.java b/gwt/com/google/common/super/com/google/common/collect/Platform.java
new file mode 100644
index 0000000..41e7faa
--- /dev/null
+++ b/gwt/com/google/common/super/com/google/common/collect/Platform.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.lang.Array;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Minimal GWT emulation of {@code com.google.common.collect.ObjectArrays}.
+ *
+ * <p><strong>This .java file should never be consumed by javac.</strong>
+ *
+ * @author Hayward Chan
+ */
+class Platform {
+
+ static <T> List<T> subList(List<T> from, int fromIndex, int toIndex) {
+ throw new UnsupportedOperationException(
+ "List.subList is not supported yet.");
+ }
+
+ static boolean isInstance(Class<?> clazz, Object obj) {
+ throw new UnsupportedOperationException(
+ "Class.isInstance is not supported in GWT yet.");
+ }
+
+ static <T> T[] clone(T[] array) {
+ return (T[]) Array.clone(array);
+ }
+
+ static <T> T[] newArray(Class<T> type, int length) {
+ throw new UnsupportedOperationException(
+ "Platform.newArray is not supported in GWT yet.");
+ }
+
+ static <T> T[] newArray(T[] reference, int length) {
+ return Array.createFrom(reference, length);
+ }
+}
diff --git a/gwt/com/google/common/super/com/google/common/collect/Serialization.java b/gwt/com/google/common/super/com/google/common/collect/Serialization.java
new file mode 100644
index 0000000..e62a0d4
--- /dev/null
+++ b/gwt/com/google/common/super/com/google/common/collect/Serialization.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Map;
+
+/**
+ * @author Hayward Chan
+ */
+final class Serialization {
+
+ private Serialization() {}
+
+ private static UnsupportedOperationException unsupported() {
+ return new UnsupportedOperationException(
+ "com.google.common.collect.Serialization is not supported in GWT.");
+ }
+
+ static int readCount(ObjectInputStream stream) {
+ throw unsupported();
+ }
+
+ static <K, V> void writeMap(Map<K, V> map, ObjectOutputStream stream)
+ throws IOException {
+ throw unsupported();
+ }
+
+ static <K, V> void populateMap(Map<K, V> map, ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ throw unsupported();
+ }
+
+ static <K, V> void populateMap(
+ Map<K, V> map, ObjectInputStream stream, int size)
+ throws IOException, ClassNotFoundException {
+ throw unsupported();
+ }
+
+ static <E> void writeMultiset(
+ Multiset<E> multiset, ObjectOutputStream stream) {
+ throw unsupported();
+ }
+
+ static <E> void populateMultiset(
+ Multiset<E> multiset, ObjectInputStream stream) {
+ throw unsupported();
+ }
+
+ static <E> void populateMultiset(
+ Multiset<E> multiset, ObjectInputStream stream, int distinctElements) {
+ throw unsupported();
+ }
+
+ static <K, V> void writeMultimap(
+ Multimap<K, V> multimap, ObjectOutputStream stream) {
+ throw unsupported();
+ }
+
+ static <K, V> void populateMultimap(
+ Multimap<K, V> multimap, ObjectInputStream stream) {
+ throw unsupported();
+ }
+
+ static <K, V> void populateMultimap(
+ Multimap<K, V> multimap, ObjectInputStream stream, int distinctKeys) {
+ throw unsupported();
+ }
+
+ static <T> FieldSetter<T> getFieldSetter(
+ final Class<T> clazz, String fieldName) {
+ throw unsupported();
+ }
+
+ static final class FieldSetter<T> {
+
+ void set(T instance, Object value) {
+ throw unsupported();
+ }
+
+ void set(T instance, int value) {
+ throw unsupported();
+ }
+ }
+}
diff --git a/gwt/com/google/common/super/java/io/InvalidObjectException.java b/gwt/com/google/common/super/java/io/InvalidObjectException.java
new file mode 100644
index 0000000..9bc153d
--- /dev/null
+++ b/gwt/com/google/common/super/java/io/InvalidObjectException.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package java.io;
+
+/**
+ * @author Hayward Chan
+ */
+public class InvalidObjectException extends ObjectStreamException {
+
+ public InvalidObjectException(String message) {
+ super(message);
+ }
+}
diff --git a/gwt/com/google/common/super/java/io/ObjectInputStream.java b/gwt/com/google/common/super/java/io/ObjectInputStream.java
new file mode 100644
index 0000000..ae06901
--- /dev/null
+++ b/gwt/com/google/common/super/java/io/ObjectInputStream.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package java.io;
+
+/**
+ * @author Hayward Chan
+ */
+public class ObjectInputStream {
+
+ public void defaultReadObject() {
+ throw unsupported();
+ }
+
+ public final Object readObject() {
+ throw unsupported();
+ }
+
+ public final int readInt() {
+ throw unsupported();
+ }
+
+ private static UnsupportedOperationException unsupported() {
+ return new UnsupportedOperationException("ObjectInputStream is not supported");
+ }
+}
diff --git a/gwt/com/google/common/super/java/io/ObjectOutputStream.java b/gwt/com/google/common/super/java/io/ObjectOutputStream.java
new file mode 100644
index 0000000..2d403ce
--- /dev/null
+++ b/gwt/com/google/common/super/java/io/ObjectOutputStream.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package java.io;
+
+/**
+ * @author Hayward Chan
+ */
+public class ObjectOutputStream {
+
+ public void defaultWriteObject() {
+ throw unsupported();
+ }
+
+ public void writeObject(Object obj) {
+ throw unsupported();
+ }
+
+ public void writeInt(int i) {
+ throw unsupported();
+ }
+
+ private static UnsupportedOperationException unsupported() {
+ return new UnsupportedOperationException("ObjectOutputStream is not supported in GWT.");
+ }
+}
diff --git a/gwt/com/google/common/super/java/io/ObjectStreamException.java b/gwt/com/google/common/super/java/io/ObjectStreamException.java
new file mode 100644
index 0000000..7d565ce
--- /dev/null
+++ b/gwt/com/google/common/super/java/io/ObjectStreamException.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package java.io;
+
+/**
+ * @author Hayward Chan
+ */
+public class ObjectStreamException extends IOException {
+
+ public ObjectStreamException(String message) {
+ super(message);
+ }
+}
diff --git a/gwt/com/google/common/super/java/lang/AbstractMethodError.java b/gwt/com/google/common/super/java/lang/AbstractMethodError.java
new file mode 100644
index 0000000..f645c1b
--- /dev/null
+++ b/gwt/com/google/common/super/java/lang/AbstractMethodError.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package java.lang;
+
+/**
+ * Minimal emulation of {@link java.lang.AbstractMethodError}.
+ *
+ * @author Charles Fry
+ */
+public class AbstractMethodError extends Error {
+
+ public AbstractMethodError() {
+ }
+
+ public AbstractMethodError(String s) {
+ super(s);
+ }
+
+}
diff --git a/gwt/com/google/common/super/java/lang/ClassNotFoundException.java b/gwt/com/google/common/super/java/lang/ClassNotFoundException.java
new file mode 100644
index 0000000..a7bd22e
--- /dev/null
+++ b/gwt/com/google/common/super/java/lang/ClassNotFoundException.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package java.lang;
+
+/**
+ * Minimal emulation of {@link java.lang.ClassNotFoundException}, that should
+ * only be used in method signatures. New GWT code should not reference this
+ * class at all. It is here only because to ease the GWTification of common
+ * code.
+ *
+ * @author Hayward Chan
+ */
+public class ClassNotFoundException extends Exception {
+}
diff --git a/gwt/com/google/common/super/java/lang/InterruptedException.java b/gwt/com/google/common/super/java/lang/InterruptedException.java
new file mode 100644
index 0000000..dbdc5f5
--- /dev/null
+++ b/gwt/com/google/common/super/java/lang/InterruptedException.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package java.lang;
+
+/**
+ * Minimal emulation of {@link java.lang.InterruptedException}, that should
+ * only be used in method signatures. New GWT code should not reference this
+ * class at all. It is here only to ease the GWTification of common code.
+ *
+ * @author Tom O'Neill
+ */
+public class InterruptedException extends Exception {
+}
diff --git a/gwt/com/google/common/super/java/util/Properties.java b/gwt/com/google/common/super/java/util/Properties.java
new file mode 100644
index 0000000..71102cf
--- /dev/null
+++ b/gwt/com/google/common/super/java/util/Properties.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package java.util;
+
+/**
+ * Minimal emulation of {@link java.util.Properties}.
+ *
+ * @author Hayward Chan
+ */
+public class Properties extends AbstractMap<Object, Object> {
+ /*
+ * Q: Why use a backing map instead of having the class extends from
+ * HashMap directly?
+ * A: This will make the class serializable. While it works in web mode,
+ * it doesn't work in hosted mode because this implementation conflicts
+ * with the JDK version, and cause VerifyError. It can be worked around
+ * by providing custom field serializer, but it probably isn't worth
+ * the effort.
+ */
+ private final Map<Object, Object> values = new HashMap<Object, Object>();
+
+ public Properties() {
+ }
+
+ public Enumeration<?> propertyNames() {
+ return Collections.enumeration(keySet());
+ }
+
+ public String getProperty(String name) {
+ return (String) get(name);
+ }
+
+ @Override public Object put(Object key, Object value) {
+ return values.put(key, value);
+ }
+
+ @Override public Set<Entry<Object, Object>> entrySet() {
+ return values.entrySet();
+ }
+}
diff --git a/gwt/com/google/common/super/java/util/concurrent/ConcurrentHashMap.java b/gwt/com/google/common/super/java/util/concurrent/ConcurrentHashMap.java
new file mode 100644
index 0000000..77544b5
--- /dev/null
+++ b/gwt/com/google/common/super/java/util/concurrent/ConcurrentHashMap.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package java.util.concurrent;
+
+import java.util.AbstractMap;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Minimal emulation of {@link java.util.concurrent.ConcurrentHashMap}.
+ * Note that javascript intepreter is <a
+ * href="http://code.google.com/docreader/#p=google-web-toolkit-doc-1-5&t=DevGuideJavaCompatibility">
+ * single-threaded</a>, it is essentially a {@link java.util.HashMap},
+ * implementing the new methods introduced by {@link ConcurrentMap}.
+ *
+ * @author Hayward Chan
+ */
+public class ConcurrentHashMap<K, V>
+ extends AbstractMap<K, V> implements ConcurrentMap<K, V> {
+
+ private final Map<K, V> backingMap;
+
+ public ConcurrentHashMap() {
+ this.backingMap = new HashMap<K, V>();
+ }
+
+ public ConcurrentHashMap(int initialCapacity) {
+ this.backingMap = new HashMap<K, V>(initialCapacity);
+ }
+
+ public ConcurrentHashMap(int initialCapacity, float loadFactor) {
+ this.backingMap = new HashMap<K, V>(initialCapacity, loadFactor);
+ }
+
+ public ConcurrentHashMap(Map<? extends K, ? extends V> t) {
+ this.backingMap = new HashMap<K, V>(t);
+ }
+
+ public V putIfAbsent(K key, V value) {
+ if (!containsKey(key)) {
+ return put(key, value);
+ } else {
+ return get(key);
+ }
+ }
+
+ public boolean remove(Object key, Object value) {
+ if (containsKey(key) && get(key).equals(value)) {
+ remove(key);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ public boolean replace(K key, V oldValue, V newValue) {
+ if (oldValue == null || newValue == null) {
+ throw new NullPointerException();
+ } else if (containsKey(key) && get(key).equals(oldValue)) {
+ put(key, newValue);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ public V replace(K key, V value) {
+ if (value == null) {
+ throw new NullPointerException();
+ } else if (containsKey(key)) {
+ return put(key, value);
+ } else {
+ return null;
+ }
+ }
+
+ @Override public boolean containsKey(Object key) {
+ if (key == null) {
+ throw new NullPointerException();
+ }
+ return backingMap.containsKey(key);
+ }
+
+ @Override public V get(Object key) {
+ if (key == null) {
+ throw new NullPointerException();
+ }
+ return backingMap.get(key);
+ }
+
+ @Override public V put(K key, V value) {
+ if (key == null || value == null) {
+ throw new NullPointerException();
+ }
+ return backingMap.put(key, value);
+ }
+
+ @Override public boolean containsValue(Object value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ return backingMap.containsValue(value);
+ }
+
+ @Override public V remove(Object key) {
+ if (key == null) {
+ throw new NullPointerException();
+ }
+ return backingMap.remove(key);
+ }
+
+ @Override public Set<Entry<K, V>> entrySet() {
+ return backingMap.entrySet();
+ }
+
+ public boolean contains(Object value) {
+ return containsValue(value);
+ }
+
+ public Enumeration<V> elements() {
+ return Collections.enumeration(values());
+ }
+
+ public Enumeration<K> keys() {
+ return Collections.enumeration(keySet());
+ }
+}
diff --git a/gwt/com/google/common/super/java/util/concurrent/ConcurrentMap.java b/gwt/com/google/common/super/java/util/concurrent/ConcurrentMap.java
new file mode 100644
index 0000000..61a8a04
--- /dev/null
+++ b/gwt/com/google/common/super/java/util/concurrent/ConcurrentMap.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package java.util.concurrent;
+
+import java.util.Map;
+
+/**
+ * Minimal GWT emulation of a map providing atomic operations.
+ *
+ * @author Jesse Wilson
+ */
+public interface ConcurrentMap<K, V> extends Map<K, V> {
+
+ V putIfAbsent(K key, V value);
+
+ boolean remove(Object key, Object value);
+
+ V replace(K key, V value);
+
+ boolean replace(K key, V oldValue, V newValue);
+}
diff --git a/gwt/com/google/common/super/java/util/concurrent/TimeUnit.java b/gwt/com/google/common/super/java/util/concurrent/TimeUnit.java
new file mode 100644
index 0000000..3da9d7b
--- /dev/null
+++ b/gwt/com/google/common/super/java/util/concurrent/TimeUnit.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package java.util.concurrent;
+
+/**
+ * OpenJDK TimeUnit minus the unsupported operations
+ *
+ * @author Charles Fry
+ */
+public enum TimeUnit {
+ NANOSECONDS {
+ public long toNanos(long d) { return d; }
+ public long toMicros(long d) { return d/(C1/C0); }
+ public long toMillis(long d) { return d/(C2/C0); }
+ public long toSeconds(long d) { return d/(C3/C0); }
+ public long toMinutes(long d) { return d/(C4/C0); }
+ public long toHours(long d) { return d/(C5/C0); }
+ public long toDays(long d) { return d/(C6/C0); }
+ public long convert(long d, TimeUnit u) { return u.toNanos(d); }
+ int excessNanos(long d, long m) { return (int)(d - (m*C2)); }
+ },
+ MICROSECONDS {
+ public long toNanos(long d) { return x(d, C1/C0, MAX/(C1/C0)); }
+ public long toMicros(long d) { return d; }
+ public long toMillis(long d) { return d/(C2/C1); }
+ public long toSeconds(long d) { return d/(C3/C1); }
+ public long toMinutes(long d) { return d/(C4/C1); }
+ public long toHours(long d) { return d/(C5/C1); }
+ public long toDays(long d) { return d/(C6/C1); }
+ public long convert(long d, TimeUnit u) { return u.toMicros(d); }
+ int excessNanos(long d, long m) { return (int)((d*C1) - (m*C2)); }
+ },
+ MILLISECONDS {
+ public long toNanos(long d) { return x(d, C2/C0, MAX/(C2/C0)); }
+ public long toMicros(long d) { return x(d, C2/C1, MAX/(C2/C1)); }
+ public long toMillis(long d) { return d; }
+ public long toSeconds(long d) { return d/(C3/C2); }
+ public long toMinutes(long d) { return d/(C4/C2); }
+ public long toHours(long d) { return d/(C5/C2); }
+ public long toDays(long d) { return d/(C6/C2); }
+ public long convert(long d, TimeUnit u) { return u.toMillis(d); }
+ int excessNanos(long d, long m) { return 0; }
+ },
+ SECONDS {
+ public long toNanos(long d) { return x(d, C3/C0, MAX/(C3/C0)); }
+ public long toMicros(long d) { return x(d, C3/C1, MAX/(C3/C1)); }
+ public long toMillis(long d) { return x(d, C3/C2, MAX/(C3/C2)); }
+ public long toSeconds(long d) { return d; }
+ public long toMinutes(long d) { return d/(C4/C3); }
+ public long toHours(long d) { return d/(C5/C3); }
+ public long toDays(long d) { return d/(C6/C3); }
+ public long convert(long d, TimeUnit u) { return u.toSeconds(d); }
+ int excessNanos(long d, long m) { return 0; }
+ },
+ MINUTES {
+ public long toNanos(long d) { return x(d, C4/C0, MAX/(C4/C0)); }
+ public long toMicros(long d) { return x(d, C4/C1, MAX/(C4/C1)); }
+ public long toMillis(long d) { return x(d, C4/C2, MAX/(C4/C2)); }
+ public long toSeconds(long d) { return x(d, C4/C3, MAX/(C4/C3)); }
+ public long toMinutes(long d) { return d; }
+ public long toHours(long d) { return d/(C5/C4); }
+ public long toDays(long d) { return d/(C6/C4); }
+ public long convert(long d, TimeUnit u) { return u.toMinutes(d); }
+ int excessNanos(long d, long m) { return 0; }
+ },
+ HOURS {
+ public long toNanos(long d) { return x(d, C5/C0, MAX/(C5/C0)); }
+ public long toMicros(long d) { return x(d, C5/C1, MAX/(C5/C1)); }
+ public long toMillis(long d) { return x(d, C5/C2, MAX/(C5/C2)); }
+ public long toSeconds(long d) { return x(d, C5/C3, MAX/(C5/C3)); }
+ public long toMinutes(long d) { return x(d, C5/C4, MAX/(C5/C4)); }
+ public long toHours(long d) { return d; }
+ public long toDays(long d) { return d/(C6/C5); }
+ public long convert(long d, TimeUnit u) { return u.toHours(d); }
+ int excessNanos(long d, long m) { return 0; }
+ },
+ DAYS {
+ public long toNanos(long d) { return x(d, C6/C0, MAX/(C6/C0)); }
+ public long toMicros(long d) { return x(d, C6/C1, MAX/(C6/C1)); }
+ public long toMillis(long d) { return x(d, C6/C2, MAX/(C6/C2)); }
+ public long toSeconds(long d) { return x(d, C6/C3, MAX/(C6/C3)); }
+ public long toMinutes(long d) { return x(d, C6/C4, MAX/(C6/C4)); }
+ public long toHours(long d) { return x(d, C6/C5, MAX/(C6/C5)); }
+ public long toDays(long d) { return d; }
+ public long convert(long d, TimeUnit u) { return u.toDays(d); }
+ int excessNanos(long d, long m) { return 0; }
+ };
+
+ // Handy constants for conversion methods
+ static final long C0 = 1L;
+ static final long C1 = C0 * 1000L;
+ static final long C2 = C1 * 1000L;
+ static final long C3 = C2 * 1000L;
+ static final long C4 = C3 * 60L;
+ static final long C5 = C4 * 60L;
+ static final long C6 = C5 * 24L;
+
+ static final long MAX = Long.MAX_VALUE;
+
+ /**
+ * Scale d by m, checking for overflow.
+ * This has a short name to make above code more readable.
+ */
+ static long x(long d, long m, long over) {
+ if (d > over) return Long.MAX_VALUE;
+ if (d < -over) return Long.MIN_VALUE;
+ return d * m;
+ }
+
+ public long convert(long sourceDuration, TimeUnit sourceUnit) {
+ throw new AbstractMethodError();
+ }
+
+ public long toNanos(long duration) {
+ throw new AbstractMethodError();
+ }
+
+ public long toMicros(long duration) {
+ throw new AbstractMethodError();
+ }
+
+ public long toMillis(long duration) {
+ throw new AbstractMethodError();
+ }
+
+ public long toSeconds(long duration) {
+ throw new AbstractMethodError();
+ }
+
+ public long toMinutes(long duration) {
+ throw new AbstractMethodError();
+ }
+
+ public long toHours(long duration) {
+ throw new AbstractMethodError();
+ }
+
+ public long toDays(long duration) {
+ throw new AbstractMethodError();
+ }
+
+ abstract int excessNanos(long d, long m);
+}
diff --git a/gwt/com/google/common/super/java/util/concurrent/atomic/AtomicInteger.java b/gwt/com/google/common/super/java/util/concurrent/atomic/AtomicInteger.java
new file mode 100644
index 0000000..ac98dcf
--- /dev/null
+++ b/gwt/com/google/common/super/java/util/concurrent/atomic/AtomicInteger.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package java.util.concurrent.atomic;
+
+/**
+ * GWT emulated version of {@link AtomicInteger}. It's a thin wrapper
+ * around the primitive {@code int}.
+ *
+ * @author Hayward Chan
+ */
+public class AtomicInteger extends Number implements java.io.Serializable {
+
+ private int value;
+
+ public AtomicInteger(int initialValue) {
+ value = initialValue;
+ }
+
+ public AtomicInteger() {
+ }
+
+ public final int get() {
+ return value;
+ }
+
+ public final void set(int newValue) {
+ value = newValue;
+ }
+
+ public final void lazySet(int newValue) {
+ set(newValue);
+ }
+
+ public final int getAndSet(int newValue) {
+ int current = value;
+ value = newValue;
+ return current;
+ }
+
+ public final boolean compareAndSet(int expect, int update) {
+ if (value == expect) {
+ value = update;
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ public final int getAndIncrement() {
+ return value++;
+ }
+
+ public final int getAndDecrement() {
+ return value--;
+ }
+
+ public final int getAndAdd(int delta) {
+ int current = value;
+ value += delta;
+ return current;
+ }
+
+ public final int incrementAndGet() {
+ return ++value;
+ }
+
+ public final int decrementAndGet() {
+ return --value;
+ }
+
+ public final int addAndGet(int delta) {
+ value += delta;
+ return value;
+ }
+
+ @Override public String toString() {
+ return Integer.toString(value);
+ }
+
+ public int intValue() {
+ return value;
+ }
+
+ public long longValue() {
+ return (long) value;
+ }
+
+ public float floatValue() {
+ return (float) value;
+ }
+
+ public double doubleValue() {
+ return (double) value;
+ }
+}
diff --git a/javadoc/allclasses-frame.html b/javadoc/allclasses-frame.html
new file mode 100644
index 0000000..1c8a1b8
--- /dev/null
+++ b/javadoc/allclasses-frame.html
@@ -0,0 +1,221 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:18 PST 2009 -->
+<TITLE>
+All Classes (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+
+</HEAD>
+
+<BODY BGCOLOR="white">
+<FONT size="+1" CLASS="FrameHeadingFont">
+<B>All Classes</B></FONT>
+<BR>
+
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
+<TR>
+<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect" target="classFrame">AbstractIterator</A>
+<BR>
+<A HREF="com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect" target="classFrame">ArrayListMultimap</A>
+<BR>
+<A HREF="com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect" target="classFrame">AsynchronousComputationException</A>
+<BR>
+<A HREF="com/google/common/collect/BiMap.html" title="interface in com.google.common.collect" target="classFrame"><I>BiMap</I></A>
+<BR>
+<A HREF="com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect" target="classFrame"><I>ClassToInstanceMap</I></A>
+<BR>
+<A HREF="com/google/common/collect/Collections2.html" title="class in com.google.common.collect" target="classFrame">Collections2</A>
+<BR>
+<A HREF="com/google/common/collect/ComputationException.html" title="class in com.google.common.collect" target="classFrame">ComputationException</A>
+<BR>
+<A HREF="com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect" target="classFrame">ConcurrentHashMultiset</A>
+<BR>
+<A HREF="com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect" target="classFrame">EnumBiMap</A>
+<BR>
+<A HREF="com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect" target="classFrame">EnumHashBiMap</A>
+<BR>
+<A HREF="com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect" target="classFrame">EnumMultiset</A>
+<BR>
+<A HREF="com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base" target="classFrame">FinalizablePhantomReference</A>
+<BR>
+<A HREF="com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base" target="classFrame"><I>FinalizableReference</I></A>
+<BR>
+<A HREF="com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base" target="classFrame">FinalizableReferenceQueue</A>
+<BR>
+<A HREF="com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base" target="classFrame">FinalizableSoftReference</A>
+<BR>
+<A HREF="com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base" target="classFrame">FinalizableWeakReference</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect" target="classFrame">ForwardingCollection</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect" target="classFrame">ForwardingConcurrentMap</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect" target="classFrame">ForwardingIterator</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect" target="classFrame">ForwardingList</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect" target="classFrame">ForwardingListIterator</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect" target="classFrame">ForwardingMap</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect" target="classFrame">ForwardingMapEntry</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect" target="classFrame">ForwardingMultimap</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect" target="classFrame">ForwardingMultiset</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect" target="classFrame">ForwardingObject</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect" target="classFrame">ForwardingQueue</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect" target="classFrame">ForwardingSet</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect" target="classFrame">ForwardingSortedMap</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect" target="classFrame">ForwardingSortedSet</A>
+<BR>
+<A HREF="com/google/common/base/Function.html" title="interface in com.google.common.base" target="classFrame"><I>Function</I></A>
+<BR>
+<A HREF="com/google/common/base/Functions.html" title="class in com.google.common.base" target="classFrame">Functions</A>
+<BR>
+<A HREF="com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations" target="classFrame">GwtCompatible</A>
+<BR>
+<A HREF="com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations" target="classFrame">GwtIncompatible</A>
+<BR>
+<A HREF="com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect" target="classFrame">HashBiMap</A>
+<BR>
+<A HREF="com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect" target="classFrame">HashMultimap</A>
+<BR>
+<A HREF="com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect" target="classFrame">HashMultiset</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect" target="classFrame">ImmutableBiMap</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableBiMap.Builder</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect" target="classFrame">ImmutableClassToInstanceMap</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableClassToInstanceMap.Builder</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect" target="classFrame">ImmutableCollection</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect" target="classFrame">ImmutableList</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableList.Builder</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect" target="classFrame">ImmutableListMultimap</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableListMultimap.Builder</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect" target="classFrame">ImmutableMap</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableMap.Builder</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect" target="classFrame">ImmutableMultimap</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableMultimap.Builder</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect" target="classFrame">ImmutableMultiset</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableMultiset.Builder</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect" target="classFrame">ImmutableSet</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableSet.Builder</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect" target="classFrame">ImmutableSetMultimap</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableSetMultimap.Builder</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect" target="classFrame">ImmutableSortedMap</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableSortedMap.Builder</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect" target="classFrame">ImmutableSortedSet</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableSortedSet.Builder</A>
+<BR>
+<A HREF="com/google/common/collect/Iterables.html" title="class in com.google.common.collect" target="classFrame">Iterables</A>
+<BR>
+<A HREF="com/google/common/collect/Iterators.html" title="class in com.google.common.collect" target="classFrame">Iterators</A>
+<BR>
+<A HREF="com/google/common/base/Joiner.html" title="class in com.google.common.base" target="classFrame">Joiner</A>
+<BR>
+<A HREF="com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base" target="classFrame">Joiner.MapJoiner</A>
+<BR>
+<A HREF="com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect" target="classFrame">LinkedHashMultimap</A>
+<BR>
+<A HREF="com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect" target="classFrame">LinkedHashMultiset</A>
+<BR>
+<A HREF="com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect" target="classFrame">LinkedListMultimap</A>
+<BR>
+<A HREF="com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect" target="classFrame"><I>ListMultimap</I></A>
+<BR>
+<A HREF="com/google/common/collect/Lists.html" title="class in com.google.common.collect" target="classFrame">Lists</A>
+<BR>
+<A HREF="com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect" target="classFrame"><I>MapDifference</I></A>
+<BR>
+<A HREF="com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect" target="classFrame"><I>MapDifference.ValueDifference</I></A>
+<BR>
+<A HREF="com/google/common/collect/MapMaker.html" title="class in com.google.common.collect" target="classFrame">MapMaker</A>
+<BR>
+<A HREF="com/google/common/collect/Maps.html" title="class in com.google.common.collect" target="classFrame">Maps</A>
+<BR>
+<A HREF="com/google/common/collect/Multimap.html" title="interface in com.google.common.collect" target="classFrame"><I>Multimap</I></A>
+<BR>
+<A HREF="com/google/common/collect/Multimaps.html" title="class in com.google.common.collect" target="classFrame">Multimaps</A>
+<BR>
+<A HREF="com/google/common/collect/Multiset.html" title="interface in com.google.common.collect" target="classFrame"><I>Multiset</I></A>
+<BR>
+<A HREF="com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect" target="classFrame"><I>Multiset.Entry</I></A>
+<BR>
+<A HREF="com/google/common/collect/Multisets.html" title="class in com.google.common.collect" target="classFrame">Multisets</A>
+<BR>
+<A HREF="com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect" target="classFrame">MutableClassToInstanceMap</A>
+<BR>
+<A HREF="com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect" target="classFrame">ObjectArrays</A>
+<BR>
+<A HREF="com/google/common/base/Objects.html" title="class in com.google.common.base" target="classFrame">Objects</A>
+<BR>
+<A HREF="com/google/common/collect/Ordering.html" title="class in com.google.common.collect" target="classFrame">Ordering</A>
+<BR>
+<A HREF="com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect" target="classFrame"><I>PeekingIterator</I></A>
+<BR>
+<A HREF="com/google/common/base/Preconditions.html" title="class in com.google.common.base" target="classFrame">Preconditions</A>
+<BR>
+<A HREF="com/google/common/base/Predicate.html" title="interface in com.google.common.base" target="classFrame"><I>Predicate</I></A>
+<BR>
+<A HREF="com/google/common/base/Predicates.html" title="class in com.google.common.base" target="classFrame">Predicates</A>
+<BR>
+<A HREF="com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect" target="classFrame"><I>SetMultimap</I></A>
+<BR>
+<A HREF="com/google/common/collect/Sets.html" title="class in com.google.common.collect" target="classFrame">Sets</A>
+<BR>
+<A HREF="com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect" target="classFrame">Sets.SetView</A>
+<BR>
+<A HREF="com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect" target="classFrame"><I>SortedSetMultimap</I></A>
+<BR>
+<A HREF="com/google/common/base/Supplier.html" title="interface in com.google.common.base" target="classFrame"><I>Supplier</I></A>
+<BR>
+<A HREF="com/google/common/base/Suppliers.html" title="class in com.google.common.base" target="classFrame">Suppliers</A>
+<BR>
+<A HREF="com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect" target="classFrame">TreeMultimap</A>
+<BR>
+<A HREF="com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect" target="classFrame">TreeMultiset</A>
+<BR>
+<A HREF="com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect" target="classFrame">UnmodifiableIterator</A>
+<BR>
+<A HREF="com/google/common/annotations/VisibleForTesting.html" title="annotation in com.google.common.annotations" target="classFrame">VisibleForTesting</A>
+<BR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+</BODY>
+</HTML>
diff --git a/javadoc/allclasses-noframe.html b/javadoc/allclasses-noframe.html
new file mode 100644
index 0000000..b939039
--- /dev/null
+++ b/javadoc/allclasses-noframe.html
@@ -0,0 +1,221 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:18 PST 2009 -->
+<TITLE>
+All Classes (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+
+</HEAD>
+
+<BODY BGCOLOR="white">
+<FONT size="+1" CLASS="FrameHeadingFont">
+<B>All Classes</B></FONT>
+<BR>
+
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
+<TR>
+<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect">AbstractIterator</A>
+<BR>
+<A HREF="com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>
+<BR>
+<A HREF="com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect">AsynchronousComputationException</A>
+<BR>
+<A HREF="com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><I>BiMap</I></A>
+<BR>
+<A HREF="com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect"><I>ClassToInstanceMap</I></A>
+<BR>
+<A HREF="com/google/common/collect/Collections2.html" title="class in com.google.common.collect">Collections2</A>
+<BR>
+<A HREF="com/google/common/collect/ComputationException.html" title="class in com.google.common.collect">ComputationException</A>
+<BR>
+<A HREF="com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>
+<BR>
+<A HREF="com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A>
+<BR>
+<A HREF="com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>
+<BR>
+<A HREF="com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset</A>
+<BR>
+<A HREF="com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base">FinalizablePhantomReference</A>
+<BR>
+<A HREF="com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base"><I>FinalizableReference</I></A>
+<BR>
+<A HREF="com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A>
+<BR>
+<A HREF="com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base">FinalizableSoftReference</A>
+<BR>
+<A HREF="com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base">FinalizableWeakReference</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect">ForwardingConcurrentMap</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect">ForwardingMapEntry</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect">ForwardingQueue</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap</A>
+<BR>
+<A HREF="com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet</A>
+<BR>
+<A HREF="com/google/common/base/Function.html" title="interface in com.google.common.base"><I>Function</I></A>
+<BR>
+<A HREF="com/google/common/base/Functions.html" title="class in com.google.common.base">Functions</A>
+<BR>
+<A HREF="com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">GwtCompatible</A>
+<BR>
+<A HREF="com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations">GwtIncompatible</A>
+<BR>
+<A HREF="com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>
+<BR>
+<A HREF="com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>
+<BR>
+<A HREF="com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
+<BR>
+<A HREF="com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>
+<BR>
+<A HREF="com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<BR>
+<A HREF="com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<BR>
+<A HREF="com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
+<BR>
+<A HREF="com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A>
+<BR>
+<A HREF="com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>
+<BR>
+<A HREF="com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>
+<BR>
+<A HREF="com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
+<BR>
+<A HREF="com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><I>ListMultimap</I></A>
+<BR>
+<A HREF="com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A>
+<BR>
+<A HREF="com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect"><I>MapDifference</I></A>
+<BR>
+<A HREF="com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect"><I>MapDifference.ValueDifference</I></A>
+<BR>
+<A HREF="com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A>
+<BR>
+<A HREF="com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
+<BR>
+<A HREF="com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><I>Multimap</I></A>
+<BR>
+<A HREF="com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
+<BR>
+<A HREF="com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><I>Multiset</I></A>
+<BR>
+<A HREF="com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect"><I>Multiset.Entry</I></A>
+<BR>
+<A HREF="com/google/common/collect/Multisets.html" title="class in com.google.common.collect">Multisets</A>
+<BR>
+<A HREF="com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A>
+<BR>
+<A HREF="com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect">ObjectArrays</A>
+<BR>
+<A HREF="com/google/common/base/Objects.html" title="class in com.google.common.base">Objects</A>
+<BR>
+<A HREF="com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
+<BR>
+<A HREF="com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect"><I>PeekingIterator</I></A>
+<BR>
+<A HREF="com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
+<BR>
+<A HREF="com/google/common/base/Predicate.html" title="interface in com.google.common.base"><I>Predicate</I></A>
+<BR>
+<A HREF="com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
+<BR>
+<A HREF="com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><I>SetMultimap</I></A>
+<BR>
+<A HREF="com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
+<BR>
+<A HREF="com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A>
+<BR>
+<A HREF="com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect"><I>SortedSetMultimap</I></A>
+<BR>
+<A HREF="com/google/common/base/Supplier.html" title="interface in com.google.common.base"><I>Supplier</I></A>
+<BR>
+<A HREF="com/google/common/base/Suppliers.html" title="class in com.google.common.base">Suppliers</A>
+<BR>
+<A HREF="com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>
+<BR>
+<A HREF="com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>
+<BR>
+<A HREF="com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>
+<BR>
+<A HREF="com/google/common/annotations/VisibleForTesting.html" title="annotation in com.google.common.annotations">VisibleForTesting</A>
+<BR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/annotations/GwtCompatible.html b/javadoc/com/google/common/annotations/GwtCompatible.html
new file mode 100644
index 0000000..d4c7134
--- /dev/null
+++ b/javadoc/com/google/common/annotations/GwtCompatible.html
@@ -0,0 +1,274 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:14 PST 2009 -->
+<TITLE>
+GwtCompatible (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="GwtCompatible (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/GwtCompatible.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/annotations/GwtCompatible.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="GwtCompatible.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;REQUIRED&nbsp;|&nbsp;<A HREF="#annotation_type_optional_element_summary">OPTIONAL</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#annotation_type_element_detail">ELEMENT</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.annotations</FONT>
+<BR>
+Annotation Type GwtCompatible</H2>
+<HR>
+<DL>
+<DT><PRE><FONT SIZE="-1"><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</A>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Retention.html?is-external=true#value()" title="class or interface in java.lang.annotation">value</A>=<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in java.lang.annotation">CLASS</A>)
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</A>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Target.html?is-external=true#value()" title="class or interface in java.lang.annotation">value</A>={<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/ElementType.html?is-external=true#TYPE" title="class or interface in java.lang.annotation">TYPE</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annotation">METHOD</A>})
+</FONT>public @interface <B>GwtCompatible</B></DL>
+</PRE>
+
+<P>
+The presence of this annotation on a type indicates that the type may be
+ used with the
+ <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT).
+ When applied to a method, the return type of the method is GWT compatible.
+ It's useful to indicate that an instance created by factory methods has a GWT
+ serializable type. In the following example,
+
+ <pre style="code">
+ @GwtCompatible
+ class Lists {
+ ...
+ @GwtCompatible(serializable = true)
+ static &lt;E> List&lt;E> newArrayList(E... elements) {
+ ...
+ }
+ }
+ </pre>
+ The return value of <code>Lists.newArrayList(E[])</code> has GWT
+ serializable type. It is also useful in specifying contracts of interface
+ methods. In the following example,
+
+ <pre style="code">
+ @GwtCompatible
+ interface ListFactory {
+ ...
+ @GwtCompatible(serializable = true)
+ &lt;E> List&lt;E> newArrayList(E... elements);
+ }
+ </pre>
+ The <code>newArrayList(E[])</code> method of all implementations of <code>ListFactory</code> is expected to return a value with a GWT serializable type.
+
+ <p>Note that a <code>GwtCompatible</code> type may have some <A HREF="../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations"><CODE>GwtIncompatible</CODE></A> methods.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Charles Fry, Hayward Chan</DD>
+</DL>
+<HR>
+
+<P>
+<!-- =========== ANNOTATION TYPE OPTIONAL MEMBER SUMMARY =========== -->
+
+<A NAME="annotation_type_optional_element_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Optional Element Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/annotations/GwtCompatible.html#emulated()">emulated</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When <code>true</code>, the annotated type is emulated in GWT.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/annotations/GwtCompatible.html#serializable()">serializable</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When <code>true</code>, the annotated type or the type of the method return
+ value is GWT serializable.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="serializable()"><!-- --></A><H3>
+serializable</H3>
+<PRE>
+public abstract boolean <B>serializable</B></PRE>
+<DL>
+<DD>When <code>true</code>, the annotated type or the type of the method return
+ value is GWT serializable.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>See Also:</B><DD><a href="http://code.google.com/docreader/#p=google-web-toolkit-doc-1-5&t=DevGuideSerializableTypes">
+ Documentation about GWT serialization</a></DL>
+<DL>
+<DT><B>Default:</B><DD>false</DD>
+</DL>
+</DL>
+<HR>
+
+<A NAME="emulated()"><!-- --></A><H3>
+emulated</H3>
+<PRE>
+public abstract boolean <B>emulated</B></PRE>
+<DL>
+<DD>When <code>true</code>, the annotated type is emulated in GWT. The emulated
+ source (also known as super-source) is different from the implementation
+ used by the JVM.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>See Also:</B><DD><a href="http://code.google.com/docreader/#p=google-web-toolkit-doc-1-5&t=DevGuideModuleXml">
+ Documentation about GWT emulated source</a></DL>
+<DL>
+<DT><B>Default:</B><DD>false</DD>
+</DL>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/GwtCompatible.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/annotations/GwtCompatible.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="GwtCompatible.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;REQUIRED&nbsp;|&nbsp;<A HREF="#annotation_type_optional_element_summary">OPTIONAL</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#annotation_type_element_detail">ELEMENT</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/annotations/GwtIncompatible.html b/javadoc/com/google/common/annotations/GwtIncompatible.html
new file mode 100644
index 0000000..3af0f4d
--- /dev/null
+++ b/javadoc/com/google/common/annotations/GwtIncompatible.html
@@ -0,0 +1,230 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:14 PST 2009 -->
+<TITLE>
+GwtIncompatible (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="GwtIncompatible (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/GwtIncompatible.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/annotations/VisibleForTesting.html" title="annotation in com.google.common.annotations"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/annotations/GwtIncompatible.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="GwtIncompatible.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#annotation_type_required_element_summary">REQUIRED</A>&nbsp;|&nbsp;OPTIONAL</FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#annotation_type_element_detail">ELEMENT</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.annotations</FONT>
+<BR>
+Annotation Type GwtIncompatible</H2>
+<HR>
+<DL>
+<DT><PRE><FONT SIZE="-1"><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</A>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Retention.html?is-external=true#value()" title="class or interface in java.lang.annotation">value</A>=<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in java.lang.annotation">CLASS</A>)
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</A>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Target.html?is-external=true#value()" title="class or interface in java.lang.annotation">value</A>=<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annotation">METHOD</A>)
+</FONT>public @interface <B>GwtIncompatible</B></DL>
+</PRE>
+
+<P>
+The presence of this annotation on a method indicates that the method may
+ <em>not</em> be used with the
+ <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT),
+ even though its type is annotated as <A HREF="../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><CODE>GwtCompatible</CODE></A> and accessible in
+ GWT. They can cause GWT compilation errors or simply unexpected exceptions
+ when used in GWT.
+
+ <p>Note that this annotation should only be applied to methods of types which
+ are annotated as <A HREF="../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><CODE>GwtCompatible</CODE></A>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Charles Fry</DD>
+</DL>
+<HR>
+
+<P>
+<!-- =========== ANNOTATION TYPE REQUIRED MEMBER SUMMARY =========== -->
+
+<A NAME="annotation_type_required_element_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Required Element Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/annotations/GwtIncompatible.html#value()">value</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Describes why the annotated element is incompatible with GWT.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
+
+<A NAME="annotation_type_element_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Element Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="value()"><!-- --></A><H3>
+value</H3>
+<PRE>
+public abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>value</B></PRE>
+<DL>
+<DD>Describes why the annotated element is incompatible with GWT. Since this is
+ generally due to a dependence on a type/method which GWT doesn't support,
+ it is sufficient to simply reference the unsupported type/method. E.g.
+ "Class.isInstance".
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/GwtIncompatible.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/annotations/VisibleForTesting.html" title="annotation in com.google.common.annotations"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/annotations/GwtIncompatible.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="GwtIncompatible.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#annotation_type_required_element_summary">REQUIRED</A>&nbsp;|&nbsp;OPTIONAL</FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#annotation_type_element_detail">ELEMENT</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/annotations/VisibleForTesting.html b/javadoc/com/google/common/annotations/VisibleForTesting.html
new file mode 100644
index 0000000..53266f6
--- /dev/null
+++ b/javadoc/com/google/common/annotations/VisibleForTesting.html
@@ -0,0 +1,176 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:14 PST 2009 -->
+<TITLE>
+VisibleForTesting (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="VisibleForTesting (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/VisibleForTesting.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/annotations/VisibleForTesting.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="VisibleForTesting.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;REQUIRED&nbsp;|&nbsp;OPTIONAL</FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;ELEMENT</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.annotations</FONT>
+<BR>
+Annotation Type VisibleForTesting</H2>
+<HR>
+<DL>
+<DT><PRE>public @interface <B>VisibleForTesting</B></DL>
+</PRE>
+
+<P>
+An annotation that indicates that the visibility of a type or member has
+ been relaxed to make the code testable.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Johannes Henkel</DD>
+</DL>
+
+<P>
+
+<P>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/VisibleForTesting.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/annotations/VisibleForTesting.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="VisibleForTesting.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;REQUIRED&nbsp;|&nbsp;OPTIONAL</FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;ELEMENT</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/annotations/class-use/GwtCompatible.html b/javadoc/com/google/common/annotations/class-use/GwtCompatible.html
new file mode 100644
index 0000000..407cea1
--- /dev/null
+++ b/javadoc/com/google/common/annotations/class-use/GwtCompatible.html
@@ -0,0 +1,1201 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.annotations.GwtCompatible (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.annotations.GwtCompatible (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/annotations//class-useGwtCompatible.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="GwtCompatible.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.annotations.GwtCompatible</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">GwtCompatible</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.annotations"><B>com.google.common.annotations</B></A></TD>
+<TD>&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
+<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.annotations"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">GwtCompatible</A> in <A HREF="../../../../../com/google/common/annotations/package-summary.html">com.google.common.annotations</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../com/google/common/annotations/package-summary.html">com.google.common.annotations</A> with annotations of type <A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">GwtCompatible</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;interface</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">GwtCompatible</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The presence of this annotation on a type indicates that the type may be
+ used with the
+ <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;interface</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations">GwtIncompatible</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The presence of this annotation on a method indicates that the method may
+ <em>not</em> be used with the
+ <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT),
+ even though its type is annotated as <A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><CODE>GwtCompatible</CODE></A> and accessible in
+ GWT.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;interface</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/annotations/VisibleForTesting.html" title="annotation in com.google.common.annotations">VisibleForTesting</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An annotation that indicates that the visibility of a type or member has
+ been relaxed to make the code testable.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.base"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">GwtCompatible</A> in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> with annotations of type <A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">GwtCompatible</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;interface</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function&lt;F,T&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A transformation from one object to another.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/base/Functions.html" title="class in com.google.common.base">Functions</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Useful functions.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An object which joins pieces of text (specified as an array, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang"><CODE>Iterable</CODE></A>, varargs or even a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A>) with a separator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/base/Objects.html" title="class in com.google.common.base">Objects</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Helper functions that can operate on any <code>Object</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Simple static methods to be called at the start of your own methods to verify
+ correct arguments and state.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;interface</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate&lt;T&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines a true or false value for a given input.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Contains static factory methods for creating <code>Predicate</code> instances.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;interface</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier&lt;T&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A class that can supply objects of a single type.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> with annotations of type <A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">GwtCompatible</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#alwaysFalse()">alwaysFalse</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that always evaluates to <code>false</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#alwaysTrue()">alwaysTrue</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that always evaluates to <code>true</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">GwtCompatible</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with annotations of type <A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">GwtCompatible</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect">AbstractIterator&lt;T&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This class provides a skeletal implementation of the <code>Iterator</code>
+ interface, to make this interface easier to implement for certain types of
+ data sources.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <code>Multimap</code> that uses an <code>ArrayList</code> to store
+ the values for a given key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;interface</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A bimap (or "bidirectional map") is a map that preserves the uniqueness of
+ its values as well as that of its keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;interface</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap&lt;B&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A map, each entry of which maps a Java
+ <a href="http://tinyurl.com/2cmwkz">raw type</a> to an instance of that type.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/Collections2.html" title="class in com.google.common.collect">Collections2</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Provides static methods for working with <code>Collection</code> instances.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect">ComputationException</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wraps an exception that occured during a computation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset&lt;E extends Enum&lt;E&gt;&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Multiset implementation backed by an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumMap.html?is-external=true" title="class or interface in java.util"><CODE>EnumMap</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A collection which forwards all its method calls to another collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect">ForwardingConcurrentMap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concurrent map which forwards all its method calls to another concurrent
+ map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator&lt;T&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An iterator which forwards all its method calls to another iterator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A list which forwards all its method calls to another list.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A list iterator which forwards all its method calls to another list
+ iterator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A map which forwards all its method calls to another map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect">ForwardingMapEntry&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A map entry which forwards all its method calls to another map entry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A multimap which forwards all its method calls to another multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A multiset which forwards all its method calls to another multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An abstract base class for implementing the <a
+ href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect">ForwardingQueue&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A queue which forwards all its method calls to another queue.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A set which forwards all its method calls to another set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A sorted map which forwards all its method calls to another sorted map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A sorted set which forwards all its method calls to another sorted set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> backed by two <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> instances.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> using hash tables.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Multiset implementation backed by a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> with reliable user-specified iteration order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A high-performance, immutable, random-access <code>List</code> implementation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A> with reliable user-specified key and value
+ iteration order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable, hash-based <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> with reliable user-specified iteration
+ order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable hash-based multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A high-performance, immutable <code>Set</code> with reliable, user-specified
+ iteration order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A> with reliable user-specified key and value
+ iteration order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util"><CODE>SortedMap</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <code>SortedSet</code> that stores its elements in a sorted array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This class contains static utility methods that operate on or return objects
+ of type <code>Iterable</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This class contains static utility methods that operate on or return objects
+ of type <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util"><CODE>Iterator</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <code>Multimap</code> that does not allow duplicate key-value
+ entries and that returns collections whose iterators follow the ordering in
+ which the data was added to the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>Multiset</code> implementation with predictable iteration order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An implementation of <code>ListMultimap</code> that supports deterministic
+ iteration order for both keys and values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;interface</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>Multimap</code> that can hold duplicate key-value pairs and that maintains
+ the insertion ordering of values for a given key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Static utility methods pertaining to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A> instances.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;interface</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An object representing the differences between two maps.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ConcurrentMap</CODE></A> builder, providing any combination of these
+ features: <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref">soft</A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref">weak</A> keys, soft or weak values, timed expiration, and on-demand
+ computation of values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Static utility methods pertaining to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> instances.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;interface</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A collection similar to a <code>Map</code>, but which may associate multiple
+ values with a single key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Provides static methods acting on or generating a <code>Multimap</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;interface</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A collection that supports order-independent equality, like <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>, but
+ may have duplicate elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/Multisets.html" title="class in com.google.common.collect">Multisets</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Provides static utility methods for creating and working with <A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><CODE>Multiset</CODE></A> instances.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect">ObjectArrays</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Static utility methods pertaining to object arrays.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering&lt;T&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A comparator with added methods to support common functions.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;interface</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect">PeekingIterator&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An iterator that supports a one-element lookahead while iterating.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;interface</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>Multimap</code> that cannot hold duplicate key-value pairs.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Static utility methods pertaining to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> instances.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;interface</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>SetMultimap</code> whose set of values for a given key are kept sorted;
+ that is, they comprise a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <code>Multimap</code> whose keys and values are ordered by
+ their natural ordering or by supplied comparators.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A multiset which maintains the ordering of its elements, according to either
+ their natural order or an explicit <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util"><CODE>Comparator</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An iterator that does not support <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html#remove()"><CODE>UnmodifiableIterator.remove()</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with annotations of type <A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">GwtCompatible</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;U extends <A HREF="../../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;U&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#compound(java.util.Comparator)">compound</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super U&gt;&nbsp;secondaryComparator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering which first uses the ordering <code>this</code>, but which
+ in the event of a "tie", then delegates to <code>secondaryComparator</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#compound(java.lang.Iterable)">compound</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super T&gt;&gt;&nbsp;comparators)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering which tries each given comparator in order until a
+ non-zero result is found, returning that result, and returning zero only if
+ all comparators return zero.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#explicit(java.util.List)">explicit</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&nbsp;valuesInOrder)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that compares objects according to the order in
+ which they appear in the given list.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#explicit(T, T...)">explicit</A></B>(T&nbsp;leastValue,
+ T...&nbsp;remainingValuesInOrder)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that compares objects according to the order in
+ which they are given to this method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#from(java.util.Comparator)">from</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;T&gt;&nbsp;comparator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering for a pre-existing <code>comparator</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#from(com.google.common.collect.Ordering)">from</A></B>(<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;&nbsp;ordering)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>no need to use this</I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Sets.</B><B><A HREF="../../../../../com/google/common/collect/Sets.html#immutableEnumSet(E, E...)">immutableEnumSet</A></B>(E&nbsp;anElement,
+ E...&nbsp;otherElements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set instance containing the given enum elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Sets.</B><B><A HREF="../../../../../com/google/common/collect/Sets.html#immutableEnumSet(java.lang.Iterable)">immutableEnumSet</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set instance containing the given enum elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;C extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;C&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#natural()">natural</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a serializable ordering that uses the natural order of the values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Lists.</B><B><A HREF="../../../../../com/google/common/collect/Lists.html#newArrayList()">newArrayList</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i>, empty <code>ArrayList</code> instance.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Lists.</B><B><A HREF="../../../../../com/google/common/collect/Lists.html#newArrayList(E...)">newArrayList</A></B>(E...&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i> <code>ArrayList</code> instance containing the given
+ elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Lists.</B><B><A HREF="../../../../../com/google/common/collect/Lists.html#newArrayList(java.lang.Iterable)">newArrayList</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i> <code>ArrayList</code> instance containing the given
+ elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Lists.</B><B><A HREF="../../../../../com/google/common/collect/Lists.html#newArrayList(java.util.Iterator)">newArrayList</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i> <code>ArrayList</code> instance containing the given
+ elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Lists.</B><B><A HREF="../../../../../com/google/common/collect/Lists.html#newArrayListWithCapacity(int)">newArrayListWithCapacity</A></B>(int&nbsp;initialArraySize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an <code>ArrayList</code> instance backed by an array of the
+ <i>exact</i> size specified; equivalent to
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true#ArrayList(int)" title="class or interface in java.util"><CODE>ArrayList.ArrayList(int)</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Lists.</B><B><A HREF="../../../../../com/google/common/collect/Lists.html#newArrayListWithExpectedSize(int)">newArrayListWithExpectedSize</A></B>(int&nbsp;estimatedSize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an <code>ArrayList</code> instance sized appropriately to hold an
+ <i>estimated</i> number of elements without resizing.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedList.html?is-external=true" title="class or interface in java.util">LinkedList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Lists.</B><B><A HREF="../../../../../com/google/common/collect/Lists.html#newLinkedList()">newLinkedList</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an empty <code>LinkedList</code> instance.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedList.html?is-external=true" title="class or interface in java.util">LinkedList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Lists.</B><B><A HREF="../../../../../com/google/common/collect/Lists.html#newLinkedList(java.lang.Iterable)">newLinkedList</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <code>LinkedList</code> instance containing the given elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;S extends <A HREF="../../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;S&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#nullsFirst()">nullsFirst</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that treats <code>null</code> as less than all other values
+ and uses <code>this</code> to compare non-null values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;S extends <A HREF="../../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;S&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#nullsLast()">nullsLast</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that treats <code>null</code> as greater than all other
+ values and uses this ordering to compare non-null values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;F&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;F&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#onResultOf(com.google.common.base.Function)">onResultOf</A></B>(<A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;F,? extends <A HREF="../../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;&nbsp;function)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new ordering on <code>F</code> which orders elements by first applying
+ a function to them, then comparing those results using <code>this</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;S extends <A HREF="../../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;S&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#reverse()">reverse</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the reverse of this ordering; the <code>Ordering</code> equivalent to
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#reverseOrder(java.util.Comparator)" title="class or interface in java.util"><CODE>Collections.reverseOrder(Comparator)</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#usingToString()">usingToString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that compares objects by the natural ordering of their
+ string representations as returned by <code>toString()</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/annotations//class-useGwtCompatible.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="GwtCompatible.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/annotations/class-use/GwtIncompatible.html b/javadoc/com/google/common/annotations/class-use/GwtIncompatible.html
new file mode 100644
index 0000000..e5b40a7
--- /dev/null
+++ b/javadoc/com/google/common/annotations/class-use/GwtIncompatible.html
@@ -0,0 +1,357 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.annotations.GwtIncompatible (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.annotations.GwtIncompatible (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/annotations//class-useGwtIncompatible.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="GwtIncompatible.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.annotations.GwtIncompatible</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations">GwtIncompatible</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
+<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.base"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations">GwtIncompatible</A> in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> with annotations of type <A HREF="../../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations">GwtIncompatible</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#instanceOf(java.lang.Class)">instanceOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;?&gt;&nbsp;clazz)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the object being
+ tested is an instance of the given class.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations">GwtIncompatible</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with annotations of type <A HREF="../../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations">GwtIncompatible</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ObjectArrays.</B><B><A HREF="../../../../../com/google/common/collect/ObjectArrays.html#concat(T[], T[], java.lang.Class)">concat</A></B>(T[]&nbsp;first,
+ T[]&nbsp;second,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new array that contains the concatenated contents of two arrays.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
+<TD><CODE><B>MapMaker.</B><B><A HREF="../../../../../com/google/common/collect/MapMaker.html#concurrencyLevel(int)">concurrencyLevel</A></B>(int&nbsp;concurrencyLevel)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guides the allowed concurrency among update operations.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Iterables.</B><B><A HREF="../../../../../com/google/common/collect/Iterables.html#filter(java.lang.Iterable, java.lang.Class)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;unfiltered,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns all instances of class <code>type</code> in <code>unfiltered</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#filter(java.util.Iterator, java.lang.Class)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;unfiltered,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns all instances of class <code>type</code> in <code>unfiltered</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ObjectArrays.</B><B><A HREF="../../../../../com/google/common/collect/ObjectArrays.html#newArray(java.lang.Class, int)">newArray</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type,
+ int&nbsp;length)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new array of the given length with the specified component type.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
+<TD><CODE><B>MapMaker.</B><B><A HREF="../../../../../com/google/common/collect/MapMaker.html#softKeys()">softKeys</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each key (not value) stored in the map should be
+ wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>SoftReference</CODE></A> (by default, strong references
+ are used).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
+<TD><CODE><B>MapMaker.</B><B><A HREF="../../../../../com/google/common/collect/MapMaker.html#softValues()">softValues</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each value (not key) stored in the map should be
+ wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>SoftReference</CODE></A> (by default, strong references
+ are used).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ForwardingList.</B><B><A HREF="../../../../../com/google/common/collect/ForwardingList.html#subList(int, int)">subList</A></B>(int&nbsp;fromIndex,
+ int&nbsp;toIndex)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Iterables.</B><B><A HREF="../../../../../com/google/common/collect/Iterables.html#toArray(java.lang.Iterable, java.lang.Class)">toArray</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;iterable,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies an iterable's elements into an array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#toArray(java.util.Iterator, java.lang.Class)">toArray</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;iterator,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies an iterator's elements into an array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
+<TD><CODE><B>MapMaker.</B><B><A HREF="../../../../../com/google/common/collect/MapMaker.html#weakKeys()">weakKeys</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each key (not value) stored in the map should be
+ wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>WeakReference</CODE></A> (by default, strong references
+ are used).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
+<TD><CODE><B>MapMaker.</B><B><A HREF="../../../../../com/google/common/collect/MapMaker.html#weakValues()">weakValues</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each value (not key) stored in the map should be
+ wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>WeakReference</CODE></A> (by default, strong references
+ are used).</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/annotations//class-useGwtIncompatible.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="GwtIncompatible.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/annotations/class-use/VisibleForTesting.html b/javadoc/com/google/common/annotations/class-use/VisibleForTesting.html
new file mode 100644
index 0000000..877924b
--- /dev/null
+++ b/javadoc/com/google/common/annotations/class-use/VisibleForTesting.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.annotations.VisibleForTesting (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.annotations.VisibleForTesting (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/annotations/VisibleForTesting.html" title="annotation in com.google.common.annotations"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/annotations//class-useVisibleForTesting.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="VisibleForTesting.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.annotations.VisibleForTesting</B></H2>
+</CENTER>
+No usage of com.google.common.annotations.VisibleForTesting
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/annotations/VisibleForTesting.html" title="annotation in com.google.common.annotations"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/annotations//class-useVisibleForTesting.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="VisibleForTesting.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/annotations/package-frame.html b/javadoc/com/google/common/annotations/package-frame.html
new file mode 100644
index 0000000..76e9143
--- /dev/null
+++ b/javadoc/com/google/common/annotations/package-frame.html
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+com.google.common.annotations (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+
+</HEAD>
+
+<BODY BGCOLOR="white">
+<FONT size="+1" CLASS="FrameTitleFont">
+<A HREF="../../../../com/google/common/annotations/package-summary.html" target="classFrame">com.google.common.annotations</A></FONT>
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Annotation Types</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="GwtCompatible.html" title="annotation in com.google.common.annotations" target="classFrame">GwtCompatible</A>
+<BR>
+<A HREF="GwtIncompatible.html" title="annotation in com.google.common.annotations" target="classFrame">GwtIncompatible</A>
+<BR>
+<A HREF="VisibleForTesting.html" title="annotation in com.google.common.annotations" target="classFrame">VisibleForTesting</A></FONT></TD>
+</TR>
+</TABLE>
+
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/annotations/package-summary.html b/javadoc/com/google/common/annotations/package-summary.html
new file mode 100644
index 0000000..25f87e0
--- /dev/null
+++ b/javadoc/com/google/common/annotations/package-summary.html
@@ -0,0 +1,172 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+com.google.common.annotations (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="com.google.common.annotations (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV PACKAGE&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/annotations/package-summary.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<H2>
+Package com.google.common.annotations
+</H2>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Annotation Types Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">GwtCompatible</A></B></TD>
+<TD>The presence of this annotation on a type indicates that the type may be
+ used with the
+ <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations">GwtIncompatible</A></B></TD>
+<TD>The presence of this annotation on a method indicates that the method may
+ <em>not</em> be used with the
+ <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT),
+ even though its type is annotated as <A HREF="../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><CODE>GwtCompatible</CODE></A> and accessible in
+ GWT.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/annotations/VisibleForTesting.html" title="annotation in com.google.common.annotations">VisibleForTesting</A></B></TD>
+<TD>An annotation that indicates that the visibility of a type or member has
+ been relaxed to make the code testable.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+<DL>
+</DL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV PACKAGE&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/annotations/package-summary.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/annotations/package-tree.html b/javadoc/com/google/common/annotations/package-tree.html
new file mode 100644
index 0000000..5e05a99
--- /dev/null
+++ b/javadoc/com/google/common/annotations/package-tree.html
@@ -0,0 +1,154 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+com.google.common.annotations Class Hierarchy (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="com.google.common.annotations Class Hierarchy (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/package-tree.html"><B>NEXT</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/annotations/package-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+Hierarchy For Package com.google.common.annotations
+</H2>
+</CENTER>
+<DL>
+<DT><B>Package Hierarchies:</B><DD><A HREF="../../../../overview-tree.html">All Packages</A></DL>
+<HR>
+<H2>
+Annotation Type Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">com.google.common.annotations.<A HREF="../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations"><B>GwtIncompatible</B></A> (implements java.lang.annotation.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</A>)
+<LI TYPE="circle">com.google.common.annotations.<A HREF="../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><B>GwtCompatible</B></A> (implements java.lang.annotation.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</A>)
+<LI TYPE="circle">com.google.common.annotations.<A HREF="../../../../com/google/common/annotations/VisibleForTesting.html" title="annotation in com.google.common.annotations"><B>VisibleForTesting</B></A> (implements java.lang.annotation.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</A>)
+</UL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/package-tree.html"><B>NEXT</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/annotations/package-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/annotations/package-use.html b/javadoc/com/google/common/annotations/package-use.html
new file mode 100644
index 0000000..5e7cccc
--- /dev/null
+++ b/javadoc/com/google/common/annotations/package-use.html
@@ -0,0 +1,235 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Package com.google.common.annotations (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Package com.google.common.annotations (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/annotations/package-use.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Package<br>com.google.common.annotations</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/google/common/annotations/package-summary.html">com.google.common.annotations</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.annotations"><B>com.google.common.annotations</B></A></TD>
+<TD>&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
+<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.annotations"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Classes in <A HREF="../../../../com/google/common/annotations/package-summary.html">com.google.common.annotations</A> used by <A HREF="../../../../com/google/common/annotations/package-summary.html">com.google.common.annotations</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/annotations/class-use/GwtCompatible.html#com.google.common.annotations"><B>GwtCompatible</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The presence of this annotation on a type indicates that the type may be
+ used with the
+ <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT).</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.base"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Classes in <A HREF="../../../../com/google/common/annotations/package-summary.html">com.google.common.annotations</A> used by <A HREF="../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/annotations/class-use/GwtCompatible.html#com.google.common.base"><B>GwtCompatible</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The presence of this annotation on a type indicates that the type may be
+ used with the
+ <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/annotations/class-use/GwtIncompatible.html#com.google.common.base"><B>GwtIncompatible</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The presence of this annotation on a method indicates that the method may
+ <em>not</em> be used with the
+ <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT),
+ even though its type is annotated as <A HREF="../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><CODE>GwtCompatible</CODE></A> and accessible in
+ GWT.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Classes in <A HREF="../../../../com/google/common/annotations/package-summary.html">com.google.common.annotations</A> used by <A HREF="../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/annotations/class-use/GwtCompatible.html#com.google.common.collect"><B>GwtCompatible</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The presence of this annotation on a type indicates that the type may be
+ used with the
+ <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/annotations/class-use/GwtIncompatible.html#com.google.common.collect"><B>GwtIncompatible</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The presence of this annotation on a method indicates that the method may
+ <em>not</em> be used with the
+ <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT),
+ even though its type is annotated as <A HREF="../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><CODE>GwtCompatible</CODE></A> and accessible in
+ GWT.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/annotations/package-use.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/FinalizablePhantomReference.html b/javadoc/com/google/common/base/FinalizablePhantomReference.html
new file mode 100644
index 0000000..3dcafbe
--- /dev/null
+++ b/javadoc/com/google/common/base/FinalizablePhantomReference.html
@@ -0,0 +1,277 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:14 PST 2009 -->
+<TITLE>
+FinalizablePhantomReference (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="FinalizablePhantomReference (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/FinalizablePhantomReference.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/FinalizablePhantomReference.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FinalizablePhantomReference.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.ref.PhantomReference">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.base</FONT>
+<BR>
+Class FinalizablePhantomReference&lt;T&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true" title="class or interface in java.lang.ref">java.lang.ref.Reference</A>&lt;T&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/PhantomReference.html?is-external=true" title="class or interface in java.lang.ref">java.lang.ref.PhantomReference</A>&lt;T&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.FinalizablePhantomReference&lt;T&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>FinalizablePhantomReference&lt;T&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/PhantomReference.html?is-external=true" title="class or interface in java.lang.ref">PhantomReference</A>&lt;T&gt;<DT>implements <A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A></DL>
+</PRE>
+
+<P>
+Phantom reference with a <code>finalizeReferent()</code> method which a
+ background thread invokes after the garbage collector reclaims the
+ referent. This is a simpler alternative to using a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/ReferenceQueue.html?is-external=true" title="class or interface in java.lang.ref"><CODE>ReferenceQueue</CODE></A>.
+
+ <p>Unlike a normal phantom reference, this reference will be cleared
+ automatically.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Bob Lee</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected </CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/FinalizablePhantomReference.html#FinalizablePhantomReference(T, com.google.common.base.FinalizableReferenceQueue)">FinalizablePhantomReference</A></B>(<A HREF="../../../../com/google/common/base/FinalizablePhantomReference.html" title="type parameter in FinalizablePhantomReference">T</A>&nbsp;referent,
+ <A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A>&nbsp;queue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new finalizable phantom reference.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.ref.PhantomReference"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.ref.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/PhantomReference.html?is-external=true" title="class or interface in java.lang.ref">PhantomReference</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/PhantomReference.html?is-external=true#get()" title="class or interface in java.lang.ref">get</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.ref.Reference"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.ref.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true" title="class or interface in java.lang.ref">Reference</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true#clear()" title="class or interface in java.lang.ref">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true#enqueue()" title="class or interface in java.lang.ref">enqueue</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true#isEnqueued()" title="class or interface in java.lang.ref">isEnqueued</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.base.FinalizableReference"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface com.google.common.base.<A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/base/FinalizableReference.html#finalizeReferent()">finalizeReferent</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="FinalizablePhantomReference(java.lang.Object,com.google.common.base.FinalizableReferenceQueue)"><!-- --></A><A NAME="FinalizablePhantomReference(T, com.google.common.base.FinalizableReferenceQueue)"><!-- --></A><H3>
+FinalizablePhantomReference</H3>
+<PRE>
+protected <B>FinalizablePhantomReference</B>(<A HREF="../../../../com/google/common/base/FinalizablePhantomReference.html" title="type parameter in FinalizablePhantomReference">T</A>&nbsp;referent,
+ <A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A>&nbsp;queue)</PRE>
+<DL>
+<DD>Constructs a new finalizable phantom reference.
+<P>
+<DL>
+<DT><B>Parameters:</B><DD><CODE>referent</CODE> - to phantom reference<DD><CODE>queue</CODE> - that should finalize the referent</DL>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/FinalizablePhantomReference.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/FinalizablePhantomReference.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FinalizablePhantomReference.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.ref.PhantomReference">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/FinalizableReference.html b/javadoc/com/google/common/base/FinalizableReference.html
new file mode 100644
index 0000000..3743f2d
--- /dev/null
+++ b/javadoc/com/google/common/base/FinalizableReference.html
@@ -0,0 +1,226 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:14 PST 2009 -->
+<TITLE>
+FinalizableReference (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="FinalizableReference (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/FinalizableReference.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/FinalizableReference.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FinalizableReference.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.base</FONT>
+<BR>
+Interface FinalizableReference</H2>
+<DL>
+<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base">FinalizablePhantomReference</A>, <A HREF="../../../../com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base">FinalizableSoftReference</A>, <A HREF="../../../../com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base">FinalizableWeakReference</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public interface <B>FinalizableReference</B></DL>
+</PRE>
+
+<P>
+Implemented by references that have code to run after garbage collection of
+ their referents.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Bob Lee</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base"><CODE>FinalizableReferenceQueue</CODE></A></DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/FinalizableReference.html#finalizeReferent()">finalizeReferent</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Invoked on a background thread after the referent has been garbage
+ collected unless security restrictions prevented starting a background
+ thread, in which case this method is invoked when new references
+ are created.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="finalizeReferent()"><!-- --></A><H3>
+finalizeReferent</H3>
+<PRE>
+void <B>finalizeReferent</B>()</PRE>
+<DL>
+<DD>Invoked on a background thread after the referent has been garbage
+ collected unless security restrictions prevented starting a background
+ thread, in which case this method is invoked when new references
+ are created.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/FinalizableReference.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/FinalizableReference.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FinalizableReference.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/FinalizableReferenceQueue.html b/javadoc/com/google/common/base/FinalizableReferenceQueue.html
new file mode 100644
index 0000000..8460650
--- /dev/null
+++ b/javadoc/com/google/common/base/FinalizableReferenceQueue.html
@@ -0,0 +1,241 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:14 PST 2009 -->
+<TITLE>
+FinalizableReferenceQueue (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="FinalizableReferenceQueue (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/FinalizableReferenceQueue.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/FinalizableReferenceQueue.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FinalizableReferenceQueue.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Object">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.base</FONT>
+<BR>
+Class FinalizableReferenceQueue</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.FinalizableReferenceQueue</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public class <B>FinalizableReferenceQueue</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+A reference queue with an associated background thread that dequeues
+ references and invokes <A HREF="../../../../com/google/common/base/FinalizableReference.html#finalizeReferent()"><CODE>FinalizableReference.finalizeReferent()</CODE></A> on
+ them.
+
+ <p>Keep a strong reference to this object until all of the associated
+ referents have been finalized. If this object is garbage collected earlier,
+ the backing thread will not invoke <code>finalizeReferent()</code> on the
+ remaining references.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Bob Lee</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html#FinalizableReferenceQueue()">FinalizableReferenceQueue</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new queue.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="FinalizableReferenceQueue()"><!-- --></A><H3>
+FinalizableReferenceQueue</H3>
+<PRE>
+public <B>FinalizableReferenceQueue</B>()</PRE>
+<DL>
+<DD>Constructs a new queue.
+<P>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/FinalizableReferenceQueue.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/FinalizableReferenceQueue.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FinalizableReferenceQueue.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Object">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/FinalizableSoftReference.html b/javadoc/com/google/common/base/FinalizableSoftReference.html
new file mode 100644
index 0000000..b2cfe09
--- /dev/null
+++ b/javadoc/com/google/common/base/FinalizableSoftReference.html
@@ -0,0 +1,274 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:14 PST 2009 -->
+<TITLE>
+FinalizableSoftReference (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="FinalizableSoftReference (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/FinalizableSoftReference.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/FinalizableSoftReference.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FinalizableSoftReference.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.ref.SoftReference">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.base</FONT>
+<BR>
+Class FinalizableSoftReference&lt;T&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true" title="class or interface in java.lang.ref">java.lang.ref.Reference</A>&lt;T&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref">java.lang.ref.SoftReference</A>&lt;T&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.FinalizableSoftReference&lt;T&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>FinalizableSoftReference&lt;T&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref">SoftReference</A>&lt;T&gt;<DT>implements <A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A></DL>
+</PRE>
+
+<P>
+Soft reference with a <code>finalizeReferent()</code> method which a background
+ thread invokes after the garbage collector reclaims the referent. This is a
+ simpler alternative to using a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/ReferenceQueue.html?is-external=true" title="class or interface in java.lang.ref"><CODE>ReferenceQueue</CODE></A>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Bob Lee</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected </CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/FinalizableSoftReference.html#FinalizableSoftReference(T, com.google.common.base.FinalizableReferenceQueue)">FinalizableSoftReference</A></B>(<A HREF="../../../../com/google/common/base/FinalizableSoftReference.html" title="type parameter in FinalizableSoftReference">T</A>&nbsp;referent,
+ <A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A>&nbsp;queue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new finalizable soft reference.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.ref.SoftReference"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.ref.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref">SoftReference</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true#get()" title="class or interface in java.lang.ref">get</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.ref.Reference"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.ref.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true" title="class or interface in java.lang.ref">Reference</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true#clear()" title="class or interface in java.lang.ref">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true#enqueue()" title="class or interface in java.lang.ref">enqueue</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true#isEnqueued()" title="class or interface in java.lang.ref">isEnqueued</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.base.FinalizableReference"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface com.google.common.base.<A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/base/FinalizableReference.html#finalizeReferent()">finalizeReferent</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="FinalizableSoftReference(java.lang.Object,com.google.common.base.FinalizableReferenceQueue)"><!-- --></A><A NAME="FinalizableSoftReference(T, com.google.common.base.FinalizableReferenceQueue)"><!-- --></A><H3>
+FinalizableSoftReference</H3>
+<PRE>
+protected <B>FinalizableSoftReference</B>(<A HREF="../../../../com/google/common/base/FinalizableSoftReference.html" title="type parameter in FinalizableSoftReference">T</A>&nbsp;referent,
+ <A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A>&nbsp;queue)</PRE>
+<DL>
+<DD>Constructs a new finalizable soft reference.
+<P>
+<DL>
+<DT><B>Parameters:</B><DD><CODE>referent</CODE> - to softly reference<DD><CODE>queue</CODE> - that should finalize the referent</DL>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/FinalizableSoftReference.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/FinalizableSoftReference.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FinalizableSoftReference.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.ref.SoftReference">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/FinalizableWeakReference.html b/javadoc/com/google/common/base/FinalizableWeakReference.html
new file mode 100644
index 0000000..8710cbc
--- /dev/null
+++ b/javadoc/com/google/common/base/FinalizableWeakReference.html
@@ -0,0 +1,265 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:14 PST 2009 -->
+<TITLE>
+FinalizableWeakReference (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="FinalizableWeakReference (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/FinalizableWeakReference.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/FinalizableWeakReference.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FinalizableWeakReference.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.ref.Reference">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.base</FONT>
+<BR>
+Class FinalizableWeakReference&lt;T&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true" title="class or interface in java.lang.ref">java.lang.ref.Reference</A>&lt;T&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref">java.lang.ref.WeakReference</A>&lt;T&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.FinalizableWeakReference&lt;T&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>FinalizableWeakReference&lt;T&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref">WeakReference</A>&lt;T&gt;<DT>implements <A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A></DL>
+</PRE>
+
+<P>
+Weak reference with a <code>finalizeReferent()</code> method which a background
+ thread invokes after the garbage collector reclaims the referent. This is a
+ simpler alternative to using a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/ReferenceQueue.html?is-external=true" title="class or interface in java.lang.ref"><CODE>ReferenceQueue</CODE></A>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Bob Lee</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected </CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/FinalizableWeakReference.html#FinalizableWeakReference(T, com.google.common.base.FinalizableReferenceQueue)">FinalizableWeakReference</A></B>(<A HREF="../../../../com/google/common/base/FinalizableWeakReference.html" title="type parameter in FinalizableWeakReference">T</A>&nbsp;referent,
+ <A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A>&nbsp;queue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new finalizable weak reference.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.ref.Reference"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.ref.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true" title="class or interface in java.lang.ref">Reference</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true#clear()" title="class or interface in java.lang.ref">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true#enqueue()" title="class or interface in java.lang.ref">enqueue</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true#get()" title="class or interface in java.lang.ref">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true#isEnqueued()" title="class or interface in java.lang.ref">isEnqueued</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.base.FinalizableReference"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface com.google.common.base.<A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/base/FinalizableReference.html#finalizeReferent()">finalizeReferent</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="FinalizableWeakReference(java.lang.Object,com.google.common.base.FinalizableReferenceQueue)"><!-- --></A><A NAME="FinalizableWeakReference(T, com.google.common.base.FinalizableReferenceQueue)"><!-- --></A><H3>
+FinalizableWeakReference</H3>
+<PRE>
+protected <B>FinalizableWeakReference</B>(<A HREF="../../../../com/google/common/base/FinalizableWeakReference.html" title="type parameter in FinalizableWeakReference">T</A>&nbsp;referent,
+ <A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A>&nbsp;queue)</PRE>
+<DL>
+<DD>Constructs a new finalizable weak reference.
+<P>
+<DL>
+<DT><B>Parameters:</B><DD><CODE>referent</CODE> - to weakly reference<DD><CODE>queue</CODE> - that should finalize the referent</DL>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/FinalizableWeakReference.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/FinalizableWeakReference.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FinalizableWeakReference.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.ref.Reference">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/Function.html b/javadoc/com/google/common/base/Function.html
new file mode 100644
index 0000000..23665cf
--- /dev/null
+++ b/javadoc/com/google/common/base/Function.html
@@ -0,0 +1,270 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:14 PST 2009 -->
+<TITLE>
+Function (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Function (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Function.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/Functions.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/Function.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Function.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.base</FONT>
+<BR>
+Interface Function&lt;F,T&gt;</H2>
+<DL>
+<DT><DT><B>Type Parameters:</B><DD><CODE>F</CODE> - the type of the function input<DD><CODE>T</CODE> - the type of the function output</DL>
+<HR>
+<DL>
+<DT><PRE>public interface <B>Function&lt;F,T&gt;</B></DL>
+</PRE>
+
+<P>
+A transformation from one object to another. For example, a
+ <code>StringToIntegerFunction</code> may implement
+ <code>Function&lt;String,Integer&gt;</code> and transform integers in
+ <code>String</code> format to <code>Integer</code> format.
+
+ <p>The transformation on the source object does not necessarily result in
+ an object of a different type. For example, a
+ <code>FarenheitToCelsiusFunction</code> may implement
+ <code>Function&lt;Float,Float&gt;</code>.
+
+ <p>Implementations which may cause side effects upon evaluation are strongly
+ encouraged to state this fact clearly in their API documentation.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion, Scott Bonneau</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/base/Function.html" title="type parameter in Function">T</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Function.html#apply(F)">apply</A></B>(<A HREF="../../../../com/google/common/base/Function.html" title="type parameter in Function">F</A>&nbsp;from)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Applies the function to an object of type <code>F</code>, resulting in an object
+ of type <code>T</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Function.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;obj)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indicates whether some other object is equal to this <code>Function</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="apply(java.lang.Object)"><!-- --></A><A NAME="apply(F)"><!-- --></A><H3>
+apply</H3>
+<PRE>
+<A HREF="../../../../com/google/common/base/Function.html" title="type parameter in Function">T</A> <B>apply</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/base/Function.html" title="type parameter in Function">F</A>&nbsp;from)</PRE>
+<DL>
+<DD>Applies the function to an object of type <code>F</code>, resulting in an object
+ of type <code>T</code>. Note that types <code>F</code> and <code>T</code> may or may not
+ be the same.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>from</CODE> - the source object
+<DT><B>Returns:</B><DD>the resulting object</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;obj)</PRE>
+<DL>
+<DD>Indicates whether some other object is equal to this <code>Function</code>.
+ This method can return <code>true</code> <i>only</i> if the specified object is
+ also a <code>Function</code> and, for every input object <code>o</code>, it returns
+ exactly the same value. Thus, <code>function1.equals(function2)</code> implies
+ that either <code>function1.apply(o)</code> and <code>function2.apply(o)</code> are
+ both null, or <code>function1.apply(o).equals(function2.apply(o))</code>.
+
+ <p>Note that it is always safe <em>not</em> to override
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>obj</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Function.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/Functions.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/Function.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Function.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/Functions.html b/javadoc/com/google/common/base/Functions.html
new file mode 100644
index 0000000..88571df
--- /dev/null
+++ b/javadoc/com/google/common/base/Functions.html
@@ -0,0 +1,421 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:14 PST 2009 -->
+<TITLE>
+Functions (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Functions (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Functions.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/Functions.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Functions.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.base</FONT>
+<BR>
+Class Functions</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.Functions</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public final class <B>Functions</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+Useful functions.
+
+ <p>All methods returns serializable functions as long as they're given
+ serializable parameters.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Mike Bostock, Vlad Patryshev, Jared Levy</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;A,B,C&gt; <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,C&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Functions.html#compose(com.google.common.base.Function, com.google.common.base.Function)">compose</A></B>(<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;B,C&gt;&nbsp;g,
+ <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,? extends B&gt;&nbsp;f)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the composition of two functions.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>,E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Functions.html#constant(E)">constant</A></B>(E&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a function that returns <code>value</code> for any input.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Functions.html#forMap(java.util.Map, V)">forMap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,? extends V&gt;&nbsp;map,
+ V&nbsp;defaultValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a function which performs a map lookup with a default value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Functions.html#forMap(java.util.Map)">forMap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a function which performs a map lookup.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;T,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</A>&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Functions.html#forPredicate(com.google.common.base.Predicate)">forPredicate</A></B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a function that returns the same boolean output as the given
+ predicate for all inputs.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;E,E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Functions.html#identity()">identity</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the identity function.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Functions.html#toStringFunction()">toStringFunction</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a function that calls <code>toString()</code> on its argument.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="toStringFunction()"><!-- --></A><H3>
+toStringFunction</H3>
+<PRE>
+public static <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&gt; <B>toStringFunction</B>()</PRE>
+<DL>
+<DD>Returns a function that calls <code>toString()</code> on its argument. The
+ function does not accept nulls; it will throw a
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang"><CODE>NullPointerException</CODE></A> when applied to <code>null</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="identity()"><!-- --></A><H3>
+identity</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;E,E&gt; <B>identity</B>()</PRE>
+<DL>
+<DD>Returns the identity function.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="forMap(java.util.Map)"><!-- --></A><H3>
+forMap</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;K,V&gt; <B>forMap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;map)</PRE>
+<DL>
+<DD>Returns a function which performs a map lookup. The returned function
+ throws an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> if given a key that does not
+ exist in the map.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="forMap(java.util.Map,java.lang.Object)"><!-- --></A><A NAME="forMap(java.util.Map, V)"><!-- --></A><H3>
+forMap</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;K,V&gt; <B>forMap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,? extends V&gt;&nbsp;map,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ V&nbsp;defaultValue)</PRE>
+<DL>
+<DD>Returns a function which performs a map lookup with a default value. The
+ function created by this method returns <code>defaultValue</code> for all
+ inputs that do not belong to the map's key set.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>map</CODE> - source map that determines the function behavior<DD><CODE>defaultValue</CODE> - the value to return for inputs that aren't map keys
+<DT><B>Returns:</B><DD>function that returns <code>map.get(a)</code> when <code>a</code> is a key,
+ or <code>defaultValue</code> otherwise</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="compose(com.google.common.base.Function, com.google.common.base.Function)"><!-- --></A><H3>
+compose</H3>
+<PRE>
+public static &lt;A,B,C&gt; <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,C&gt; <B>compose</B>(<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;B,C&gt;&nbsp;g,
+ <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,? extends B&gt;&nbsp;f)</PRE>
+<DL>
+<DD>Returns the composition of two functions. For <code>f: A-&gt;B</code> and
+ <code>g: B-&gt;C</code>, composition is defined as the function h such that
+ <code>h(a) == g(f(a))</code> for each <code>a</code>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>g</CODE> - the second function to apply<DD><CODE>f</CODE> - the first function to apply
+<DT><B>Returns:</B><DD>the composition of <code>f</code> and <code>g</code><DT><B>See Also:</B><DD><a href="//en.wikipedia.org/wiki/Function_composition">
+ function composition</a></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="forPredicate(com.google.common.base.Predicate)"><!-- --></A><H3>
+forPredicate</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;T,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</A>&gt; <B>forPredicate</B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;&nbsp;predicate)</PRE>
+<DL>
+<DD>Creates a function that returns the same boolean output as the given
+ predicate for all inputs.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="constant(java.lang.Object)"><!-- --></A><A NAME="constant(E)"><!-- --></A><H3>
+constant</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>,E&gt; <B>constant</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ E&nbsp;value)</PRE>
+<DL>
+<DD>Creates a function that returns <code>value</code> for any input.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>value</CODE> - the constant value for the function to return
+<DT><B>Returns:</B><DD>a function that always returns <code>value</code></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Functions.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/Functions.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Functions.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/Joiner.MapJoiner.html b/javadoc/com/google/common/base/Joiner.MapJoiner.html
new file mode 100644
index 0000000..d515e78
--- /dev/null
+++ b/javadoc/com/google/common/base/Joiner.MapJoiner.html
@@ -0,0 +1,321 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:14 PST 2009 -->
+<TITLE>
+Joiner.MapJoiner (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Joiner.MapJoiner (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Joiner.MapJoiner.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/Objects.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/Joiner.MapJoiner.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Joiner.MapJoiner.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.base</FONT>
+<BR>
+Class Joiner.MapJoiner</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.Joiner.MapJoiner</B>
+</PRE>
+<DL>
+<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public static class <B>Joiner.MapJoiner</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+An object that joins map entries in the same manner as <code>Joiner</code> joins
+ iterables and arrays.
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;A extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&gt;
+<BR>
+A</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html#appendTo(A, java.util.Map)">appendTo</A></B>(A&nbsp;appendable,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;?,?&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Appends the string representation of each entry of <code>map</code>, using the
+ previously configured separator and key-value separator, to <code>appendable</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html#appendTo(java.lang.StringBuilder, java.util.Map)">appendTo</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A>&nbsp;builder,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;?,?&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Appends the string representation of each entry of <code>map</code>, using the
+ previously configured separator and key-value separator, to <code>builder</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html#join(java.util.Map)">join</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;?,?&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string containing the string representation of each entry of
+ <code>map</code>, using the previously configured separator and key-value
+ separator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html#useForNull(java.lang.String)">useForNull</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;nullText)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map joiner with the same behavior as this one, except
+ automatically substituting <code>nullText</code> for any provided null keys or
+ values.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="appendTo(java.lang.Appendable,java.util.Map)"><!-- --></A><A NAME="appendTo(A, java.util.Map)"><!-- --></A><H3>
+appendTo</H3>
+<PRE>
+public &lt;A extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&gt; A <B>appendTo</B>(A&nbsp;appendable,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;?,?&gt;&nbsp;map)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD>Appends the string representation of each entry of <code>map</code>, using the
+ previously configured separator and key-value separator, to <code>appendable</code>.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="appendTo(java.lang.StringBuilder, java.util.Map)"><!-- --></A><H3>
+appendTo</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A> <B>appendTo</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A>&nbsp;builder,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;?,?&gt;&nbsp;map)</PRE>
+<DL>
+<DD>Appends the string representation of each entry of <code>map</code>, using the
+ previously configured separator and key-value separator, to <code>builder</code>. Identical to <A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html#appendTo(A, java.util.Map)"><CODE>appendTo(Appendable, Map)</CODE></A>, except that it
+ does not throw <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><CODE>IOException</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="join(java.util.Map)"><!-- --></A><H3>
+join</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>join</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;?,?&gt;&nbsp;map)</PRE>
+<DL>
+<DD>Returns a string containing the string representation of each entry of
+ <code>map</code>, using the previously configured separator and key-value
+ separator.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="useForNull(java.lang.String)"><!-- --></A><H3>
+useForNull</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A> <B>useForNull</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;nullText)</PRE>
+<DL>
+<DD>Returns a map joiner with the same behavior as this one, except
+ automatically substituting <code>nullText</code> for any provided null keys or
+ values.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Joiner.MapJoiner.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/Objects.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/Joiner.MapJoiner.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Joiner.MapJoiner.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/Joiner.html b/javadoc/com/google/common/base/Joiner.html
new file mode 100644
index 0000000..aa070a6
--- /dev/null
+++ b/javadoc/com/google/common/base/Joiner.html
@@ -0,0 +1,626 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:14 PST 2009 -->
+<TITLE>
+Joiner (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Joiner (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Joiner.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/Functions.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/Joiner.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Joiner.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.base</FONT>
+<BR>
+Class Joiner</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.Joiner</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public class <B>Joiner</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+An object which joins pieces of text (specified as an array, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang"><CODE>Iterable</CODE></A>, varargs or even a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A>) with a separator. It either
+ appends the results to an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang"><CODE>Appendable</CODE></A> or returns them as a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><CODE>String</CODE></A>. Example: <pre> <code>Joiner joiner = Joiner.on("; ").skipNulls();
+ . . .
+ return joiner.join("Harry", null, "Ron", "Hermione");</code></pre>
+
+ This returns the string <code>"Harry; Ron; Hermione"</code>. Note that all input
+ elements are converted to strings using <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang"><CODE>Object.toString()</CODE></A> before
+ being appended.
+
+ <p>If neither <A HREF="../../../../com/google/common/base/Joiner.html#skipNulls()"><CODE>skipNulls()</CODE></A> nor <A HREF="../../../../com/google/common/base/Joiner.html#useForNull(java.lang.String)"><CODE>useForNull(String)</CODE></A> is
+ specified, the joining methods will throw <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang"><CODE>NullPointerException</CODE></A> if any
+ given element is null.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion</DD>
+</DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An object that joins map entries in the same manner as <code>Joiner</code> joins
+ iterables and arrays.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;A extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&gt;
+<BR>
+A</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#appendTo(A, java.lang.Iterable)">appendTo</A></B>(A&nbsp;appendable,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;parts)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Appends the string representation of each of <code>parts</code>, using the
+ previously configured separator between each, to <code>appendable</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;A extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&gt;
+<BR>
+A</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#appendTo(A, java.lang.Object[])">appendTo</A></B>(A&nbsp;appendable,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>[]&nbsp;parts)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Appends the string representation of each of <code>parts</code>, using the
+ previously configured separator between each, to <code>appendable</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;A extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&gt;
+<BR>
+A</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#appendTo(A, java.lang.Object, java.lang.Object, java.lang.Object...)">appendTo</A></B>(A&nbsp;appendable,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;first,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;second,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;rest)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Appends to <code>appendable</code> the string representation of each of the
+ remaining arguments.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#appendTo(java.lang.StringBuilder, java.lang.Iterable)">appendTo</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A>&nbsp;builder,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;parts)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Appends the string representation of each of <code>parts</code>, using the
+ previously configured separator between each, to <code>builder</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#appendTo(java.lang.StringBuilder, java.lang.Object[])">appendTo</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A>&nbsp;builder,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>[]&nbsp;parts)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Appends the string representation of each of <code>parts</code>, using the
+ previously configured separator between each, to <code>builder</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#appendTo(java.lang.StringBuilder, java.lang.Object, java.lang.Object, java.lang.Object...)">appendTo</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A>&nbsp;builder,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;first,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;second,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;rest)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Appends to <code>builder</code> the string representation of each of the
+ remaining arguments.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#join(java.lang.Iterable)">join</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;parts)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string containing the string representation of each of <code>parts</code>, using the previously configured separator between each.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#join(java.lang.Object[])">join</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>[]&nbsp;parts)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string containing the string representation of each of <code>parts</code>, using the previously configured separator between each.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#join(java.lang.Object, java.lang.Object, java.lang.Object...)">join</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;first,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;second,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;rest)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string containing the string representation of each argument,
+ using the previously configured separator between each.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#on(char)">on</A></B>(char&nbsp;separator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a joiner which automatically places <code>separator</code> between
+ consecutive elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#on(java.lang.String)">on</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a joiner which automatically places <code>separator</code> between
+ consecutive elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#skipNulls()">skipNulls</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a joiner with the same behavior as this joiner, except
+ automatically skipping over any provided null elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#useForNull(java.lang.String)">useForNull</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;nullText)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a joiner with the same behavior as this one, except automatically
+ substituting <code>nullText</code> for any provided null elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#withKeyValueSeparator(java.lang.String)">withKeyValueSeparator</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;keyValueSeparator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <code>MapJoiner</code> using the given key-value separator, and the
+ same configuration as this <code>Joiner</code> otherwise.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="on(java.lang.String)"><!-- --></A><H3>
+on</H3>
+<PRE>
+public static <A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A> <B>on</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator)</PRE>
+<DL>
+<DD>Returns a joiner which automatically places <code>separator</code> between
+ consecutive elements.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="on(char)"><!-- --></A><H3>
+on</H3>
+<PRE>
+public static <A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A> <B>on</B>(char&nbsp;separator)</PRE>
+<DL>
+<DD>Returns a joiner which automatically places <code>separator</code> between
+ consecutive elements.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="appendTo(java.lang.Appendable,java.lang.Iterable)"><!-- --></A><A NAME="appendTo(A, java.lang.Iterable)"><!-- --></A><H3>
+appendTo</H3>
+<PRE>
+public &lt;A extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&gt; A <B>appendTo</B>(A&nbsp;appendable,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;parts)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD>Appends the string representation of each of <code>parts</code>, using the
+ previously configured separator between each, to <code>appendable</code>.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="appendTo(java.lang.Appendable,java.lang.Object[])"><!-- --></A><A NAME="appendTo(A, java.lang.Object[])"><!-- --></A><H3>
+appendTo</H3>
+<PRE>
+public final &lt;A extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&gt; A <B>appendTo</B>(A&nbsp;appendable,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>[]&nbsp;parts)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD>Appends the string representation of each of <code>parts</code>, using the
+ previously configured separator between each, to <code>appendable</code>.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="appendTo(java.lang.Appendable,java.lang.Object,java.lang.Object,java.lang.Object[])"><!-- --></A><A NAME="appendTo(A, java.lang.Object, java.lang.Object, java.lang.Object...)"><!-- --></A><H3>
+appendTo</H3>
+<PRE>
+public final &lt;A extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&gt; A <B>appendTo</B>(A&nbsp;appendable,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;first,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;second,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;rest)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD>Appends to <code>appendable</code> the string representation of each of the
+ remaining arguments.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="appendTo(java.lang.StringBuilder, java.lang.Iterable)"><!-- --></A><H3>
+appendTo</H3>
+<PRE>
+public final <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A> <B>appendTo</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A>&nbsp;builder,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;parts)</PRE>
+<DL>
+<DD>Appends the string representation of each of <code>parts</code>, using the
+ previously configured separator between each, to <code>builder</code>. Identical
+ to <A HREF="../../../../com/google/common/base/Joiner.html#appendTo(A, java.lang.Iterable)"><CODE>appendTo(Appendable, Iterable)</CODE></A>, except that it does not throw
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><CODE>IOException</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="appendTo(java.lang.StringBuilder, java.lang.Object[])"><!-- --></A><H3>
+appendTo</H3>
+<PRE>
+public final <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A> <B>appendTo</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A>&nbsp;builder,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>[]&nbsp;parts)</PRE>
+<DL>
+<DD>Appends the string representation of each of <code>parts</code>, using the
+ previously configured separator between each, to <code>builder</code>. Identical
+ to <A HREF="../../../../com/google/common/base/Joiner.html#appendTo(A, java.lang.Iterable)"><CODE>appendTo(Appendable, Iterable)</CODE></A>, except that it does not throw
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><CODE>IOException</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="appendTo(java.lang.StringBuilder, java.lang.Object, java.lang.Object, java.lang.Object...)"><!-- --></A><H3>
+appendTo</H3>
+<PRE>
+public final <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A> <B>appendTo</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A>&nbsp;builder,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;first,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;second,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;rest)</PRE>
+<DL>
+<DD>Appends to <code>builder</code> the string representation of each of the
+ remaining arguments. Identical to <A HREF="../../../../com/google/common/base/Joiner.html#appendTo(A, java.lang.Object, java.lang.Object, java.lang.Object...)"><CODE>appendTo(Appendable, Object,
+ Object, Object[])</CODE></A>, except that it does not throw <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><CODE>IOException</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="join(java.lang.Iterable)"><!-- --></A><H3>
+join</H3>
+<PRE>
+public final <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>join</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;parts)</PRE>
+<DL>
+<DD>Returns a string containing the string representation of each of <code>parts</code>, using the previously configured separator between each.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="join(java.lang.Object[])"><!-- --></A><H3>
+join</H3>
+<PRE>
+public final <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>join</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>[]&nbsp;parts)</PRE>
+<DL>
+<DD>Returns a string containing the string representation of each of <code>parts</code>, using the previously configured separator between each.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="join(java.lang.Object, java.lang.Object, java.lang.Object...)"><!-- --></A><H3>
+join</H3>
+<PRE>
+public final <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>join</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;first,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;second,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;rest)</PRE>
+<DL>
+<DD>Returns a string containing the string representation of each argument,
+ using the previously configured separator between each.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="useForNull(java.lang.String)"><!-- --></A><H3>
+useForNull</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A> <B>useForNull</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;nullText)</PRE>
+<DL>
+<DD>Returns a joiner with the same behavior as this one, except automatically
+ substituting <code>nullText</code> for any provided null elements.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="skipNulls()"><!-- --></A><H3>
+skipNulls</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A> <B>skipNulls</B>()</PRE>
+<DL>
+<DD>Returns a joiner with the same behavior as this joiner, except
+ automatically skipping over any provided null elements.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="withKeyValueSeparator(java.lang.String)"><!-- --></A><H3>
+withKeyValueSeparator</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A> <B>withKeyValueSeparator</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;keyValueSeparator)</PRE>
+<DL>
+<DD>Returns a <code>MapJoiner</code> using the given key-value separator, and the
+ same configuration as this <code>Joiner</code> otherwise.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Joiner.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/Functions.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/Joiner.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Joiner.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/Objects.html b/javadoc/com/google/common/base/Objects.html
new file mode 100644
index 0000000..c22a6b8
--- /dev/null
+++ b/javadoc/com/google/common/base/Objects.html
@@ -0,0 +1,276 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:14 PST 2009 -->
+<TITLE>
+Objects (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Objects (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Objects.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/Preconditions.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/Objects.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Objects.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.base</FONT>
+<BR>
+Class Objects</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.Objects</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public final class <B>Objects</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+Helper functions that can operate on any <code>Object</code>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Laurence Gonsalves</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Objects.html#equal(java.lang.Object, java.lang.Object)">equal</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;a,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;b)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether two possibly-null objects are equal.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Objects.html#hashCode(java.lang.Object...)">hashCode</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;objects)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Generates a hash code for multiple values.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="equal(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
+equal</H3>
+<PRE>
+public static boolean <B>equal</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;a,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;b)</PRE>
+<DL>
+<DD>Determines whether two possibly-null objects are equal. Returns:
+
+ <ul>
+ <li><code>true</code> if <code>a</code> and <code>b</code> are both null.
+ <li><code>true</code> if <code>a</code> and <code>b</code> are both non-null and they are
+ equal according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(Object)</CODE></A>.
+ <li><code>false</code> in all other situations.
+ </ul>
+
+ <p>This assumes that any non-null objects passed to this function conform
+ to the <code>equals()</code> contract.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode(java.lang.Object...)"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+public static int <B>hashCode</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;objects)</PRE>
+<DL>
+<DD>Generates a hash code for multiple values. The hash code is generated by
+ calling <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#hashCode(java.lang.Object[])" title="class or interface in java.util"><CODE>Arrays.hashCode(Object[])</CODE></A>.
+
+ <p>This is useful for implementing <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>. For example,
+ in an object that has three properties, <code>x</code>, <code>y</code>, and
+ <code>z</code>, one could write:
+ <pre>
+ public int hashCode() {
+ return Objects.hashCode(getX(), getY(), getZ());
+ }</pre>
+
+ <b>Warning</b>: When a single object is supplied, the returned hash code
+ does not equal the hash code of that object.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Objects.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/Preconditions.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/Objects.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Objects.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/Preconditions.html b/javadoc/com/google/common/base/Preconditions.html
new file mode 100644
index 0000000..d039414
--- /dev/null
+++ b/javadoc/com/google/common/base/Preconditions.html
@@ -0,0 +1,694 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:14 PST 2009 -->
+<TITLE>
+Preconditions (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Preconditions (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Preconditions.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/Objects.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/Preconditions.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Preconditions.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.base</FONT>
+<BR>
+Class Preconditions</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.Preconditions</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public final class <B>Preconditions</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+Simple static methods to be called at the start of your own methods to verify
+ correct arguments and state. This allows constructs such as
+ <pre>
+ if (count <= 0) {
+ throw new IllegalArgumentException("must be positive: " + count);
+ }</pre>
+
+ to be replaced with the more compact
+ <pre>
+ checkArgument(count > 0, "must be positive: %s", count);</pre>
+
+ Note that the sense of the expression is inverted; with <code>Preconditions</code>
+ you declare what you expect to be <i>true</i>, just as you do with an
+ <a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/assert.html">
+ <code>assert</code></a> or a JUnit <code>assertTrue</code> call.
+
+ <p><b>Warning:</b> only the <code>"%s"</code> specifier is recognized as a
+ placeholder in these messages, not the full range of <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true#format(java.lang.String, java.lang.Object...)" title="class or interface in java.lang"><CODE>String.format(String, Object[])</CODE></A> specifiers.
+
+ <p>Take care not to confuse precondition checking with other similar types
+ of checks! Precondition exceptions -- including those provided here, but also
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang"><CODE>IndexOutOfBoundsException</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/NoSuchElementException.html?is-external=true" title="class or interface in java.util"><CODE>NoSuchElementException</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang"><CODE>UnsupportedOperationException</CODE></A> and others -- are used to signal that the
+ <i>calling method</i> has made an error. This tells the caller that it should
+ not have invoked the method when it did, with the arguments it did, or
+ perhaps ever. Postcondition or other invariant failures should not throw
+ these types of exceptions.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkArgument(boolean)">checkArgument</A></B>(boolean&nbsp;expression)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures the truth of an expression involving one or more parameters to the
+ calling method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkArgument(boolean, java.lang.Object)">checkArgument</A></B>(boolean&nbsp;expression,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;errorMessage)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures the truth of an expression involving one or more parameters to the
+ calling method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkArgument(boolean, java.lang.String, java.lang.Object...)">checkArgument</A></B>(boolean&nbsp;expression,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;errorMessageTemplate,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;errorMessageArgs)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures the truth of an expression involving one or more parameters to the
+ calling method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkElementIndex(int, int)">checkElementIndex</A></B>(int&nbsp;index,
+ int&nbsp;size)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures that <code>index</code> specifies a valid <i>element</i> in an array,
+ list or string of size <code>size</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkElementIndex(int, int, java.lang.String)">checkElementIndex</A></B>(int&nbsp;index,
+ int&nbsp;size,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;desc)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures that <code>index</code> specifies a valid <i>element</i> in an array,
+ list or string of size <code>size</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkNotNull(T)">checkNotNull</A></B>(T&nbsp;reference)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures that an object reference passed as a parameter to the calling
+ method is not null.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkNotNull(T, java.lang.Object)">checkNotNull</A></B>(T&nbsp;reference,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;errorMessage)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures that an object reference passed as a parameter to the calling
+ method is not null.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkNotNull(T, java.lang.String, java.lang.Object...)">checkNotNull</A></B>(T&nbsp;reference,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;errorMessageTemplate,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;errorMessageArgs)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures that an object reference passed as a parameter to the calling
+ method is not null.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkPositionIndex(int, int)">checkPositionIndex</A></B>(int&nbsp;index,
+ int&nbsp;size)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures that <code>index</code> specifies a valid <i>position</i> in an array,
+ list or string of size <code>size</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkPositionIndex(int, int, java.lang.String)">checkPositionIndex</A></B>(int&nbsp;index,
+ int&nbsp;size,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;desc)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures that <code>index</code> specifies a valid <i>position</i> in an array,
+ list or string of size <code>size</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkPositionIndexes(int, int, int)">checkPositionIndexes</A></B>(int&nbsp;start,
+ int&nbsp;end,
+ int&nbsp;size)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures that <code>start</code> and <code>end</code> specify a valid <i>positions</i>
+ in an array, list or string of size <code>size</code>, and are in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkState(boolean)">checkState</A></B>(boolean&nbsp;expression)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures the truth of an expression involving the state of the calling
+ instance, but not involving any parameters to the calling method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkState(boolean, java.lang.Object)">checkState</A></B>(boolean&nbsp;expression,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;errorMessage)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures the truth of an expression involving the state of the calling
+ instance, but not involving any parameters to the calling method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkState(boolean, java.lang.String, java.lang.Object...)">checkState</A></B>(boolean&nbsp;expression,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;errorMessageTemplate,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;errorMessageArgs)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures the truth of an expression involving the state of the calling
+ instance, but not involving any parameters to the calling method.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="checkArgument(boolean)"><!-- --></A><H3>
+checkArgument</H3>
+<PRE>
+public static void <B>checkArgument</B>(boolean&nbsp;expression)</PRE>
+<DL>
+<DD>Ensures the truth of an expression involving one or more parameters to the
+ calling method.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>expression</CODE> - a boolean expression
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>expression</code> is false</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="checkArgument(boolean, java.lang.Object)"><!-- --></A><H3>
+checkArgument</H3>
+<PRE>
+public static void <B>checkArgument</B>(boolean&nbsp;expression,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;errorMessage)</PRE>
+<DL>
+<DD>Ensures the truth of an expression involving one or more parameters to the
+ calling method.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>expression</CODE> - a boolean expression<DD><CODE>errorMessage</CODE> - the exception message to use if the check fails; will
+ be converted to a string using <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true#valueOf(java.lang.Object)" title="class or interface in java.lang"><CODE>String.valueOf(Object)</CODE></A>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>expression</code> is false</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="checkArgument(boolean, java.lang.String, java.lang.Object...)"><!-- --></A><H3>
+checkArgument</H3>
+<PRE>
+public static void <B>checkArgument</B>(boolean&nbsp;expression,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;errorMessageTemplate,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;errorMessageArgs)</PRE>
+<DL>
+<DD>Ensures the truth of an expression involving one or more parameters to the
+ calling method.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>expression</CODE> - a boolean expression<DD><CODE>errorMessageTemplate</CODE> - a template for the exception message should the
+ check fail. The message is formed by replacing each <code>%s</code>
+ placeholder in the template with an argument. These are matched by
+ position - the first <code>%s</code> gets <code>errorMessageArgs[0]</code>, etc.
+ Unmatched arguments will be appended to the formatted message in square
+ braces. Unmatched placeholders will be left as-is.<DD><CODE>errorMessageArgs</CODE> - the arguments to be substituted into the message
+ template. Arguments are converted to strings using
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true#valueOf(java.lang.Object)" title="class or interface in java.lang"><CODE>String.valueOf(Object)</CODE></A>.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>expression</code> is false
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if the check fails and either <code>errorMessageTemplate</code> or <code>errorMessageArgs</code> is null (don't let
+ this happen)</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="checkState(boolean)"><!-- --></A><H3>
+checkState</H3>
+<PRE>
+public static void <B>checkState</B>(boolean&nbsp;expression)</PRE>
+<DL>
+<DD>Ensures the truth of an expression involving the state of the calling
+ instance, but not involving any parameters to the calling method.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>expression</CODE> - a boolean expression
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</A></CODE> - if <code>expression</code> is false</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="checkState(boolean, java.lang.Object)"><!-- --></A><H3>
+checkState</H3>
+<PRE>
+public static void <B>checkState</B>(boolean&nbsp;expression,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;errorMessage)</PRE>
+<DL>
+<DD>Ensures the truth of an expression involving the state of the calling
+ instance, but not involving any parameters to the calling method.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>expression</CODE> - a boolean expression<DD><CODE>errorMessage</CODE> - the exception message to use if the check fails; will
+ be converted to a string using <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true#valueOf(java.lang.Object)" title="class or interface in java.lang"><CODE>String.valueOf(Object)</CODE></A>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</A></CODE> - if <code>expression</code> is false</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="checkState(boolean, java.lang.String, java.lang.Object...)"><!-- --></A><H3>
+checkState</H3>
+<PRE>
+public static void <B>checkState</B>(boolean&nbsp;expression,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;errorMessageTemplate,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;errorMessageArgs)</PRE>
+<DL>
+<DD>Ensures the truth of an expression involving the state of the calling
+ instance, but not involving any parameters to the calling method.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>expression</CODE> - a boolean expression<DD><CODE>errorMessageTemplate</CODE> - a template for the exception message should the
+ check fail. The message is formed by replacing each <code>%s</code>
+ placeholder in the template with an argument. These are matched by
+ position - the first <code>%s</code> gets <code>errorMessageArgs[0]</code>, etc.
+ Unmatched arguments will be appended to the formatted message in square
+ braces. Unmatched placeholders will be left as-is.<DD><CODE>errorMessageArgs</CODE> - the arguments to be substituted into the message
+ template. Arguments are converted to strings using
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true#valueOf(java.lang.Object)" title="class or interface in java.lang"><CODE>String.valueOf(Object)</CODE></A>.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</A></CODE> - if <code>expression</code> is false
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if the check fails and either <code>errorMessageTemplate</code> or <code>errorMessageArgs</code> is null (don't let
+ this happen)</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="checkNotNull(java.lang.Object)"><!-- --></A><A NAME="checkNotNull(T)"><!-- --></A><H3>
+checkNotNull</H3>
+<PRE>
+public static &lt;T&gt; T <B>checkNotNull</B>(T&nbsp;reference)</PRE>
+<DL>
+<DD>Ensures that an object reference passed as a parameter to the calling
+ method is not null.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>reference</CODE> - an object reference
+<DT><B>Returns:</B><DD>the non-null reference that was validated
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>reference</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="checkNotNull(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="checkNotNull(T, java.lang.Object)"><!-- --></A><H3>
+checkNotNull</H3>
+<PRE>
+public static &lt;T&gt; T <B>checkNotNull</B>(T&nbsp;reference,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;errorMessage)</PRE>
+<DL>
+<DD>Ensures that an object reference passed as a parameter to the calling
+ method is not null.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>reference</CODE> - an object reference<DD><CODE>errorMessage</CODE> - the exception message to use if the check fails; will
+ be converted to a string using <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true#valueOf(java.lang.Object)" title="class or interface in java.lang"><CODE>String.valueOf(Object)</CODE></A>
+<DT><B>Returns:</B><DD>the non-null reference that was validated
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>reference</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="checkNotNull(java.lang.Object,java.lang.String,java.lang.Object[])"><!-- --></A><A NAME="checkNotNull(T, java.lang.String, java.lang.Object...)"><!-- --></A><H3>
+checkNotNull</H3>
+<PRE>
+public static &lt;T&gt; T <B>checkNotNull</B>(T&nbsp;reference,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;errorMessageTemplate,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;errorMessageArgs)</PRE>
+<DL>
+<DD>Ensures that an object reference passed as a parameter to the calling
+ method is not null.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>reference</CODE> - an object reference<DD><CODE>errorMessageTemplate</CODE> - a template for the exception message should the
+ check fail. The message is formed by replacing each <code>%s</code>
+ placeholder in the template with an argument. These are matched by
+ position - the first <code>%s</code> gets <code>errorMessageArgs[0]</code>, etc.
+ Unmatched arguments will be appended to the formatted message in square
+ braces. Unmatched placeholders will be left as-is.<DD><CODE>errorMessageArgs</CODE> - the arguments to be substituted into the message
+ template. Arguments are converted to strings using
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true#valueOf(java.lang.Object)" title="class or interface in java.lang"><CODE>String.valueOf(Object)</CODE></A>.
+<DT><B>Returns:</B><DD>the non-null reference that was validated
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>reference</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="checkElementIndex(int, int)"><!-- --></A><H3>
+checkElementIndex</H3>
+<PRE>
+public static int <B>checkElementIndex</B>(int&nbsp;index,
+ int&nbsp;size)</PRE>
+<DL>
+<DD>Ensures that <code>index</code> specifies a valid <i>element</i> in an array,
+ list or string of size <code>size</code>. An element index may range from zero,
+ inclusive, to <code>size</code>, exclusive.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - a user-supplied index identifying an element of an array, list
+ or string<DD><CODE>size</CODE> - the size of that array, list or string
+<DT><B>Returns:</B><DD>the value of <code>index</code>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang">IndexOutOfBoundsException</A></CODE> - if <code>index</code> is negative or is not
+ less than <code>size</code>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>size</code> is negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="checkElementIndex(int, int, java.lang.String)"><!-- --></A><H3>
+checkElementIndex</H3>
+<PRE>
+public static int <B>checkElementIndex</B>(int&nbsp;index,
+ int&nbsp;size,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;desc)</PRE>
+<DL>
+<DD>Ensures that <code>index</code> specifies a valid <i>element</i> in an array,
+ list or string of size <code>size</code>. An element index may range from zero,
+ inclusive, to <code>size</code>, exclusive.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - a user-supplied index identifying an element of an array, list
+ or string<DD><CODE>size</CODE> - the size of that array, list or string<DD><CODE>desc</CODE> - the text to use to describe this index in an error message
+<DT><B>Returns:</B><DD>the value of <code>index</code>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang">IndexOutOfBoundsException</A></CODE> - if <code>index</code> is negative or is not
+ less than <code>size</code>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>size</code> is negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="checkPositionIndex(int, int)"><!-- --></A><H3>
+checkPositionIndex</H3>
+<PRE>
+public static int <B>checkPositionIndex</B>(int&nbsp;index,
+ int&nbsp;size)</PRE>
+<DL>
+<DD>Ensures that <code>index</code> specifies a valid <i>position</i> in an array,
+ list or string of size <code>size</code>. A position index may range from zero
+ to <code>size</code>, inclusive.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - a user-supplied index identifying a position in an array, list
+ or string<DD><CODE>size</CODE> - the size of that array, list or string
+<DT><B>Returns:</B><DD>the value of <code>index</code>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang">IndexOutOfBoundsException</A></CODE> - if <code>index</code> is negative or is
+ greater than <code>size</code>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>size</code> is negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="checkPositionIndex(int, int, java.lang.String)"><!-- --></A><H3>
+checkPositionIndex</H3>
+<PRE>
+public static int <B>checkPositionIndex</B>(int&nbsp;index,
+ int&nbsp;size,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;desc)</PRE>
+<DL>
+<DD>Ensures that <code>index</code> specifies a valid <i>position</i> in an array,
+ list or string of size <code>size</code>. A position index may range from zero
+ to <code>size</code>, inclusive.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - a user-supplied index identifying a position in an array, list
+ or string<DD><CODE>size</CODE> - the size of that array, list or string<DD><CODE>desc</CODE> - the text to use to describe this index in an error message
+<DT><B>Returns:</B><DD>the value of <code>index</code>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang">IndexOutOfBoundsException</A></CODE> - if <code>index</code> is negative or is
+ greater than <code>size</code>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>size</code> is negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="checkPositionIndexes(int, int, int)"><!-- --></A><H3>
+checkPositionIndexes</H3>
+<PRE>
+public static void <B>checkPositionIndexes</B>(int&nbsp;start,
+ int&nbsp;end,
+ int&nbsp;size)</PRE>
+<DL>
+<DD>Ensures that <code>start</code> and <code>end</code> specify a valid <i>positions</i>
+ in an array, list or string of size <code>size</code>, and are in order. A
+ position index may range from zero to <code>size</code>, inclusive.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>start</CODE> - a user-supplied index identifying a starting position in an
+ array, list or string<DD><CODE>end</CODE> - a user-supplied index identifying a ending position in an array,
+ list or string<DD><CODE>size</CODE> - the size of that array, list or string
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang">IndexOutOfBoundsException</A></CODE> - if either index is negative or is
+ greater than <code>size</code>, or if <code>end</code> is less than <code>start</code>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>size</code> is negative</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Preconditions.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/Objects.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/Preconditions.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Preconditions.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/Predicate.html b/javadoc/com/google/common/base/Predicate.html
new file mode 100644
index 0000000..823c924
--- /dev/null
+++ b/javadoc/com/google/common/base/Predicate.html
@@ -0,0 +1,260 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:14 PST 2009 -->
+<TITLE>
+Predicate (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Predicate (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Predicate.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/Preconditions.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/Predicates.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/Predicate.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Predicate.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.base</FONT>
+<BR>
+Interface Predicate&lt;T&gt;</H2>
+<HR>
+<DL>
+<DT><PRE>public interface <B>Predicate&lt;T&gt;</B></DL>
+</PRE>
+
+<P>
+Determines a true or false value for a given input. For example, a
+ <code>RegexPredicate</code> might implement <code>Predicate&lt;String&gt;</code>, and return
+ <code>true</code> for any string that matches its given regular expression.
+
+ <p>Implementations which may cause side effects upon evaluation are strongly
+ encouraged to state this fact clearly in their API documentation.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicate.html#apply(T)">apply</A></B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="type parameter in Predicate">T</A>&nbsp;input)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Applies this predicate to the given object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicate.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;obj)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indicates whether some other object is equal to this <code>Predicate</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="apply(java.lang.Object)"><!-- --></A><A NAME="apply(T)"><!-- --></A><H3>
+apply</H3>
+<PRE>
+boolean <B>apply</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="type parameter in Predicate">T</A>&nbsp;input)</PRE>
+<DL>
+<DD>Applies this predicate to the given object.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>input</CODE> - the input that the predicate should act on
+<DT><B>Returns:</B><DD>the value of this predicate when applied to the input <code>t</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;obj)</PRE>
+<DL>
+<DD>Indicates whether some other object is equal to this <code>Predicate</code>.
+ This method can return <code>true</code> <i>only</i> if the specified object is
+ also a <code>Predicate</code> and, for every input object <code>input</code>, it
+ returns exactly the same value. Thus, <code>predicate1.equals(predicate2)</code>
+ implies that either <code>predicate1.apply(input)</code> and
+ <code>predicate2.apply(input)</code> are both <code>true</code> or both
+ <code>false</code>.
+
+ <p>Note that it is always safe <i>not</i> to override
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>obj</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Predicate.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/Preconditions.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/Predicates.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/Predicate.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Predicate.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/Predicates.html b/javadoc/com/google/common/base/Predicates.html
new file mode 100644
index 0000000..8ef73c6
--- /dev/null
+++ b/javadoc/com/google/common/base/Predicates.html
@@ -0,0 +1,684 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:14 PST 2009 -->
+<TITLE>
+Predicates (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Predicates (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Predicates.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/Predicates.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Predicates.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.base</FONT>
+<BR>
+Class Predicates</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.Predicates</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public final class <B>Predicates</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+Contains static factory methods for creating <code>Predicate</code> instances.
+
+ <p>All methods returns serializable predicates as long as they're given
+ serializable parameters.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#alwaysFalse()">alwaysFalse</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that always evaluates to <code>false</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#alwaysTrue()">alwaysTrue</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that always evaluates to <code>true</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#and(java.lang.Iterable)">and</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&gt;&nbsp;components)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if each of its
+ components evaluates to <code>true</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#and(com.google.common.base.Predicate...)">and</A></B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;...&nbsp;components)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if each of its
+ components evaluates to <code>true</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#and(com.google.common.base.Predicate, com.google.common.base.Predicate)">and</A></B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;first,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;second)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if both of its
+ components evaluate to <code>true</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;A,B&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;A&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#compose(com.google.common.base.Predicate, com.google.common.base.Function)">compose</A></B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;B&gt;&nbsp;predicate,
+ <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,? extends B&gt;&nbsp;function)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the composition of a function and a predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#equalTo(T)">equalTo</A></B>(T&nbsp;target)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the object being
+ tested <code>equals()</code> the given target or both are null.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#in(java.util.Collection)">in</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends T&gt;&nbsp;target)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the object reference
+ being tested is a member of the given collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#instanceOf(java.lang.Class)">instanceOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;?&gt;&nbsp;clazz)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the object being
+ tested is an instance of the given class.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#isNull()">isNull</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the object reference
+ being tested is null.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#not(com.google.common.base.Predicate)">not</A></B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the given predicate
+ evaluates to <code>false</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#notNull()">notNull</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the object reference
+ being tested is not null.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#or(java.lang.Iterable)">or</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&gt;&nbsp;components)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if any one of its
+ components evaluates to <code>true</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#or(com.google.common.base.Predicate...)">or</A></B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;...&nbsp;components)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if any one of its
+ components evaluates to <code>true</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#or(com.google.common.base.Predicate, com.google.common.base.Predicate)">or</A></B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;first,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;second)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if either of its
+ components evaluates to <code>true</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="alwaysTrue()"><!-- --></A><H3>
+alwaysTrue</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt; <B>alwaysTrue</B>()</PRE>
+<DL>
+<DD>Returns a predicate that always evaluates to <code>true</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="alwaysFalse()"><!-- --></A><H3>
+alwaysFalse</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt; <B>alwaysFalse</B>()</PRE>
+<DL>
+<DD>Returns a predicate that always evaluates to <code>false</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isNull()"><!-- --></A><H3>
+isNull</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt; <B>isNull</B>()</PRE>
+<DL>
+<DD>Returns a predicate that evaluates to <code>true</code> if the object reference
+ being tested is null.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="notNull()"><!-- --></A><H3>
+notNull</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt; <B>notNull</B>()</PRE>
+<DL>
+<DD>Returns a predicate that evaluates to <code>true</code> if the object reference
+ being tested is not null.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="not(com.google.common.base.Predicate)"><!-- --></A><H3>
+not</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt; <B>not</B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;&nbsp;predicate)</PRE>
+<DL>
+<DD>Returns a predicate that evaluates to <code>true</code> if the given predicate
+ evaluates to <code>false</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="and(java.lang.Iterable)"><!-- --></A><H3>
+and</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt; <B>and</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&gt;&nbsp;components)</PRE>
+<DL>
+<DD>Returns a predicate that evaluates to <code>true</code> if each of its
+ components evaluates to <code>true</code>. The components are evaluated in
+ order, and evaluation will be "short-circuited" as soon as a false
+ predicate is found. It defensively copies the iterable passed in, so future
+ changes to it won't alter the behavior of this predicate. If <code>components</code> is empty, the returned predicate will always evaluate to <code>true</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="and(com.google.common.base.Predicate...)"><!-- --></A><H3>
+and</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt; <B>and</B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;...&nbsp;components)</PRE>
+<DL>
+<DD>Returns a predicate that evaluates to <code>true</code> if each of its
+ components evaluates to <code>true</code>. The components are evaluated in
+ order, and evaluation will be "short-circuited" as soon as a false
+ predicate is found. It defensively copies the array passed in, so future
+ changes to it won't alter the behavior of this predicate. If <code>components</code> is empty, the returned predicate will always evaluate to <code>true</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="and(com.google.common.base.Predicate, com.google.common.base.Predicate)"><!-- --></A><H3>
+and</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt; <B>and</B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;first,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;second)</PRE>
+<DL>
+<DD>Returns a predicate that evaluates to <code>true</code> if both of its
+ components evaluate to <code>true</code>. The components are evaluated in
+ order, and evaluation will be "short-circuited" as soon as a false
+ predicate is found.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="or(java.lang.Iterable)"><!-- --></A><H3>
+or</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt; <B>or</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&gt;&nbsp;components)</PRE>
+<DL>
+<DD>Returns a predicate that evaluates to <code>true</code> if any one of its
+ components evaluates to <code>true</code>. The components are evaluated in
+ order, and evaluation will be "short-circuited" as soon as as soon as a
+ true predicate is found. It defensively copies the iterable passed in, so
+ future changes to it won't alter the behavior of this predicate. If <code>components</code> is empty, the returned predicate will always evaluate to <code>false</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="or(com.google.common.base.Predicate...)"><!-- --></A><H3>
+or</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt; <B>or</B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;...&nbsp;components)</PRE>
+<DL>
+<DD>Returns a predicate that evaluates to <code>true</code> if any one of its
+ components evaluates to <code>true</code>. The components are evaluated in
+ order, and evaluation will be "short-circuited" as soon as as soon as a
+ true predicate is found. It defensively copies the array passed in, so
+ future changes to it won't alter the behavior of this predicate. If <code>components</code> is empty, the returned predicate will always evaluate to <code>false</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="or(com.google.common.base.Predicate, com.google.common.base.Predicate)"><!-- --></A><H3>
+or</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt; <B>or</B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;first,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;second)</PRE>
+<DL>
+<DD>Returns a predicate that evaluates to <code>true</code> if either of its
+ components evaluates to <code>true</code>. The components are evaluated in
+ order, and evaluation will be "short-circuited" as soon as as soon as a
+ true predicate is found.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equalTo(java.lang.Object)"><!-- --></A><A NAME="equalTo(T)"><!-- --></A><H3>
+equalTo</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt; <B>equalTo</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ T&nbsp;target)</PRE>
+<DL>
+<DD>Returns a predicate that evaluates to <code>true</code> if the object being
+ tested <code>equals()</code> the given target or both are null.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="instanceOf(java.lang.Class)"><!-- --></A><H3>
+instanceOf</H3>
+<PRE>
+public static <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&gt; <B>instanceOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;?&gt;&nbsp;clazz)</PRE>
+<DL>
+<DD>Returns a predicate that evaluates to <code>true</code> if the object being
+ tested is an instance of the given class. If the object being tested
+ is <code>null</code> this predicate evaluates to <code>false</code>.
+
+ <p>If you want to filter an <code>Iterable</code> to narrow its type, consider
+ using <A HREF="../../../../com/google/common/collect/Iterables.html#filter(java.lang.Iterable, java.lang.Class)"><CODE>Iterables.filter(Iterable, Class)</CODE></A>
+ in preference.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="in(java.util.Collection)"><!-- --></A><H3>
+in</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt; <B>in</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends T&gt;&nbsp;target)</PRE>
+<DL>
+<DD>Returns a predicate that evaluates to <code>true</code> if the object reference
+ being tested is a member of the given collection. It does not defensively
+ copy the collection passed in, so future changes to it will alter the
+ behavior of the predicate.
+
+ This method can technically accept any Collection<?>, but using a typed
+ collection helps prevent bugs. This approach doesn't block any potential
+ users since it is always possible to use <code>Predicates.&lt;Object&gt;in()</code>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>target</CODE> - the collection that may contain the function input</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="compose(com.google.common.base.Predicate, com.google.common.base.Function)"><!-- --></A><H3>
+compose</H3>
+<PRE>
+public static &lt;A,B&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;A&gt; <B>compose</B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;B&gt;&nbsp;predicate,
+ <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,? extends B&gt;&nbsp;function)</PRE>
+<DL>
+<DD>Returns the composition of a function and a predicate. For every <code>x</code>,
+ the generated predicate returns <code>predicate(function(x))</code>.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the composition of the provided function and predicate</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Predicates.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/Predicates.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Predicates.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/Supplier.html b/javadoc/com/google/common/base/Supplier.html
new file mode 100644
index 0000000..b348d3c
--- /dev/null
+++ b/javadoc/com/google/common/base/Supplier.html
@@ -0,0 +1,220 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:14 PST 2009 -->
+<TITLE>
+Supplier (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Supplier (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Supplier.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/Predicates.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/Suppliers.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/Supplier.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Supplier.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.base</FONT>
+<BR>
+Interface Supplier&lt;T&gt;</H2>
+<HR>
+<DL>
+<DT><PRE>public interface <B>Supplier&lt;T&gt;</B></DL>
+</PRE>
+
+<P>
+A class that can supply objects of a single type. Semantically, this could
+ be a factory, generator, builder, closure, or something else entirely. No
+ guarantees are implied by this interface.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Harry Heymann</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/base/Supplier.html" title="type parameter in Supplier">T</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Supplier.html#get()">get</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves an instance of the appropriate type.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="get()"><!-- --></A><H3>
+get</H3>
+<PRE>
+<A HREF="../../../../com/google/common/base/Supplier.html" title="type parameter in Supplier">T</A> <B>get</B>()</PRE>
+<DL>
+<DD>Retrieves an instance of the appropriate type. The returned object may or
+ may not be a new instance, depending on the implementation.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>an instance of the appropriate type</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Supplier.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/Predicates.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/base/Suppliers.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/Supplier.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Supplier.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/Suppliers.html b/javadoc/com/google/common/base/Suppliers.html
new file mode 100644
index 0000000..9700952
--- /dev/null
+++ b/javadoc/com/google/common/base/Suppliers.html
@@ -0,0 +1,341 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:14 PST 2009 -->
+<TITLE>
+Suppliers (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Suppliers (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Suppliers.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/Suppliers.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Suppliers.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.base</FONT>
+<BR>
+Class Suppliers</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.Suppliers</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public final class <B>Suppliers</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+Useful suppliers.
+
+ <p>All methods return serializable suppliers as long as they're given
+ serializable parameters.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Laurence Gonsalves, Harry Heymann</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;F,T&gt; <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Suppliers.html#compose(com.google.common.base.Function, com.google.common.base.Supplier)">compose</A></B>(<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,T&gt;&nbsp;function,
+ <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;F&gt;&nbsp;first)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new supplier which is the composition of the provided function
+ and supplier.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Suppliers.html#memoize(com.google.common.base.Supplier)">memoize</A></B>(<A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;&nbsp;delegate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a supplier which caches the instance retrieved during the first
+ call to <code>get()</code> and returns that value on subsequent calls to
+ <code>get()</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Suppliers.html#ofInstance(T)">ofInstance</A></B>(T&nbsp;instance)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a supplier that always supplies <code>instance</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/base/Suppliers.html#synchronizedSupplier(com.google.common.base.Supplier)">synchronizedSupplier</A></B>(<A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;&nbsp;delegate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a supplier whose <code>get()</code> method synchronizes on
+ <code>delegate</code> before calling it, making it thread-safe.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="compose(com.google.common.base.Function, com.google.common.base.Supplier)"><!-- --></A><H3>
+compose</H3>
+<PRE>
+public static &lt;F,T&gt; <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt; <B>compose</B>(<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,T&gt;&nbsp;function,
+ <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;F&gt;&nbsp;first)</PRE>
+<DL>
+<DD>Returns a new supplier which is the composition of the provided function
+ and supplier. In other words, the new supplier's value will be computed by
+ retrieving the value from <code>first</code>, and then applying
+ <code>function</code> to that value. Note that the resulting supplier will not
+ call <code>first</code> or invoke <code>function</code> until it is called.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="memoize(com.google.common.base.Supplier)"><!-- --></A><H3>
+memoize</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt; <B>memoize</B>(<A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;&nbsp;delegate)</PRE>
+<DL>
+<DD>Returns a supplier which caches the instance retrieved during the first
+ call to <code>get()</code> and returns that value on subsequent calls to
+ <code>get()</code>. See:
+ <a href="http://en.wikipedia.org/wiki/Memoization">memoization</a>
+
+ <p>The returned supplier is thread-safe. The supplier's serialized form
+ does not contain the cached value, which will be recalculated when <code>get()</code> is called on the reserialized instance.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="ofInstance(java.lang.Object)"><!-- --></A><A NAME="ofInstance(T)"><!-- --></A><H3>
+ofInstance</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt; <B>ofInstance</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ T&nbsp;instance)</PRE>
+<DL>
+<DD>Returns a supplier that always supplies <code>instance</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="synchronizedSupplier(com.google.common.base.Supplier)"><!-- --></A><H3>
+synchronizedSupplier</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt; <B>synchronizedSupplier</B>(<A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;&nbsp;delegate)</PRE>
+<DL>
+<DD>Returns a supplier whose <code>get()</code> method synchronizes on
+ <code>delegate</code> before calling it, making it thread-safe.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Suppliers.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/Suppliers.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Suppliers.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/class-use/FinalizablePhantomReference.html b/javadoc/com/google/common/base/class-use/FinalizablePhantomReference.html
new file mode 100644
index 0000000..c2ff166
--- /dev/null
+++ b/javadoc/com/google/common/base/class-use/FinalizablePhantomReference.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.base.FinalizablePhantomReference (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.base.FinalizablePhantomReference (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-useFinalizablePhantomReference.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FinalizablePhantomReference.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.base.FinalizablePhantomReference</B></H2>
+</CENTER>
+No usage of com.google.common.base.FinalizablePhantomReference
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-useFinalizablePhantomReference.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FinalizablePhantomReference.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/class-use/FinalizableReference.html b/javadoc/com/google/common/base/class-use/FinalizableReference.html
new file mode 100644
index 0000000..8d15c8e
--- /dev/null
+++ b/javadoc/com/google/common/base/class-use/FinalizableReference.html
@@ -0,0 +1,200 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Interface com.google.common.base.FinalizableReference (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Interface com.google.common.base.FinalizableReference (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-useFinalizableReference.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FinalizableReference.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.google.common.base.FinalizableReference</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
+<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.base"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A> in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> that implement <A HREF="../../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base">FinalizablePhantomReference&lt;T&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Phantom reference with a <code>finalizeReferent()</code> method which a
+ background thread invokes after the garbage collector reclaims the
+ referent.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base">FinalizableSoftReference&lt;T&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Soft reference with a <code>finalizeReferent()</code> method which a background
+ thread invokes after the garbage collector reclaims the referent.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base">FinalizableWeakReference&lt;T&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Weak reference with a <code>finalizeReferent()</code> method which a background
+ thread invokes after the garbage collector reclaims the referent.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-useFinalizableReference.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FinalizableReference.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/class-use/FinalizableReferenceQueue.html b/javadoc/com/google/common/base/class-use/FinalizableReferenceQueue.html
new file mode 100644
index 0000000..ea77cf4
--- /dev/null
+++ b/javadoc/com/google/common/base/class-use/FinalizableReferenceQueue.html
@@ -0,0 +1,193 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.base.FinalizableReferenceQueue (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.base.FinalizableReferenceQueue (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-useFinalizableReferenceQueue.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FinalizableReferenceQueue.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.base.FinalizableReferenceQueue</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
+<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.base"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A> in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Constructors in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> with parameters of type <A HREF="../../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/google/common/base/FinalizablePhantomReference.html#FinalizablePhantomReference(T, com.google.common.base.FinalizableReferenceQueue)">FinalizablePhantomReference</A></B>(<A HREF="../../../../../com/google/common/base/FinalizablePhantomReference.html" title="type parameter in FinalizablePhantomReference">T</A>&nbsp;referent,
+ <A HREF="../../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A>&nbsp;queue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new finalizable phantom reference.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/google/common/base/FinalizableSoftReference.html#FinalizableSoftReference(T, com.google.common.base.FinalizableReferenceQueue)">FinalizableSoftReference</A></B>(<A HREF="../../../../../com/google/common/base/FinalizableSoftReference.html" title="type parameter in FinalizableSoftReference">T</A>&nbsp;referent,
+ <A HREF="../../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A>&nbsp;queue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new finalizable soft reference.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/google/common/base/FinalizableWeakReference.html#FinalizableWeakReference(T, com.google.common.base.FinalizableReferenceQueue)">FinalizableWeakReference</A></B>(<A HREF="../../../../../com/google/common/base/FinalizableWeakReference.html" title="type parameter in FinalizableWeakReference">T</A>&nbsp;referent,
+ <A HREF="../../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A>&nbsp;queue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new finalizable weak reference.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-useFinalizableReferenceQueue.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FinalizableReferenceQueue.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/class-use/FinalizableSoftReference.html b/javadoc/com/google/common/base/class-use/FinalizableSoftReference.html
new file mode 100644
index 0000000..9b3595a
--- /dev/null
+++ b/javadoc/com/google/common/base/class-use/FinalizableSoftReference.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.base.FinalizableSoftReference (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.base.FinalizableSoftReference (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-useFinalizableSoftReference.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FinalizableSoftReference.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.base.FinalizableSoftReference</B></H2>
+</CENTER>
+No usage of com.google.common.base.FinalizableSoftReference
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-useFinalizableSoftReference.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FinalizableSoftReference.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/class-use/FinalizableWeakReference.html b/javadoc/com/google/common/base/class-use/FinalizableWeakReference.html
new file mode 100644
index 0000000..6f9a19c
--- /dev/null
+++ b/javadoc/com/google/common/base/class-use/FinalizableWeakReference.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.base.FinalizableWeakReference (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.base.FinalizableWeakReference (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-useFinalizableWeakReference.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FinalizableWeakReference.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.base.FinalizableWeakReference</B></H2>
+</CENTER>
+No usage of com.google.common.base.FinalizableWeakReference
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-useFinalizableWeakReference.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FinalizableWeakReference.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Function.html b/javadoc/com/google/common/base/class-use/Function.html
new file mode 100644
index 0000000..7e3dfce
--- /dev/null
+++ b/javadoc/com/google/common/base/class-use/Function.html
@@ -0,0 +1,516 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Interface com.google.common.base.Function (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Interface com.google.common.base.Function (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-useFunction.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Function.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.google.common.base.Function</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
+<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.base"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A> in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> that return <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;A,B,C&gt; <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,C&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Functions.</B><B><A HREF="../../../../../com/google/common/base/Functions.html#compose(com.google.common.base.Function, com.google.common.base.Function)">compose</A></B>(<A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;B,C&gt;&nbsp;g,
+ <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,? extends B&gt;&nbsp;f)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the composition of two functions.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>,E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Functions.</B><B><A HREF="../../../../../com/google/common/base/Functions.html#constant(E)">constant</A></B>(E&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a function that returns <code>value</code> for any input.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Functions.</B><B><A HREF="../../../../../com/google/common/base/Functions.html#forMap(java.util.Map, V)">forMap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,? extends V&gt;&nbsp;map,
+ V&nbsp;defaultValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a function which performs a map lookup with a default value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Functions.</B><B><A HREF="../../../../../com/google/common/base/Functions.html#forMap(java.util.Map)">forMap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a function which performs a map lookup.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;T,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</A>&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Functions.</B><B><A HREF="../../../../../com/google/common/base/Functions.html#forPredicate(com.google.common.base.Predicate)">forPredicate</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a function that returns the same boolean output as the given
+ predicate for all inputs.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;E,E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Functions.</B><B><A HREF="../../../../../com/google/common/base/Functions.html#identity()">identity</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the identity function.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>Functions.</B><B><A HREF="../../../../../com/google/common/base/Functions.html#toStringFunction()">toStringFunction</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a function that calls <code>toString()</code> on its argument.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> with parameters of type <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;F,T&gt; <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Suppliers.</B><B><A HREF="../../../../../com/google/common/base/Suppliers.html#compose(com.google.common.base.Function, com.google.common.base.Supplier)">compose</A></B>(<A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,T&gt;&nbsp;function,
+ <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;F&gt;&nbsp;first)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new supplier which is the composition of the provided function
+ and supplier.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;A,B,C&gt; <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,C&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Functions.</B><B><A HREF="../../../../../com/google/common/base/Functions.html#compose(com.google.common.base.Function, com.google.common.base.Function)">compose</A></B>(<A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;B,C&gt;&nbsp;g,
+ <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,? extends B&gt;&nbsp;f)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the composition of two functions.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;A,B,C&gt; <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,C&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Functions.</B><B><A HREF="../../../../../com/google/common/base/Functions.html#compose(com.google.common.base.Function, com.google.common.base.Function)">compose</A></B>(<A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;B,C&gt;&nbsp;g,
+ <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,? extends B&gt;&nbsp;f)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the composition of two functions.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;A,B&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;A&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#compose(com.google.common.base.Predicate, com.google.common.base.Function)">compose</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;B&gt;&nbsp;predicate,
+ <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,? extends B&gt;&nbsp;function)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the composition of a function and a predicate.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with parameters of type <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#index(java.lang.Iterable, com.google.common.base.Function)">index</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;V&gt;&nbsp;values,
+ <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V,K&gt;&nbsp;keyFunction)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an index <code>ImmutableMultimap</code> that contains the results of
+ applying a specified function to each item in an <code>Iterable</code> of
+ values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>MapMaker.</B><B><A HREF="../../../../../com/google/common/collect/MapMaker.html#makeComputingMap(com.google.common.base.Function)">makeComputingMap</A></B>(<A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super K,? extends V&gt;&nbsp;computingFunction)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Builds a map that supports atomic, on-demand computation of values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;F&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;F&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#onResultOf(com.google.common.base.Function)">onResultOf</A></B>(<A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;F,? extends <A HREF="../../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;&nbsp;function)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new ordering on <code>F</code> which orders elements by first applying
+ a function to them, then comparing those results using <code>this</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;F,T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Collections2.</B><B><A HREF="../../../../../com/google/common/collect/Collections2.html#transform(java.util.Collection, com.google.common.base.Function)">transform</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;F&gt;&nbsp;fromCollection,
+ <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,T&gt;&nbsp;function)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection that applies <code>function</code> to each element of
+ <code>fromCollection</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;F,T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Iterables.</B><B><A HREF="../../../../../com/google/common/collect/Iterables.html#transform(java.lang.Iterable, com.google.common.base.Function)">transform</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;F&gt;&nbsp;fromIterable,
+ <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,? extends T&gt;&nbsp;function)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterable that applies <code>function</code> to each element of <code>fromIterable</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;F,T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#transform(java.util.Iterator, com.google.common.base.Function)">transform</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;F&gt;&nbsp;fromIterator,
+ <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,? extends T&gt;&nbsp;function)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator that applies <code>function</code> to each element of <code>fromIterator</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;F,T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Lists.</B><B><A HREF="../../../../../com/google/common/collect/Lists.html#transform(java.util.List, com.google.common.base.Function)">transform</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;F&gt;&nbsp;fromList,
+ <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,? extends T&gt;&nbsp;function)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a list that applies <code>function</code> to each element of <code>fromList</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V1,V2&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V2&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Maps.</B><B><A HREF="../../../../../com/google/common/collect/Maps.html#transformValues(java.util.Map, com.google.common.base.Function)">transformValues</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V1&gt;&nbsp;fromMap,
+ <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V1,V2&gt;&nbsp;function)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of a map where each value is transformed by a function.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Maps.</B><B><A HREF="../../../../../com/google/common/collect/Maps.html#uniqueIndex(java.lang.Iterable, com.google.common.base.Function)">uniqueIndex</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;V&gt;&nbsp;values,
+ <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V,K&gt;&nbsp;keyFunction)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map for which the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util"><CODE>Map.values()</CODE></A> are the given
+ elements in the given order, and each key is the product of invoking a
+ supplied function on its corresponding value.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-useFunction.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Function.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Functions.html b/javadoc/com/google/common/base/class-use/Functions.html
new file mode 100644
index 0000000..df0b3a3
--- /dev/null
+++ b/javadoc/com/google/common/base/class-use/Functions.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.base.Functions (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.base.Functions (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/Functions.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-useFunctions.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Functions.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.base.Functions</B></H2>
+</CENTER>
+No usage of com.google.common.base.Functions
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/Functions.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-useFunctions.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Functions.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Joiner.MapJoiner.html b/javadoc/com/google/common/base/class-use/Joiner.MapJoiner.html
new file mode 100644
index 0000000..9f76a22
--- /dev/null
+++ b/javadoc/com/google/common/base/class-use/Joiner.MapJoiner.html
@@ -0,0 +1,191 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.base.Joiner.MapJoiner (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.base.Joiner.MapJoiner (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-useJoiner.MapJoiner.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Joiner.MapJoiner.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.base.Joiner.MapJoiner</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
+<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.base"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A> in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> that return <A HREF="../../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A></CODE></FONT></TD>
+<TD><CODE><B>Joiner.MapJoiner.</B><B><A HREF="../../../../../com/google/common/base/Joiner.MapJoiner.html#useForNull(java.lang.String)">useForNull</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;nullText)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map joiner with the same behavior as this one, except
+ automatically substituting <code>nullText</code> for any provided null keys or
+ values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A></CODE></FONT></TD>
+<TD><CODE><B>Joiner.</B><B><A HREF="../../../../../com/google/common/base/Joiner.html#withKeyValueSeparator(java.lang.String)">withKeyValueSeparator</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;keyValueSeparator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <code>MapJoiner</code> using the given key-value separator, and the
+ same configuration as this <code>Joiner</code> otherwise.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-useJoiner.MapJoiner.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Joiner.MapJoiner.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Joiner.html b/javadoc/com/google/common/base/class-use/Joiner.html
new file mode 100644
index 0000000..731cf19
--- /dev/null
+++ b/javadoc/com/google/common/base/class-use/Joiner.html
@@ -0,0 +1,208 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.base.Joiner (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.base.Joiner (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-useJoiner.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Joiner.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.base.Joiner</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
+<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.base"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A> in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> that return <A HREF="../../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A></CODE></FONT></TD>
+<TD><CODE><B>Joiner.</B><B><A HREF="../../../../../com/google/common/base/Joiner.html#on(char)">on</A></B>(char&nbsp;separator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a joiner which automatically places <code>separator</code> between
+ consecutive elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A></CODE></FONT></TD>
+<TD><CODE><B>Joiner.</B><B><A HREF="../../../../../com/google/common/base/Joiner.html#on(java.lang.String)">on</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a joiner which automatically places <code>separator</code> between
+ consecutive elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A></CODE></FONT></TD>
+<TD><CODE><B>Joiner.</B><B><A HREF="../../../../../com/google/common/base/Joiner.html#skipNulls()">skipNulls</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a joiner with the same behavior as this joiner, except
+ automatically skipping over any provided null elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A></CODE></FONT></TD>
+<TD><CODE><B>Joiner.</B><B><A HREF="../../../../../com/google/common/base/Joiner.html#useForNull(java.lang.String)">useForNull</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;nullText)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a joiner with the same behavior as this one, except automatically
+ substituting <code>nullText</code> for any provided null elements.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-useJoiner.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Joiner.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Objects.html b/javadoc/com/google/common/base/class-use/Objects.html
new file mode 100644
index 0000000..57043c8
--- /dev/null
+++ b/javadoc/com/google/common/base/class-use/Objects.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.base.Objects (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.base.Objects (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/Objects.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-useObjects.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Objects.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.base.Objects</B></H2>
+</CENTER>
+No usage of com.google.common.base.Objects
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/Objects.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-useObjects.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Objects.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Preconditions.html b/javadoc/com/google/common/base/class-use/Preconditions.html
new file mode 100644
index 0000000..f31b219
--- /dev/null
+++ b/javadoc/com/google/common/base/class-use/Preconditions.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.base.Preconditions (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.base.Preconditions (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/Preconditions.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-usePreconditions.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Preconditions.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.base.Preconditions</B></H2>
+</CENTER>
+No usage of com.google.common.base.Preconditions
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/Preconditions.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-usePreconditions.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Preconditions.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Predicate.html b/javadoc/com/google/common/base/class-use/Predicate.html
new file mode 100644
index 0000000..56cf222
--- /dev/null
+++ b/javadoc/com/google/common/base/class-use/Predicate.html
@@ -0,0 +1,840 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Interface com.google.common.base.Predicate (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Interface com.google.common.base.Predicate (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-usePredicate.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Predicate.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.google.common.base.Predicate</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
+<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.base"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A> in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> that return <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#alwaysFalse()">alwaysFalse</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that always evaluates to <code>false</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#alwaysTrue()">alwaysTrue</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that always evaluates to <code>true</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#and(java.lang.Iterable)">and</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&gt;&nbsp;components)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if each of its
+ components evaluates to <code>true</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#and(com.google.common.base.Predicate...)">and</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;...&nbsp;components)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if each of its
+ components evaluates to <code>true</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#and(com.google.common.base.Predicate, com.google.common.base.Predicate)">and</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;first,
+ <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;second)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if both of its
+ components evaluate to <code>true</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;A,B&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;A&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#compose(com.google.common.base.Predicate, com.google.common.base.Function)">compose</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;B&gt;&nbsp;predicate,
+ <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,? extends B&gt;&nbsp;function)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the composition of a function and a predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#equalTo(T)">equalTo</A></B>(T&nbsp;target)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the object being
+ tested <code>equals()</code> the given target or both are null.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#in(java.util.Collection)">in</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends T&gt;&nbsp;target)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the object reference
+ being tested is a member of the given collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#instanceOf(java.lang.Class)">instanceOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;?&gt;&nbsp;clazz)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the object being
+ tested is an instance of the given class.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#isNull()">isNull</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the object reference
+ being tested is null.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#not(com.google.common.base.Predicate)">not</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the given predicate
+ evaluates to <code>false</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#notNull()">notNull</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the object reference
+ being tested is not null.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#or(java.lang.Iterable)">or</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&gt;&nbsp;components)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if any one of its
+ components evaluates to <code>true</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#or(com.google.common.base.Predicate...)">or</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;...&nbsp;components)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if any one of its
+ components evaluates to <code>true</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#or(com.google.common.base.Predicate, com.google.common.base.Predicate)">or</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;first,
+ <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;second)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if either of its
+ components evaluates to <code>true</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> with parameters of type <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#and(com.google.common.base.Predicate...)">and</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;...&nbsp;components)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if each of its
+ components evaluates to <code>true</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#and(com.google.common.base.Predicate, com.google.common.base.Predicate)">and</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;first,
+ <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;second)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if both of its
+ components evaluate to <code>true</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#and(com.google.common.base.Predicate, com.google.common.base.Predicate)">and</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;first,
+ <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;second)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if both of its
+ components evaluate to <code>true</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;A,B&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;A&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#compose(com.google.common.base.Predicate, com.google.common.base.Function)">compose</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;B&gt;&nbsp;predicate,
+ <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,? extends B&gt;&nbsp;function)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the composition of a function and a predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;T,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</A>&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Functions.</B><B><A HREF="../../../../../com/google/common/base/Functions.html#forPredicate(com.google.common.base.Predicate)">forPredicate</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a function that returns the same boolean output as the given
+ predicate for all inputs.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#not(com.google.common.base.Predicate)">not</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the given predicate
+ evaluates to <code>false</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#or(com.google.common.base.Predicate...)">or</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;...&nbsp;components)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if any one of its
+ components evaluates to <code>true</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#or(com.google.common.base.Predicate, com.google.common.base.Predicate)">or</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;first,
+ <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;second)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if either of its
+ components evaluates to <code>true</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#or(com.google.common.base.Predicate, com.google.common.base.Predicate)">or</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;first,
+ <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;second)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if either of its
+ components evaluates to <code>true</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Method parameters in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> with type arguments of type <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#and(java.lang.Iterable)">and</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&gt;&nbsp;components)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if each of its
+ components evaluates to <code>true</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#or(java.lang.Iterable)">or</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&gt;&nbsp;components)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if any one of its
+ components evaluates to <code>true</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with parameters of type <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; boolean</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Iterables.</B><B><A HREF="../../../../../com/google/common/collect/Iterables.html#all(java.lang.Iterable, com.google.common.base.Predicate)">all</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
+ <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if every element in <code>iterable</code> satisfies the
+ predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; boolean</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#all(java.util.Iterator, com.google.common.base.Predicate)">all</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
+ <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if every element returned by <code>iterator</code>
+ satisfies the given predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; boolean</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Iterables.</B><B><A HREF="../../../../../com/google/common/collect/Iterables.html#any(java.lang.Iterable, com.google.common.base.Predicate)">any</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
+ <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if one or more elements in <code>iterable</code> satisfy
+ the predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; boolean</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#any(java.util.Iterator, com.google.common.base.Predicate)">any</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
+ <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if one or more elements returned by <code>iterator</code>
+ satisfy the given predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Collections2.</B><B><A HREF="../../../../../com/google/common/collect/Collections2.html#filter(java.util.Collection, com.google.common.base.Predicate)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;&nbsp;unfiltered,
+ <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super E&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the elements of <code>unfiltered</code> that satisfy a predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Iterables.</B><B><A HREF="../../../../../com/google/common/collect/Iterables.html#filter(java.lang.Iterable, com.google.common.base.Predicate)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;unfiltered,
+ <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the elements of <code>unfiltered</code> that satisfy a predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#filter(java.util.Iterator, com.google.common.base.Predicate)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;unfiltered,
+ <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the elements of <code>unfiltered</code> that satisfy a predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Sets.</B><B><A HREF="../../../../../com/google/common/collect/Sets.html#filter(java.util.Set, com.google.common.base.Predicate)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;&nbsp;unfiltered,
+ <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super E&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the elements of <code>unfiltered</code> that satisfy a predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Maps.</B><B><A HREF="../../../../../com/google/common/collect/Maps.html#filterEntries(java.util.Map, com.google.common.base.Predicate)">filterEntries</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;unfiltered,
+ <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt;&nbsp;entryPredicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map containing the mappings in <code>unfiltered</code> that satisfy a
+ predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Maps.</B><B><A HREF="../../../../../com/google/common/collect/Maps.html#filterKeys(java.util.Map, com.google.common.base.Predicate)">filterKeys</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;unfiltered,
+ <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super K&gt;&nbsp;keyPredicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map containing the mappings in <code>unfiltered</code> whose keys
+ satisfy a predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Maps.</B><B><A HREF="../../../../../com/google/common/collect/Maps.html#filterValues(java.util.Map, com.google.common.base.Predicate)">filterValues</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;unfiltered,
+ <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super V&gt;&nbsp;valuePredicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map containing the mappings in <code>unfiltered</code> whose values
+ satisfy a predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Iterables.</B><B><A HREF="../../../../../com/google/common/collect/Iterables.html#find(java.lang.Iterable, com.google.common.base.Predicate)">find</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
+ <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the first element in <code>iterable</code> that satisfies the given
+ predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#find(java.util.Iterator, com.google.common.base.Predicate)">find</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
+ <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the first element in <code>iterator</code> that satisfies the given
+ predicate.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-usePredicate.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Predicate.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Predicates.html b/javadoc/com/google/common/base/class-use/Predicates.html
new file mode 100644
index 0000000..e78e9be
--- /dev/null
+++ b/javadoc/com/google/common/base/class-use/Predicates.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.base.Predicates (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.base.Predicates (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/Predicates.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-usePredicates.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Predicates.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.base.Predicates</B></H2>
+</CENTER>
+No usage of com.google.common.base.Predicates
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/Predicates.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-usePredicates.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Predicates.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Supplier.html b/javadoc/com/google/common/base/class-use/Supplier.html
new file mode 100644
index 0000000..9cf2dde
--- /dev/null
+++ b/javadoc/com/google/common/base/class-use/Supplier.html
@@ -0,0 +1,382 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Interface com.google.common.base.Supplier (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Interface com.google.common.base.Supplier (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-useSupplier.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Supplier.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.google.common.base.Supplier</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
+<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.base"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A> in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> that return <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;F,T&gt; <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Suppliers.</B><B><A HREF="../../../../../com/google/common/base/Suppliers.html#compose(com.google.common.base.Function, com.google.common.base.Supplier)">compose</A></B>(<A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,T&gt;&nbsp;function,
+ <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;F&gt;&nbsp;first)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new supplier which is the composition of the provided function
+ and supplier.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Suppliers.</B><B><A HREF="../../../../../com/google/common/base/Suppliers.html#memoize(com.google.common.base.Supplier)">memoize</A></B>(<A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;&nbsp;delegate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a supplier which caches the instance retrieved during the first
+ call to <code>get()</code> and returns that value on subsequent calls to
+ <code>get()</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Suppliers.</B><B><A HREF="../../../../../com/google/common/base/Suppliers.html#ofInstance(T)">ofInstance</A></B>(T&nbsp;instance)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a supplier that always supplies <code>instance</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Suppliers.</B><B><A HREF="../../../../../com/google/common/base/Suppliers.html#synchronizedSupplier(com.google.common.base.Supplier)">synchronizedSupplier</A></B>(<A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;&nbsp;delegate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a supplier whose <code>get()</code> method synchronizes on
+ <code>delegate</code> before calling it, making it thread-safe.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> with parameters of type <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;F,T&gt; <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Suppliers.</B><B><A HREF="../../../../../com/google/common/base/Suppliers.html#compose(com.google.common.base.Function, com.google.common.base.Supplier)">compose</A></B>(<A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,T&gt;&nbsp;function,
+ <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;F&gt;&nbsp;first)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new supplier which is the composition of the provided function
+ and supplier.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Suppliers.</B><B><A HREF="../../../../../com/google/common/base/Suppliers.html#memoize(com.google.common.base.Supplier)">memoize</A></B>(<A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;&nbsp;delegate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a supplier which caches the instance retrieved during the first
+ call to <code>get()</code> and returns that value on subsequent calls to
+ <code>get()</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Suppliers.</B><B><A HREF="../../../../../com/google/common/base/Suppliers.html#synchronizedSupplier(com.google.common.base.Supplier)">synchronizedSupplier</A></B>(<A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;&nbsp;delegate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a supplier whose <code>get()</code> method synchronizes on
+ <code>delegate</code> before calling it, making it thread-safe.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with parameters of type <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#newListMultimap(java.util.Map, com.google.common.base.Supplier)">newListMultimap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
+ <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ListMultimap</code> that uses the provided map and factory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#newMultimap(java.util.Map, com.google.common.base.Supplier)">newMultimap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
+ <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>Multimap</code> that uses the provided map and factory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#newSetMultimap(java.util.Map, com.google.common.base.Supplier)">newSetMultimap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
+ <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>SetMultimap</code> that uses the provided map and factory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#newSortedSetMultimap(java.util.Map, com.google.common.base.Supplier)">newSortedSetMultimap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
+ <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>SortedSetMultimap</code> that uses the provided map and
+ factory.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-useSupplier.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Supplier.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Suppliers.html b/javadoc/com/google/common/base/class-use/Suppliers.html
new file mode 100644
index 0000000..ad77637
--- /dev/null
+++ b/javadoc/com/google/common/base/class-use/Suppliers.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.base.Suppliers (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.base.Suppliers (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/Suppliers.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-useSuppliers.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Suppliers.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.base.Suppliers</B></H2>
+</CENTER>
+No usage of com.google.common.base.Suppliers
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/base/Suppliers.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/base//class-useSuppliers.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Suppliers.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/package-frame.html b/javadoc/com/google/common/base/package-frame.html
new file mode 100644
index 0000000..f96b976
--- /dev/null
+++ b/javadoc/com/google/common/base/package-frame.html
@@ -0,0 +1,69 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+com.google.common.base (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+
+</HEAD>
+
+<BODY BGCOLOR="white">
+<FONT size="+1" CLASS="FrameTitleFont">
+<A HREF="../../../../com/google/common/base/package-summary.html" target="classFrame">com.google.common.base</A></FONT>
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Interfaces</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="FinalizableReference.html" title="interface in com.google.common.base" target="classFrame"><I>FinalizableReference</I></A>
+<BR>
+<A HREF="Function.html" title="interface in com.google.common.base" target="classFrame"><I>Function</I></A>
+<BR>
+<A HREF="Predicate.html" title="interface in com.google.common.base" target="classFrame"><I>Predicate</I></A>
+<BR>
+<A HREF="Supplier.html" title="interface in com.google.common.base" target="classFrame"><I>Supplier</I></A></FONT></TD>
+</TR>
+</TABLE>
+
+
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Classes</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="FinalizablePhantomReference.html" title="class in com.google.common.base" target="classFrame">FinalizablePhantomReference</A>
+<BR>
+<A HREF="FinalizableReferenceQueue.html" title="class in com.google.common.base" target="classFrame">FinalizableReferenceQueue</A>
+<BR>
+<A HREF="FinalizableSoftReference.html" title="class in com.google.common.base" target="classFrame">FinalizableSoftReference</A>
+<BR>
+<A HREF="FinalizableWeakReference.html" title="class in com.google.common.base" target="classFrame">FinalizableWeakReference</A>
+<BR>
+<A HREF="Functions.html" title="class in com.google.common.base" target="classFrame">Functions</A>
+<BR>
+<A HREF="Joiner.html" title="class in com.google.common.base" target="classFrame">Joiner</A>
+<BR>
+<A HREF="Joiner.MapJoiner.html" title="class in com.google.common.base" target="classFrame">Joiner.MapJoiner</A>
+<BR>
+<A HREF="Objects.html" title="class in com.google.common.base" target="classFrame">Objects</A>
+<BR>
+<A HREF="Preconditions.html" title="class in com.google.common.base" target="classFrame">Preconditions</A>
+<BR>
+<A HREF="Predicates.html" title="class in com.google.common.base" target="classFrame">Predicates</A>
+<BR>
+<A HREF="Suppliers.html" title="class in com.google.common.base" target="classFrame">Suppliers</A></FONT></TD>
+</TR>
+</TABLE>
+
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/package-summary.html b/javadoc/com/google/common/base/package-summary.html
new file mode 100644
index 0000000..a43875e
--- /dev/null
+++ b/javadoc/com/google/common/base/package-summary.html
@@ -0,0 +1,247 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+com.google.common.base (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="com.google.common.base (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/annotations/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/package-summary.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<H2>
+Package com.google.common.base
+</H2>
+Miscellaneous common util classes and annotations.
+<P>
+<B>See:</B>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#package_description"><B>Description</B></A>
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Interface Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A></B></TD>
+<TD>Implemented by references that have code to run after garbage collection of
+ their referents.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function&lt;F,T&gt;</A></B></TD>
+<TD>A transformation from one object to another.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate&lt;T&gt;</A></B></TD>
+<TD>Determines a true or false value for a given input.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier&lt;T&gt;</A></B></TD>
+<TD>A class that can supply objects of a single type.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base">FinalizablePhantomReference&lt;T&gt;</A></B></TD>
+<TD>Phantom reference with a <code>finalizeReferent()</code> method which a
+ background thread invokes after the garbage collector reclaims the
+ referent.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A></B></TD>
+<TD>A reference queue with an associated background thread that dequeues
+ references and invokes <A HREF="../../../../com/google/common/base/FinalizableReference.html#finalizeReferent()"><CODE>FinalizableReference.finalizeReferent()</CODE></A> on
+ them.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base">FinalizableSoftReference&lt;T&gt;</A></B></TD>
+<TD>Soft reference with a <code>finalizeReferent()</code> method which a background
+ thread invokes after the garbage collector reclaims the referent.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base">FinalizableWeakReference&lt;T&gt;</A></B></TD>
+<TD>Weak reference with a <code>finalizeReferent()</code> method which a background
+ thread invokes after the garbage collector reclaims the referent.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Functions.html" title="class in com.google.common.base">Functions</A></B></TD>
+<TD>Useful functions.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A></B></TD>
+<TD>An object which joins pieces of text (specified as an array, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang"><CODE>Iterable</CODE></A>, varargs or even a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A>) with a separator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A></B></TD>
+<TD>An object that joins map entries in the same manner as <code>Joiner</code> joins
+ iterables and arrays.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Objects.html" title="class in com.google.common.base">Objects</A></B></TD>
+<TD>Helper functions that can operate on any <code>Object</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A></B></TD>
+<TD>Simple static methods to be called at the start of your own methods to verify
+ correct arguments and state.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A></B></TD>
+<TD>Contains static factory methods for creating <code>Predicate</code> instances.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Suppliers.html" title="class in com.google.common.base">Suppliers</A></B></TD>
+<TD>Useful suppliers.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+<A NAME="package_description"><!-- --></A><H2>
+Package com.google.common.base Description
+</H2>
+
+<P>
+Miscellaneous common util classes and annotations.
+<P>
+
+<P>
+<DL>
+</DL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/annotations/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/package-summary.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/package-tree.html b/javadoc/com/google/common/base/package-tree.html
new file mode 100644
index 0000000..c595ec5
--- /dev/null
+++ b/javadoc/com/google/common/base/package-tree.html
@@ -0,0 +1,169 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+com.google.common.base Class Hierarchy (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="com.google.common.base Class Hierarchy (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/annotations/package-tree.html"><B>PREV</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/package-tree.html"><B>NEXT</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/package-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+Hierarchy For Package com.google.common.base
+</H2>
+</CENTER>
+<DL>
+<DT><B>Package Hierarchies:</B><DD><A HREF="../../../../overview-tree.html">All Packages</A></DL>
+<HR>
+<H2>
+Class Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><B>Object</B></A><UL>
+<LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base"><B>FinalizableReferenceQueue</B></A><LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Functions.html" title="class in com.google.common.base"><B>Functions</B></A><LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base"><B>Joiner</B></A><LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base"><B>Joiner.MapJoiner</B></A><LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Objects.html" title="class in com.google.common.base"><B>Objects</B></A><LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Preconditions.html" title="class in com.google.common.base"><B>Preconditions</B></A><LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Predicates.html" title="class in com.google.common.base"><B>Predicates</B></A><LI TYPE="circle">java.lang.ref.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true" title="class or interface in java.lang.ref"><B>Reference</B></A>&lt;T&gt;<UL>
+<LI TYPE="circle">java.lang.ref.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/PhantomReference.html?is-external=true" title="class or interface in java.lang.ref"><B>PhantomReference</B></A>&lt;T&gt;<UL>
+<LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base"><B>FinalizablePhantomReference</B></A>&lt;T&gt; (implements com.google.common.base.<A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A>)
+</UL>
+<LI TYPE="circle">java.lang.ref.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><B>SoftReference</B></A>&lt;T&gt;<UL>
+<LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base"><B>FinalizableSoftReference</B></A>&lt;T&gt; (implements com.google.common.base.<A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A>)
+</UL>
+<LI TYPE="circle">java.lang.ref.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><B>WeakReference</B></A>&lt;T&gt;<UL>
+<LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base"><B>FinalizableWeakReference</B></A>&lt;T&gt; (implements com.google.common.base.<A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A>)
+</UL>
+</UL>
+<LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Suppliers.html" title="class in com.google.common.base"><B>Suppliers</B></A></UL>
+</UL>
+<H2>
+Interface Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base"><B>FinalizableReference</B></A><LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base"><B>Function</B></A>&lt;F,T&gt;<LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base"><B>Predicate</B></A>&lt;T&gt;<LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base"><B>Supplier</B></A>&lt;T&gt;</UL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/annotations/package-tree.html"><B>PREV</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/package-tree.html"><B>NEXT</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/package-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/base/package-use.html b/javadoc/com/google/common/base/package-use.html
new file mode 100644
index 0000000..18f1d35
--- /dev/null
+++ b/javadoc/com/google/common/base/package-use.html
@@ -0,0 +1,242 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Package com.google.common.base (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Package com.google.common.base (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/package-use.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Package<br>com.google.common.base</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
+<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.base"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Classes in <A HREF="../../../../com/google/common/base/package-summary.html">com.google.common.base</A> used by <A HREF="../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/base/class-use/FinalizableReference.html#com.google.common.base"><B>FinalizableReference</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implemented by references that have code to run after garbage collection of
+ their referents.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/base/class-use/FinalizableReferenceQueue.html#com.google.common.base"><B>FinalizableReferenceQueue</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A reference queue with an associated background thread that dequeues
+ references and invokes <A HREF="../../../../com/google/common/base/FinalizableReference.html#finalizeReferent()"><CODE>FinalizableReference.finalizeReferent()</CODE></A> on
+ them.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/base/class-use/Function.html#com.google.common.base"><B>Function</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A transformation from one object to another.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/base/class-use/Joiner.html#com.google.common.base"><B>Joiner</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An object which joins pieces of text (specified as an array, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang"><CODE>Iterable</CODE></A>, varargs or even a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A>) with a separator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/base/class-use/Joiner.MapJoiner.html#com.google.common.base"><B>Joiner.MapJoiner</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An object that joins map entries in the same manner as <code>Joiner</code> joins
+ iterables and arrays.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/base/class-use/Predicate.html#com.google.common.base"><B>Predicate</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines a true or false value for a given input.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/base/class-use/Supplier.html#com.google.common.base"><B>Supplier</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A class that can supply objects of a single type.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Classes in <A HREF="../../../../com/google/common/base/package-summary.html">com.google.common.base</A> used by <A HREF="../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/base/class-use/Function.html#com.google.common.collect"><B>Function</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A transformation from one object to another.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/base/class-use/Predicate.html#com.google.common.collect"><B>Predicate</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines a true or false value for a given input.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/base/class-use/Supplier.html#com.google.common.collect"><B>Supplier</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A class that can supply objects of a single type.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/base/package-use.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/AbstractIterator.html b/javadoc/com/google/common/collect/AbstractIterator.html
new file mode 100644
index 0000000..0707dcb
--- /dev/null
+++ b/javadoc/com/google/common/collect/AbstractIterator.html
@@ -0,0 +1,422 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:14 PST 2009 -->
+<TITLE>
+AbstractIterator (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="AbstractIterator (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/AbstractIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/AbstractIterator.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="AbstractIterator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class AbstractIterator&lt;T&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">com.google.common.collect.UnmodifiableIterator</A>&lt;T&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.AbstractIterator&lt;T&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>AbstractIterator&lt;T&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</DL>
+</PRE>
+
+<P>
+This class provides a skeletal implementation of the <code>Iterator</code>
+ interface, to make this interface easier to implement for certain types of
+ data sources.
+
+ <p><code>Iterator</code> requires its implementations to support querying the
+ end-of-data status without changing the iterator's state, using the <A HREF="../../../../com/google/common/collect/AbstractIterator.html#hasNext()"><CODE>hasNext()</CODE></A> method. But many data sources, such as <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true#read()" title="class or interface in java.io"><CODE>Reader.read()</CODE></A>), do not expose this information; the only way to
+ discover whether there is any data left is by trying to retrieve it. These
+ types of data sources are ordinarily difficult to write iterators for. But
+ using this class, one must implement only the <A HREF="../../../../com/google/common/collect/AbstractIterator.html#computeNext()"><CODE>computeNext()</CODE></A> method,
+ and invoke the <A HREF="../../../../com/google/common/collect/AbstractIterator.html#endOfData()"><CODE>endOfData()</CODE></A> method when appropriate.
+
+ <p>Another example is an iterator that skips over null elements in a backing
+ iterator. This could be implemented as: <pre> <code>public static Iterator&lt;String&gt; skipNulls(final Iterator&lt;String&gt; in) {
+ return new AbstractIterator&lt;String&gt;() {
+ protected String computeNext() {
+ while (in.hasNext()) {
+ String s = in.next();
+ if (s != null) {
+ return s;
+ }
+ }
+ return endOfData();
+ }
+ };
+ }</code></pre>
+
+ This class supports iterators that include null elements.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/AbstractIterator.html#AbstractIterator()">AbstractIterator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected abstract &nbsp;<A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="type parameter in AbstractIterator">T</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/AbstractIterator.html#computeNext()">computeNext</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;<A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="type parameter in AbstractIterator">T</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/AbstractIterator.html#endOfData()">endOfData</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementations of <code>computeNext</code> <b>must</b> invoke this method when
+ there are no elements left in the iteration.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/AbstractIterator.html#hasNext()">hasNext</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the iteration has more elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="type parameter in AbstractIterator">T</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/AbstractIterator.html#next()">next</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next element in the iteration.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="type parameter in AbstractIterator">T</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/AbstractIterator.html#peek()">peek</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next element in the iteration without advancing the iteration,
+ according to the contract of <A HREF="../../../../com/google/common/collect/PeekingIterator.html#peek()"><CODE>PeekingIterator.peek()</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.UnmodifiableIterator"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html#remove()">remove</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="AbstractIterator()"><!-- --></A><H3>
+AbstractIterator</H3>
+<PRE>
+public <B>AbstractIterator</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="computeNext()"><!-- --></A><H3>
+computeNext</H3>
+<PRE>
+protected abstract <A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="type parameter in AbstractIterator">T</A> <B>computeNext</B>()</PRE>
+<DL>
+<DD>Returns the next element. <b>Note:</b> the implementation must call <A HREF="../../../../com/google/common/collect/AbstractIterator.html#endOfData()"><CODE>endOfData()</CODE></A> when there are no elements left in the iteration. Failure to
+ do so could result in an infinite loop.
+
+ <p>The initial invocation of <A HREF="../../../../com/google/common/collect/AbstractIterator.html#hasNext()"><CODE>hasNext()</CODE></A> or <A HREF="../../../../com/google/common/collect/AbstractIterator.html#next()"><CODE>next()</CODE></A> calls
+ this method, as does the first invocation of <code>hasNext</code> or <code>next</code> following each successful call to <code>next</code>. Once the
+ implementation either invokes <code>endOfData</code> or throws an exception,
+ <code>computeNext</code> is guaranteed to never be called again.
+
+ <p>If this method throws an exception, it will propagate outward to the
+ <code>hasNext</code> or <code>next</code> invocation that invoked this method. Any
+ further attempts to use the iterator will result in an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalStateException</CODE></A>.
+
+ <p>The implementation of this method may not invoke the <code>hasNext</code>,
+ <code>next</code>, or <A HREF="../../../../com/google/common/collect/AbstractIterator.html#peek()"><CODE>peek()</CODE></A> methods on this instance; if it does, an
+ <code>IllegalStateException</code> will result.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the next element if there was one. If <code>endOfData</code> was called
+ during execution, the return value will be ignored.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang">RuntimeException</A></CODE> - if any unrecoverable error happens. This exception
+ will propagate outward to the <code>hasNext()</code>, <code>next()</code>, or
+ <code>peek()</code> invocation that invoked this method. Any further
+ attempts to use the iterator will result in an
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalStateException</CODE></A>.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="endOfData()"><!-- --></A><H3>
+endOfData</H3>
+<PRE>
+protected final <A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="type parameter in AbstractIterator">T</A> <B>endOfData</B>()</PRE>
+<DL>
+<DD>Implementations of <code>computeNext</code> <b>must</b> invoke this method when
+ there are no elements left in the iteration.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD><code>null</code>; a convenience so your <A HREF="../../../../com/google/common/collect/AbstractIterator.html#computeNext()"><CODE>computeNext()</CODE></A>
+ implementation can use the simple statement <code>return endOfData();</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hasNext()"><!-- --></A><H3>
+hasNext</H3>
+<PRE>
+public final boolean <B>hasNext</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#hasNext()" title="class or interface in java.util">java.util.Iterator</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the iteration has more elements.
+ (In other words, returns <code>true</code> if <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#next()" title="class or interface in java.util"><CODE>Iterator.next()</CODE></A> would
+ return an element rather than throwing an exception.)
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD><code>true</code> if the iteration has more elements</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="next()"><!-- --></A><H3>
+next</H3>
+<PRE>
+public final <A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="type parameter in AbstractIterator">T</A> <B>next</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#next()" title="class or interface in java.util">java.util.Iterator</A></CODE></B></DD>
+<DD>Returns the next element in the iteration.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the next element in the iteration</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="peek()"><!-- --></A><H3>
+peek</H3>
+<PRE>
+public final <A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="type parameter in AbstractIterator">T</A> <B>peek</B>()</PRE>
+<DL>
+<DD>Returns the next element in the iteration without advancing the iteration,
+ according to the contract of <A HREF="../../../../com/google/common/collect/PeekingIterator.html#peek()"><CODE>PeekingIterator.peek()</CODE></A>.
+
+ <p>Implementations of <code>AbstractIterator</code> that wish to expose this
+ functionality should implement <code>PeekingIterator</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/AbstractIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/AbstractIterator.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="AbstractIterator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ArrayListMultimap.html b/javadoc/com/google/common/collect/ArrayListMultimap.html
new file mode 100644
index 0000000..5b14fe7
--- /dev/null
+++ b/javadoc/com/google/common/collect/ArrayListMultimap.html
@@ -0,0 +1,981 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:14 PST 2009 -->
+<TITLE>
+ArrayListMultimap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ArrayListMultimap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ArrayListMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ArrayListMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ArrayListMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ArrayListMultimap&lt;K,V&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ArrayListMultimap&lt;K,V&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;, <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public final class <B>ArrayListMultimap&lt;K,V&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+Implementation of <code>Multimap</code> that uses an <code>ArrayList</code> to store
+ the values for a given key. A <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> associates each key with an
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util"><CODE>ArrayList</CODE></A> of values.
+
+ <p>When iterating through the collections supplied by this class, the
+ ordering of values for a given key agrees with the order in which the values
+ were added.
+
+ <p>This multimap allows duplicate key-value pairs. After adding a new
+ key-value pair equal to an existing key-value pair, the <code>ArrayListMultimap</code> will contain entries for both the new value and the old
+ value.
+
+ <p>Keys and values may be null. All optional multimap methods are supported,
+ and all returned views are modifiable.
+
+ <p>The lists returned by <A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#get(K)"><CODE>get(K)</CODE></A>, <A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#removeAll(java.lang.Object)"><CODE>removeAll(java.lang.Object)</CODE></A>, and <A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#replaceValues(K, java.lang.Iterable)"><CODE>replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> all implement <A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util"><CODE>RandomAccess</CODE></A>.
+
+ <p>This class is not threadsafe when any concurrent operations update the
+ multimap. Concurrent read operations will work correctly. To allow concurrent
+ update operations, wrap your multimap with a call to <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedListMultimap(com.google.common.collect.ListMultimap)"><CODE>Multimaps.synchronizedListMultimap(com.google.common.collect.ListMultimap<K, V>)</CODE></A>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Jared Levy</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.ArrayListMultimap">Serialized Form</A></DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#asMap()">asMap</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map view that associates each key with the corresponding values
+ in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#clear()">clear</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all key-value pairs from the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified key-value pair.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#containsKey(java.lang.Object)">containsKey</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains any values for the specified
+ key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified value for any
+ key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#create()">create</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>ArrayListMultimap</code> with the default initial
+ capacities.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#create(int, int)">create</A></B>(int&nbsp;expectedKeys,
+ int&nbsp;expectedValuesPerKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an empty <code>ArrayListMultimap</code> with enough capacity to hold
+ the specified numbers of keys and values without resizing.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an <code>ArrayListMultimap</code> with the same mappings as the
+ specified multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#entries()">entries</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all key-value pairs.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object to this multimap for equality.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;V&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#get(K)">get</A></B>(K&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection view of all values associated with a key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the hash code for this multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#isEmpty()">isEmpty</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains no key-value pairs.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;K&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#keys()">keys</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection, which may contain duplicates, of all keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;K&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#keySet()">keySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of all keys, each appearing once in the returned set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#put(K, V)">put</A></B>(K&nbsp;key,
+ V&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a key-value pair in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#putAll(K, java.lang.Iterable)">putAll</A></B>(K&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all of another multimap's key-value pairs into this multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a key-value pair from the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;V&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all values associated with a given key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;V&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(K&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key, replacing any existing
+ values for that key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#size()">size</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of key-value pairs in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string representation of the multimap, generated by calling
+ <code>toString</code> on the map returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#trimToSize()">trimToSize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reduces the memory used by this <code>ArrayListMultimap</code>, if feasible.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#values()">values</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all values in the multimap.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ListMultimap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#asMap()">asMap</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.Multimap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#entries()">entries</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="create()"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>&lt;K,V&gt; <B>create</B>()</PRE>
+<DL>
+<DD>Creates a new, empty <code>ArrayListMultimap</code> with the default initial
+ capacities.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="create(int, int)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>&lt;K,V&gt; <B>create</B>(int&nbsp;expectedKeys,
+ int&nbsp;expectedValuesPerKey)</PRE>
+<DL>
+<DD>Constructs an empty <code>ArrayListMultimap</code> with enough capacity to hold
+ the specified numbers of keys and values without resizing.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>expectedKeys</CODE> - the expected number of distinct keys<DD><CODE>expectedValuesPerKey</CODE> - the expected average number of values per key
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>expectedKeys</code> or <code>expectedValuesPerKey</code> is negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="create(com.google.common.collect.Multimap)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>&lt;K,V&gt; <B>create</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</PRE>
+<DL>
+<DD>Constructs an <code>ArrayListMultimap</code> with the same mappings as the
+ specified multimap.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - the multimap whose contents are copied to this multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="trimToSize()"><!-- --></A><H3>
+trimToSize</H3>
+<PRE>
+public void <B>trimToSize</B>()</PRE>
+<DL>
+<DD>Reduces the memory used by this <code>ArrayListMultimap</code>, if feasible.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(java.lang.Object)"><!-- --></A><A NAME="get(K)"><!-- --></A><H3>
+get</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;V&gt; <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ K&nbsp;key)</PRE>
+<DL>
+<DD>Returns a collection view of all values associated with a key. If no
+ mappings in the multimap have the provided key, an empty collection is
+ returned.
+
+ <p>Changes to the returned collection will update the underlying multimap,
+ and vice versa.
+
+ <p>The returned collection is not serializable.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap
+<DT><B>Returns:</B><DD>the collection of values that the key maps to</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
+removeAll</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;V&gt; <B>removeAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD>Removes all values associated with a given key.
+
+ <p>The returned collection is immutable.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entries to remove from the multimap
+<DT><B>Returns:</B><DD>the collection of removed values, or an empty collection if no
+ values were associated with the provided key. The collection
+ <i>may</i> be modifiable, but updating it will have no effect on the
+ multimap.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="replaceValues(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="replaceValues(K, java.lang.Iterable)"><!-- --></A><H3>
+replaceValues</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;V&gt; <B>replaceValues</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ K&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</PRE>
+<DL>
+<DD>Stores a collection of values with the same key, replacing any existing
+ values for that key.
+
+ <p>The returned collection is immutable.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
+<DT><B>Returns:</B><DD>the collection of replaced values, or an empty collection if no
+ values were previously associated with the key. The collection
+ <i>may</i> be modifiable, but updating it will have no effect on the
+ multimap.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
+put</H3>
+<PRE>
+public boolean <B>put</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ K&nbsp;key,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ V&nbsp;value)</PRE>
+<DL>
+<DD>Stores a key-value pair in the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>value</CODE> - value to store in the multimap
+<DT><B>Returns:</B><DD><code>true</code> always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD>Compares the specified object to this multimap for equality.
+
+ <p>Two <code>ListMultimap</code> instances are equal if, for each key, they
+ contain the same values in the same order. If the value orderings disagree,
+ the multimaps will not be considered equal.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="size()"><!-- --></A><H3>
+size</H3>
+<PRE>
+public int <B>size</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">Multimap</A></CODE></B></DD>
+<DD>Returns the number of key-value pairs in the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isEmpty()"><!-- --></A><H3>
+isEmpty</H3>
+<PRE>
+public boolean <B>isEmpty</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains no key-value pairs.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsKey(java.lang.Object)"><!-- --></A><H3>
+containsKey</H3>
+<PRE>
+public boolean <B>containsKey</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains any values for the specified
+ key.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
+containsValue</H3>
+<PRE>
+public boolean <B>containsValue</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains the specified value for any
+ key.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>value</CODE> - value to search for in multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsEntry(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
+containsEntry</H3>
+<PRE>
+public boolean <B>containsEntry</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains the specified key-value pair.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap<DD><CODE>value</CODE> - value to search for in multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public boolean <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Removes a key-value pair from the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entry to remove from the multimap<DD><CODE>value</CODE> - value of entry to remove the multimap
+<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="putAll(K, java.lang.Iterable)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public boolean <B>putAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ K&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">Multimap</A></CODE></B></DD>
+<DD>Stores a collection of values with the same key.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
+<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(com.google.common.collect.Multimap)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public boolean <B>putAll</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">Multimap</A></CODE></B></DD>
+<DD>Copies all of another multimap's key-value pairs into this multimap. The
+ order in which the mappings are added is determined by
+ <code>multimap.entries()</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - mappings to store in this multimap
+<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clear()"><!-- --></A><H3>
+clear</H3>
+<PRE>
+public void <B>clear</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">Multimap</A></CODE></B></DD>
+<DD>Removes all key-value pairs from the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keySet()"><!-- --></A><H3>
+keySet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;K&gt; <B>keySet</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">Multimap</A></CODE></B></DD>
+<DD>Returns the set of all keys, each appearing once in the returned set.
+ Changes to the returned set will update the underlying multimap, and vice
+ versa.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the collection of distinct keys</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keys()"><!-- --></A><H3>
+keys</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;K&gt; <B>keys</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">Multimap</A></CODE></B></DD>
+<DD>Returns a collection, which may contain duplicates, of all keys. The number
+ of times of key appears in the returned multiset equals the number of
+ mappings the key has in the multimap. Changes to the returned multiset will
+ update the underlying multimap, and vice versa.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a multiset with keys corresponding to the distinct keys of the
+ multimap and frequencies corresponding to the number of values that
+ each key maps to</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="values()"><!-- --></A><H3>
+values</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt; <B>values</B>()</PRE>
+<DL>
+<DD>Returns a collection of all values in the multimap. Changes to the returned
+ collection will update the underlying multimap, and vice versa.
+
+ <p>The iterator generated by the returned collection traverses the values
+ for one key, followed by the values of a second key, and so on.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>collection of values, which may include the same value multiple
+ times if it occurs in multiple mappings</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entries()"><!-- --></A><H3>
+entries</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt; <B>entries</B>()</PRE>
+<DL>
+<DD>Returns a collection of all key-value pairs. Changes to the returned
+ collection will update the underlying multimap, and vice versa. The entries
+ collection does not support the <code>add</code> or <code>addAll</code> operations.
+
+ <p>The iterator generated by the returned collection traverses the values
+ for one key, followed by the values of a second key, and so on.
+
+ <p>Each entry is an immutable snapshot of a key-value mapping in the
+ multimap, taken at the time the entry is returned by a method call to the
+ collection or its iterator.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#entries()">entries</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>collection of map entries consisting of key-value pairs</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="asMap()"><!-- --></A><H3>
+asMap</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt; <B>asMap</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">Multimap</A></CODE></B></DD>
+<DD>Returns a map view that associates each key with the corresponding values
+ in the multimap. Changes to the returned map, such as element removal,
+ will update the underlying multimap. The map does not support
+ <code>setValue()</code> on its entries, <code>put</code>, or <code>putAll</code>.
+
+ <p>The collections returned by <code>asMap().get(Object)</code> have the same
+ behavior as those returned by <A HREF="../../../../com/google/common/collect/Multimap.html#get(K)"><CODE>Multimap.get(K)</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a map view from a key to its collection of values</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+public int <B>hashCode</B>()</PRE>
+<DL>
+<DD>Returns the hash code for this multimap.
+
+ <p>The hash code of a multimap is defined as the hash code of the map view,
+ as returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util"><CODE>Map.hashCode()</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Returns a string representation of the multimap, generated by calling
+ <code>toString</code> on the map returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a string representation of the multimap</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ArrayListMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ArrayListMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ArrayListMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/AsynchronousComputationException.html b/javadoc/com/google/common/collect/AsynchronousComputationException.html
new file mode 100644
index 0000000..f2daa96
--- /dev/null
+++ b/javadoc/com/google/common/collect/AsynchronousComputationException.html
@@ -0,0 +1,250 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:14 PST 2009 -->
+<TITLE>
+AsynchronousComputationException (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="AsynchronousComputationException (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/AsynchronousComputationException.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/AsynchronousComputationException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="AsynchronousComputationException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Throwable">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class AsynchronousComputationException</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">java.lang.Throwable</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">java.lang.Exception</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang">java.lang.RuntimeException</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect">com.google.common.collect.ComputationException</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.AsynchronousComputationException</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public class <B>AsynchronousComputationException</B><DT>extends <A HREF="../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect">ComputationException</A></DL>
+</PRE>
+
+<P>
+Wraps an exception that occured during a computation in a different thread.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Bob Lee</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.AsynchronousComputationException">Serialized Form</A></DL>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/AsynchronousComputationException.html#AsynchronousComputationException(java.lang.Throwable)">AsynchronousComputationException</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;cause)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new instance with the given cause.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#getCause()" title="class or interface in java.lang">getCause</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="AsynchronousComputationException(java.lang.Throwable)"><!-- --></A><H3>
+AsynchronousComputationException</H3>
+<PRE>
+public <B>AsynchronousComputationException</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;cause)</PRE>
+<DL>
+<DD>Creates a new instance with the given cause.
+<P>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/AsynchronousComputationException.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/AsynchronousComputationException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="AsynchronousComputationException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Throwable">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/BiMap.html b/javadoc/com/google/common/collect/BiMap.html
new file mode 100644
index 0000000..6967422
--- /dev/null
+++ b/javadoc/com/google/common/collect/BiMap.html
@@ -0,0 +1,423 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:14 PST 2009 -->
+<TITLE>
+BiMap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="BiMap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/BiMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/BiMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="BiMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Interface BiMap&lt;K,V&gt;</H2>
+<DL>
+<DT><B>All Superinterfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</DD>
+</DL>
+<DL>
+<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A>, <A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>, <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>, <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public interface <B>BiMap&lt;K,V&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</DL>
+</PRE>
+
+<P>
+A bimap (or "bidirectional map") is a map that preserves the uniqueness of
+ its values as well as that of its keys. This constraint enables bimaps to
+ support an "inverse view", which is another bimap containing the same entries
+ as this bimap but with reversed keys and values.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion</DD>
+</DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">V</A>&gt;</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/BiMap.html#forcePut(K, V)">forcePut</A></B>(<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An alternate form of <code>put</code> that silently removes any existing entry
+ with the value <code>value</code> before proceeding with the <A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)"><CODE>put(K, V)</CODE></A>
+ operation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>,<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/BiMap.html#inverse()">inverse</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the inverse view of this bimap, which maps each of this bimap's
+ values to its associated key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates the specified value with the specified key in this map
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/BiMap.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">K</A>,? extends <A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all of the mappings from the specified map to this map
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/BiMap.html#values()">values</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> view of the values contained in this map.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
+put</H3>
+<PRE>
+<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A> <B>put</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">K</A>&nbsp;key,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>&nbsp;value)</PRE>
+<DL>
+<DD>Associates the specified value with the specified key in this map
+ (optional operation). If the map previously contained a mapping for
+ the key, the old value is replaced by the specified value. (A map
+ <tt>m</tt> is said to contain a mapping for a key <tt>k</tt> if and only
+ if <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util"><CODE>m.containsKey(k)</CODE></A> would return
+ <tt>true</tt>.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">put</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">K</A>,<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key with which the specified value is to be associated<DD><CODE>value</CODE> - value to be associated with the specified key
+<DT><B>Returns:</B><DD>the previous value associated with <tt>key</tt>, or
+ <tt>null</tt> if there was no mapping for <tt>key</tt>.
+ (A <tt>null</tt> return can also indicate that the map
+ previously associated <tt>null</tt> with <tt>key</tt>,
+ if the implementation supports <tt>null</tt> values.)
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the given value is already bound to a
+ different key in this bimap. The bimap will remain unmodified in this
+ event. To avoid this exception, call <A HREF="../../../../com/google/common/collect/BiMap.html#forcePut(K, V)"><CODE>forcePut(K, V)</CODE></A> instead.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="forcePut(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="forcePut(K, V)"><!-- --></A><H3>
+forcePut</H3>
+<PRE>
+<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A> <B>forcePut</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">K</A>&nbsp;key,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>&nbsp;value)</PRE>
+<DL>
+<DD>An alternate form of <code>put</code> that silently removes any existing entry
+ with the value <code>value</code> before proceeding with the <A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)"><CODE>put(K, V)</CODE></A>
+ operation. If the bimap previously contained the provided key-value
+ mapping, this method has no effect.
+
+ <p>Note that a successful call to this method could cause the size of the
+ bimap to increase by one, stay the same, or even decrease by one.
+
+ <p><b>Warning</b>: If an existing entry with this value is removed, the key
+ for that entry is discarded and not returned.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - the key with which the specified value is to be associated<DD><CODE>value</CODE> - the value to be associated with the specified key
+<DT><B>Returns:</B><DD>the value which was previously associated with the key, which may
+ be <code>null</code>, or <code>null</code> if there was no previous entry</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(java.util.Map)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+void <B>putAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">K</A>,? extends <A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>&gt;&nbsp;map)</PRE>
+<DL>
+<DD>Copies all of the mappings from the specified map to this map
+ (optional operation). The effect of this call is equivalent to that
+ of calling <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util"><CODE>put(k, v)</CODE></A> on this map once
+ for each mapping from key <tt>k</tt> to value <tt>v</tt> in the
+ specified map. The behavior of this operation is undefined if the
+ specified map is modified while the operation is in progress.
+
+ <p><b>Warning:</b> the results of calling this method may vary depending on
+ the iteration order of <code>map</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">K</A>,<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>map</CODE> - mappings to be stored in this map
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if an attempt to <code>put</code> any
+ entry fails. Note that some map entries may have been added to the
+ bimap before the exception was thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="values()"><!-- --></A><H3>
+values</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>&gt; <B>values</B>()</PRE>
+<DL>
+<DD>Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> view of the values contained in this map.
+ The collection is backed by the map, so changes to the map are
+ reflected in the collection, and vice-versa. If the map is
+ modified while an iteration over the collection is in progress
+ (except through the iterator's own <tt>remove</tt> operation),
+ the results of the iteration are undefined. The collection
+ supports element removal, which removes the corresponding
+ mapping from the map, via the <tt>Iterator.remove</tt>,
+ <tt>Collection.remove</tt>, <tt>removeAll</tt>,
+ <tt>retainAll</tt> and <tt>clear</tt> operations. It does not
+ support the <tt>add</tt> or <tt>addAll</tt> operations.
+
+ <p>Because a bimap has unique values, this method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>,
+ instead of the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> specified in the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A>
+ interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">K</A>,<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a collection view of the values contained in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="inverse()"><!-- --></A><H3>
+inverse</H3>
+<PRE>
+<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>,<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">K</A>&gt; <B>inverse</B>()</PRE>
+<DL>
+<DD>Returns the inverse view of this bimap, which maps each of this bimap's
+ values to its associated key. The two bimaps are backed by the same data;
+ any changes to one will appear in the other.
+
+ <p><b>Note:</b>There is no guaranteed correspondence between the iteration
+ order of a bimap and that of its inverse.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the inverse view of this bimap</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/BiMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/BiMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="BiMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ClassToInstanceMap.html b/javadoc/com/google/common/collect/ClassToInstanceMap.html
new file mode 100644
index 0000000..33f24b0
--- /dev/null
+++ b/javadoc/com/google/common/collect/ClassToInstanceMap.html
@@ -0,0 +1,314 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:15 PST 2009 -->
+<TITLE>
+ClassToInstanceMap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ClassToInstanceMap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ClassToInstanceMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/Collections2.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ClassToInstanceMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ClassToInstanceMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Interface ClassToInstanceMap&lt;B&gt;</H2>
+<DL>
+<DT><DT><B>Type Parameters:</B><DD><CODE>B</CODE> - the common supertype that all entries must share; often this is
+ simply <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><CODE>Object</CODE></A></DL>
+<DL>
+<DT><B>All Superinterfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends B&gt;,B&gt;</DD>
+</DL>
+<DL>
+<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>, <A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public interface <B>ClassToInstanceMap&lt;B&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends B&gt;,B&gt;</DL>
+</PRE>
+
+<P>
+A map, each entry of which maps a Java
+ <a href="http://tinyurl.com/2cmwkz">raw type</a> to an instance of that type.
+ In addition to implementing <code>Map</code>, the additional type-safe operations
+ <A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html#putInstance(java.lang.Class, T)"><CODE>putInstance(java.lang.Class<T>, T)</CODE></A> and <A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html#getInstance(java.lang.Class)"><CODE>getInstance(java.lang.Class<T>)</CODE></A> are available.
+
+ <p>Like any other <code>Map&lt;Class, Object&gt;</code>, this map may contain entries
+ for primitive types, and a primitive type and its corresponding wrapper type
+ may map to different values.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion</DD>
+</DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">V</A>&gt;</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T extends <A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="type parameter in ClassToInstanceMap">B</A>&gt;
+<BR>
+T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html#getInstance(java.lang.Class)">getInstance</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value the specified class is mapped to, or <code>null</code> if no
+ entry for this class is present.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T extends <A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="type parameter in ClassToInstanceMap">B</A>&gt;
+<BR>
+T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html#putInstance(java.lang.Class, T)">putInstance</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type,
+ T&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maps the specified class to the specified value.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">put</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="getInstance(java.lang.Class)"><!-- --></A><H3>
+getInstance</H3>
+<PRE>
+&lt;T extends <A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="type parameter in ClassToInstanceMap">B</A>&gt; T <B>getInstance</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</PRE>
+<DL>
+<DD>Returns the value the specified class is mapped to, or <code>null</code> if no
+ entry for this class is present. This will only return a value that was
+ bound to this specific class, not a value that may have been bound to a
+ subtype.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putInstance(java.lang.Class,java.lang.Object)"><!-- --></A><A NAME="putInstance(java.lang.Class, T)"><!-- --></A><H3>
+putInstance</H3>
+<PRE>
+&lt;T extends <A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="type parameter in ClassToInstanceMap">B</A>&gt; T <B>putInstance</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ T&nbsp;value)</PRE>
+<DL>
+<DD>Maps the specified class to the specified value. Does <i>not</i> associate
+ this value with any of the class's supertypes.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the value previously associated with this class (possibly <code>null</code>), or <code>null</code> if there was no previous entry.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ClassToInstanceMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/Collections2.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ClassToInstanceMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ClassToInstanceMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/Collections2.html b/javadoc/com/google/common/collect/Collections2.html
new file mode 100644
index 0000000..a749b28
--- /dev/null
+++ b/javadoc/com/google/common/collect/Collections2.html
@@ -0,0 +1,299 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:15 PST 2009 -->
+<TITLE>
+Collections2 (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Collections2 (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Collections2.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/Collections2.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Collections2.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class Collections2</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.Collections2</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public final class <B>Collections2</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+Provides static methods for working with <code>Collection</code> instances.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Chris Povirk, Mike Bostock, Jared Levy</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Collections2.html#filter(java.util.Collection, com.google.common.base.Predicate)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;&nbsp;unfiltered,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super E&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the elements of <code>unfiltered</code> that satisfy a predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;F,T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Collections2.html#transform(java.util.Collection, com.google.common.base.Function)">transform</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;F&gt;&nbsp;fromCollection,
+ <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,T&gt;&nbsp;function)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection that applies <code>function</code> to each element of
+ <code>fromCollection</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="filter(java.util.Collection, com.google.common.base.Predicate)"><!-- --></A><H3>
+filter</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt; <B>filter</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;&nbsp;unfiltered,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super E&gt;&nbsp;predicate)</PRE>
+<DL>
+<DD>Returns the elements of <code>unfiltered</code> that satisfy a predicate. The
+ returned collection is a live view of <code>unfiltered</code>; changes to one
+ affect the other.
+
+ <p>The resulting collection's iterator does not support <code>remove()</code>,
+ but all other collection methods are supported. The collection's
+ <code>add()</code> and <code>addAll()</code> methods throw an
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> if an element that doesn't satisfy the
+ predicate is provided. When methods such as <code>removeAll()</code> and
+ <code>clear()</code> are called on the filtered collection, only elements that
+ satisfy the filter will be removed from the underlying collection.
+
+ <p>The returned collection isn't threadsafe or serializable, even if
+ <code>unfiltered</code> is.
+
+ <p>Many of the filtered collection's methods, such as <code>size()</code>,
+ iterate across every element in the underlying collection and determine
+ which elements satisfy the filter. When a live view is <i>not</i> needed,
+ it may be faster to copy <code>Iterables.filter(unfiltered, predicate)</code>
+ and use the copy.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="transform(java.util.Collection, com.google.common.base.Function)"><!-- --></A><H3>
+transform</H3>
+<PRE>
+public static &lt;F,T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;T&gt; <B>transform</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;F&gt;&nbsp;fromCollection,
+ <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,T&gt;&nbsp;function)</PRE>
+<DL>
+<DD>Returns a collection that applies <code>function</code> to each element of
+ <code>fromCollection</code>. The returned collection is a live view of <code>fromCollection</code>; changes to one affect the other.
+
+ <p>The returned collection's <code>add()</code> and <code>addAll()</code> methods
+ throw an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang"><CODE>UnsupportedOperationException</CODE></A>. All other collection
+ methods are supported, as long as <code>fromCollection</code> supports them.
+
+ <p>The returned collection isn't threadsafe or serializable, even if
+ <code>fromCollection</code> is.
+
+ <p>When a live view is <i>not</i> needed, it may be faster to copy the
+ transformed collection and use the copy.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Collections2.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/Collections2.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Collections2.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ComputationException.html b/javadoc/com/google/common/collect/ComputationException.html
new file mode 100644
index 0000000..46f53de
--- /dev/null
+++ b/javadoc/com/google/common/collect/ComputationException.html
@@ -0,0 +1,250 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:15 PST 2009 -->
+<TITLE>
+ComputationException (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ComputationException (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ComputationException.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/Collections2.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ComputationException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ComputationException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Throwable">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ComputationException</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">java.lang.Throwable</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">java.lang.Exception</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang">java.lang.RuntimeException</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ComputationException</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DD>
+</DL>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect">AsynchronousComputationException</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public class <B>ComputationException</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang">RuntimeException</A></DL>
+</PRE>
+
+<P>
+Wraps an exception that occured during a computation.
+<P>
+
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.ComputationException">Serialized Form</A></DL>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ComputationException.html#ComputationException(java.lang.Throwable)">ComputationException</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;cause)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new instance with the given cause.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#getCause()" title="class or interface in java.lang">getCause</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ComputationException(java.lang.Throwable)"><!-- --></A><H3>
+ComputationException</H3>
+<PRE>
+public <B>ComputationException</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;cause)</PRE>
+<DL>
+<DD>Creates a new instance with the given cause.
+<P>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ComputationException.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/Collections2.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ComputationException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ComputationException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Throwable">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ConcurrentHashMultiset.html b/javadoc/com/google/common/collect/ConcurrentHashMultiset.html
new file mode 100644
index 0000000..0f5eb11
--- /dev/null
+++ b/javadoc/com/google/common/collect/ConcurrentHashMultiset.html
@@ -0,0 +1,1275 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:15 PST 2009 -->
+<TITLE>
+ConcurrentHashMultiset (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ConcurrentHashMultiset (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ConcurrentHashMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ConcurrentHashMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ConcurrentHashMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ConcurrentHashMultiset&lt;E&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">java.util.AbstractCollection</A>&lt;E&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ConcurrentHashMultiset&lt;E&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public final class <B>ConcurrentHashMultiset&lt;E&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;<DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DL>
+</PRE>
+
+<P>
+A multiset that supports concurrent modifications and that provides atomic
+ versions of most <code>Multiset</code> operations (exceptions where noted). Null
+ elements are not supported.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Cliff L. Biffle</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.ConcurrentHashMultiset">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="nested_classes_inherited_from_class_com.google.common.collect.Multiset"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="type parameter in Multiset.Entry">E</A>&gt;</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#add(E)">add</A></B>(E&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures that this collection contains the specified element (optional
+ operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#add(E, int)">add</A></B>(<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&nbsp;element,
+ int&nbsp;occurrences)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a number of occurrences of the specified element to this multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#addAll(java.util.Collection)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends E&gt;&nbsp;elementsToAdd)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds all of the elements in the specified collection to this collection
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#clear()">clear</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all of the elements from this collection (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#contains(java.lang.Object)">contains</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this collection contains the specified element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#containsAll(java.util.Collection)">containsAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this collection contains all of the elements
+ in the specified collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#count(java.lang.Object)">count</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of occurrences of <code>element</code> in this multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#create()">create</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>ConcurrentHashMultiset</code> using the default
+ initial capacity, load factor, and concurrency settings.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#create(java.lang.Iterable)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ConcurrentHashMultiset</code> containing the specified
+ elements, using the default initial capacity, load factor, and concurrency
+ settings.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#elementSet()">elementSet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of distinct elements contained in this multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#entrySet()">entrySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
+ the count of that element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indicates whether some other object is "equal to" this one.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code value for the object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#isEmpty()">isEmpty</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this collection contains no elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#iterator()">iterator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator over the elements contained in this collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a single instance of the specified element from this
+ collection, if it is present (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#remove(java.lang.Object, int)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
+ int&nbsp;occurrences)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a number of occurrences of the specified element from this
+ multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#removeAll(java.util.Collection)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all of this collection's elements that are also contained in the
+ specified collection (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#removeExactly(java.lang.Object, int)">removeExactly</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
+ int&nbsp;occurrences)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes exactly the specified number of occurrences of <code>element</code>, or
+ makes no change if this is not possible.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#retainAll(java.util.Collection)">retainAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retains only the elements in this collection that are contained in the
+ specified collection (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#setCount(E, int)">setCount</A></B>(<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&nbsp;element,
+ int&nbsp;count)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds or removes occurrences of <code>element</code> such that the <A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#count(java.lang.Object)"><CODE>count(java.lang.Object)</CODE></A>
+ of the element becomes <code>count</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#setCount(E, int, int)">setCount</A></B>(<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&nbsp;element,
+ int&nbsp;oldCount,
+ int&nbsp;newCount)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the number of occurrences of <code>element</code> to <code>newCount</code>, but
+ only if the count is currently <code>oldCount</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#size()">size</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of elements in this collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#toArray()">toArray</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array containing all of the elements in this collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#toArray(T[])">toArray</A></B>(T[]&nbsp;array)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array containing all of the elements in this collection;
+ the runtime type of the returned array is that of the specified array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string representation of this collection.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="create()"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>&lt;E&gt; <B>create</B>()</PRE>
+<DL>
+<DD>Creates a new, empty <code>ConcurrentHashMultiset</code> using the default
+ initial capacity, load factor, and concurrency settings.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="create(java.lang.Iterable)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>&lt;E&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Creates a new <code>ConcurrentHashMultiset</code> containing the specified
+ elements, using the default initial capacity, load factor, and concurrency
+ settings.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements that the multiset should contain</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="count(java.lang.Object)"><!-- --></A><H3>
+count</H3>
+<PRE>
+public int <B>count</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD>Returns the number of occurrences of <code>element</code> in this multiset.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">count</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to look for
+<DT><B>Returns:</B><DD>the nonnegative number of occurrences of the element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="size()"><!-- --></A><H3>
+size</H3>
+<PRE>
+public int <B>size</B>()</PRE>
+<DL>
+<DD>Returns the number of elements in this collection. If this collection
+ contains more than <tt>Integer.MAX_VALUE</tt> elements, returns
+ <tt>Integer.MAX_VALUE</tt>.
+
+ <p>If the data in the multiset is modified by any other threads during this
+ method, it is undefined which (if any) of these modifications will be
+ reflected in the result.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the number of elements in this collection</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toArray()"><!-- --></A><H3>
+toArray</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>[] <B>toArray</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toArray()" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Returns an array containing all of the elements in this collection.
+ If this collection makes any guarantees as to what order its elements
+ are returned by its iterator, this method must return the elements in
+ the same order.
+
+ <p>The returned array will be "safe" in that no references to it are
+ maintained by this collection. (In other words, this method must
+ allocate a new array even if this collection is backed by an array).
+ The caller is thus free to modify the returned array.
+
+ <p>This method acts as bridge between array-based and collection-based
+ APIs.
+
+ <p>This implementation returns an array containing all the elements
+ returned by this collection's iterator, in the same order, stored in
+ consecutive elements of the array, starting with index <code>0</code>.
+ The length of the returned array is equal to the number of elements
+ returned by the iterator, even if the size of this collection changes
+ during iteration, as might happen if the collection permits
+ concurrent modification during iteration. The <code>size</code> method is
+ called only as an optimization hint; the correct result is returned
+ even if the iterator returns a different number of elements.
+
+ <p>This method is equivalent to:
+
+ <pre> <code>List&lt;E&gt; list = new ArrayList&lt;E&gt;(size());
+ for (E e : this)
+ list.add(e);
+ return list.toArray();
+ </code></pre>
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>an array containing all of the elements in this collection</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toArray(java.lang.Object[])"><!-- --></A><A NAME="toArray(T[])"><!-- --></A><H3>
+toArray</H3>
+<PRE>
+public &lt;T&gt; T[] <B>toArray</B>(T[]&nbsp;array)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toArray(T[])" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Returns an array containing all of the elements in this collection;
+ the runtime type of the returned array is that of the specified array.
+ If the collection fits in the specified array, it is returned therein.
+ Otherwise, a new array is allocated with the runtime type of the
+ specified array and the size of this collection.
+
+ <p>If this collection fits in the specified array with room to spare
+ (i.e., the array has more elements than this collection), the element
+ in the array immediately following the end of the collection is set to
+ <tt>null</tt>. (This is useful in determining the length of this
+ collection <i>only</i> if the caller knows that this collection does
+ not contain any <tt>null</tt> elements.)
+
+ <p>If this collection makes any guarantees as to what order its elements
+ are returned by its iterator, this method must return the elements in
+ the same order.
+
+ <p>Like the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util"><CODE>Collection.toArray()</CODE></A> method, this method acts as bridge between
+ array-based and collection-based APIs. Further, this method allows
+ precise control over the runtime type of the output array, and may,
+ under certain circumstances, be used to save allocation costs.
+
+ <p>Suppose <tt>x</tt> is a collection known to contain only strings.
+ The following code can be used to dump the collection into a newly
+ allocated array of <tt>String</tt>:
+
+ <pre>
+ String[] y = x.toArray(new String[0]);</pre>
+
+ Note that <tt>toArray(new Object[0])</tt> is identical in function to
+ <tt>toArray()</tt>.
+
+ <p>This implementation returns an array containing all the elements
+ returned by this collection's iterator in the same order, stored in
+ consecutive elements of the array, starting with index <code>0</code>.
+ If the number of elements returned by the iterator is too large to
+ fit into the specified array, then the elements are returned in a
+ newly allocated array with length equal to the number of elements
+ returned by the iterator, even if the size of this collection
+ changes during iteration, as might happen if the collection permits
+ concurrent modification during iteration. The <code>size</code> method is
+ called only as an optimization hint; the correct result is returned
+ even if the iterator returns a different number of elements.
+
+ <p>This method is equivalent to:
+
+ <pre> <code>List&lt;E&gt; list = new ArrayList&lt;E&gt;(size());
+ for (E e : this)
+ list.add(e);
+ return list.toArray(a);
+ </code></pre>
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>array</CODE> - the array into which the elements of this collection are to be
+ stored, if it is big enough; otherwise, a new array of the same
+ runtime type is allocated for this purpose.
+<DT><B>Returns:</B><DD>an array containing all of the elements in this collection</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="add(java.lang.Object,int)"><!-- --></A><A NAME="add(E, int)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public int <B>add</B>(<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&nbsp;element,
+ int&nbsp;occurrences)</PRE>
+<DL>
+<DD>Adds a number of occurrences of the specified element to this multiset.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E, int)">add</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add<DD><CODE>occurrences</CODE> - the number of occurrences to add
+<DT><B>Returns:</B><DD>the previous count of the element before the operation; possibly
+ zero
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>occurrences</code> is negative, or if
+ the resulting amount would exceed <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Integer.MAX_VALUE</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object, int)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public int <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
+ int&nbsp;occurrences)</PRE>
+<DL>
+<DD>Removes a number of occurrences of the specified element from this
+ multiset. If the multiset contains fewer than this number of occurrences to
+ begin with, all occurrences will be removed.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object, int)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element whose occurrences should be removed<DD><CODE>occurrences</CODE> - the number of occurrences of the element to remove
+<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>occurrences</code> is negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="removeExactly(java.lang.Object, int)"><!-- --></A><H3>
+removeExactly</H3>
+<PRE>
+public boolean <B>removeExactly</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
+ int&nbsp;occurrences)</PRE>
+<DL>
+<DD>Removes exactly the specified number of occurrences of <code>element</code>, or
+ makes no change if this is not possible.
+
+ <p>This method, in contrast to <A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#remove(java.lang.Object, int)"><CODE>remove(Object, int)</CODE></A>, has no effect
+ when the element count is smaller than <code>occurrences</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to remove<DD><CODE>occurrences</CODE> - the number of occurrences of <code>element</code> to remove
+<DT><B>Returns:</B><DD><code>true</code> if the removal was possible (including if <code>occurrences</code> is zero)</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setCount(java.lang.Object,int)"><!-- --></A><A NAME="setCount(E, int)"><!-- --></A><H3>
+setCount</H3>
+<PRE>
+public int <B>setCount</B>(<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&nbsp;element,
+ int&nbsp;count)</PRE>
+<DL>
+<DD>Adds or removes occurrences of <code>element</code> such that the <A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#count(java.lang.Object)"><CODE>count(java.lang.Object)</CODE></A>
+ of the element becomes <code>count</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add or remove occurrences of; may be null
+ only if explicitly allowed by the implementation<DD><CODE>count</CODE> - the desired count of the element in this multiset
+<DT><B>Returns:</B><DD>the count of <code>element</code> in the multiset before this call
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>count</code> is negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setCount(java.lang.Object,int,int)"><!-- --></A><A NAME="setCount(E, int, int)"><!-- --></A><H3>
+setCount</H3>
+<PRE>
+public boolean <B>setCount</B>(<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&nbsp;element,
+ int&nbsp;oldCount,
+ int&nbsp;newCount)</PRE>
+<DL>
+<DD>Sets the number of occurrences of <code>element</code> to <code>newCount</code>, but
+ only if the count is currently <code>oldCount</code>. If <code>element</code> does
+ not appear in the multiset exactly <code>oldCount</code> times, no changes will
+ be made.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally set the count of; may be null
+ only if explicitly allowed by the implementation<DD><CODE>oldCount</CODE> - the expected present count of the element in this multiset<DD><CODE>newCount</CODE> - the desired count of the element in this multiset
+<DT><B>Returns:</B><DD><code>true</code> if the change was successful. This usually indicates
+ that the multiset has been modified, but not always: in the case that
+ <code>oldCount == newCount</code>, the method will return <code>true</code> if
+ the condition was met.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>oldCount</code> or <code>newCount</code> is
+ negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entrySet()"><!-- --></A><H3>
+entrySet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;&gt; <B>entrySet</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()">Multiset</A></CODE></B></DD>
+<DD>Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
+ the count of that element. This set contains exactly one entry for each
+ distinct element in the multiset (thus it always has the same size as the
+ <A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()"><CODE>Multiset.elementSet()</CODE></A>). The order of the elements in the element set is
+ unspecified.
+
+ <p>The entry set is backed by the same data as the multiset, so any change
+ to either is immediately reflected in the other. However, multiset changes
+ may or may not be reflected in any <code>Entry</code> instances already
+ retrieved from the entry set (this is implementation-dependent).
+ Furthermore, implementations are not required to support modifications to
+ the entry set at all, and the <code>Entry</code> instances themselves don't
+ even have methods for modification. See the specific implementation class
+ for more details on how its entry set handles modifications.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()">entrySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a set of entries representing the data of this multiset</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isEmpty()"><!-- --></A><H3>
+isEmpty</H3>
+<PRE>
+public boolean <B>isEmpty</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#isEmpty()" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this collection contains no elements.
+
+ <p>This implementation returns <tt>size() == 0</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection contains no elements</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="contains(java.lang.Object)"><!-- --></A><H3>
+contains</H3>
+<PRE>
+public boolean <B>contains</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this collection contains the specified element.
+ More formally, returns <tt>true</tt> if and only if this collection
+ contains at least one element <tt>e</tt> such that
+ <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>.
+
+ <p>This implementation iterates over the elements in the collection,
+ checking each element in turn for equality with the specified element.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#contains(java.lang.Object)">contains</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - element whose presence in this collection is to be tested
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection contains the specified
+ element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="iterator()"><!-- --></A><H3>
+iterator</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt; <B>iterator</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#iterator()" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Returns an iterator over the elements contained in this collection.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#iterator()">iterator</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true#iterator()" title="class or interface in java.lang">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>an iterator over the elements contained in this collection</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="add(java.lang.Object)"><!-- --></A><A NAME="add(E)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public boolean <B>add</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ E&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#add(E)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Ensures that this collection contains the specified element (optional
+ operation). Returns <tt>true</tt> if this collection changed as a
+ result of the call. (Returns <tt>false</tt> if this collection does
+ not permit duplicates and already contains the specified element.)<p>
+
+ Collections that support this operation may place limitations on what
+ elements may be added to this collection. In particular, some
+ collections will refuse to add <tt>null</tt> elements, and others will
+ impose restrictions on the type of elements that may be added.
+ Collection classes should clearly specify in their documentation any
+ restrictions on what elements may be added.<p>
+
+ If a collection refuses to add a particular element for any reason
+ other than that it already contains the element, it <i>must</i> throw
+ an exception (rather than returning <tt>false</tt>). This preserves
+ the invariant that a collection always contains the specified element
+ after this call returns.
+
+ <p>This implementation always throws an
+ <tt>UnsupportedOperationException</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E)">add</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - element whose presence in this collection is to be ensured
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the
+ call</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public boolean <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Removes a single instance of the specified element from this
+ collection, if it is present (optional operation). More formally,
+ removes an element <tt>e</tt> such that
+ <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>, if
+ this collection contains one or more such elements. Returns
+ <tt>true</tt> if this collection contained the specified element (or
+ equivalently, if this collection changed as a result of the call).
+
+ <p>This implementation iterates over the collection looking for the
+ specified element. If it finds the element, it removes the element
+ from the collection using the iterator's remove method.
+
+ <p>Note that this implementation throws an
+ <tt>UnsupportedOperationException</tt> if the iterator returned by this
+ collection's iterator method does not implement the <tt>remove</tt>
+ method and this collection contains the specified object.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - element to be removed from this collection, if present
+<DT><B>Returns:</B><DD><tt>true</tt> if an element was removed as a result of this call</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsAll(java.util.Collection)"><!-- --></A><H3>
+containsAll</H3>
+<PRE>
+public boolean <B>containsAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elements)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this collection contains all of the elements
+ in the specified collection.
+
+ <p>This implementation iterates over the specified collection,
+ checking each element returned by the iterator in turn to see
+ if it's contained in this collection. If all elements are so
+ contained <tt>true</tt> is returned, otherwise <tt>false</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#containsAll(java.util.Collection)">containsAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - collection to be checked for containment in this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection contains all of the elements
+ in the specified collection<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>AbstractCollection.contains(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addAll(java.util.Collection)"><!-- --></A><H3>
+addAll</H3>
+<PRE>
+public boolean <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends E&gt;&nbsp;elementsToAdd)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Adds all of the elements in the specified collection to this collection
+ (optional operation). The behavior of this operation is undefined if
+ the specified collection is modified while the operation is in progress.
+ (This implies that the behavior of this call is undefined if the
+ specified collection is this collection, and this collection is
+ nonempty.)
+
+ <p>This implementation iterates over the specified collection, and adds
+ each object returned by the iterator to this collection, in turn.
+
+ <p>Note that this implementation will throw an
+ <tt>UnsupportedOperationException</tt> unless <tt>add</tt> is
+ overridden (assuming the specified collection is non-empty).
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elementsToAdd</CODE> - collection containing elements to be added to this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the call<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#add(E)" title="class or interface in java.util"><CODE>AbstractCollection.add(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="removeAll(java.util.Collection)"><!-- --></A><H3>
+removeAll</H3>
+<PRE>
+public boolean <B>removeAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Removes all of this collection's elements that are also contained in the
+ specified collection (optional operation). After this call returns,
+ this collection will contain no elements in common with the specified
+ collection.
+
+ <p>This implementation iterates over this collection, checking each
+ element returned by the iterator in turn to see if it's contained
+ in the specified collection. If it's so contained, it's removed from
+ this collection with the iterator's <tt>remove</tt> method.
+
+ <p>Note that this implementation will throw an
+ <tt>UnsupportedOperationException</tt> if the iterator returned by the
+ <tt>iterator</tt> method does not implement the <tt>remove</tt> method
+ and this collection contains one or more elements in common with the
+ specified collection.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#removeAll(java.util.Collection)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elementsToRemove</CODE> - collection containing elements to be removed from this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the
+ call<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util"><CODE>AbstractCollection.remove(Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>AbstractCollection.contains(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="retainAll(java.util.Collection)"><!-- --></A><H3>
+retainAll</H3>
+<PRE>
+public boolean <B>retainAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Retains only the elements in this collection that are contained in the
+ specified collection (optional operation). In other words, removes from
+ this collection all of its elements that are not contained in the
+ specified collection.
+
+ <p>This implementation iterates over this collection, checking each
+ element returned by the iterator in turn to see if it's contained
+ in the specified collection. If it's not so contained, it's removed
+ from this collection with the iterator's <tt>remove</tt> method.
+
+ <p>Note that this implementation will throw an
+ <tt>UnsupportedOperationException</tt> if the iterator returned by the
+ <tt>iterator</tt> method does not implement the <tt>remove</tt> method
+ and this collection contains one or more elements not present in the
+ specified collection.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#retainAll(java.util.Collection)">retainAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elementsToRetain</CODE> - collection containing elements to be retained in this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the call<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util"><CODE>AbstractCollection.remove(Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>AbstractCollection.contains(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clear()"><!-- --></A><H3>
+clear</H3>
+<PRE>
+public void <B>clear</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#clear()" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Removes all of the elements from this collection (optional operation).
+ The collection will be empty after this method returns.
+
+ <p>This implementation iterates over this collection, removing each
+ element using the <tt>Iterator.remove</tt> operation. Most
+ implementations will probably choose to override this method for
+ efficiency.
+
+ <p>Note that this implementation will throw an
+ <tt>UnsupportedOperationException</tt> if the iterator returned by this
+ collection's <tt>iterator</tt> method does not implement the
+ <tt>remove</tt> method and this collection is non-empty.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="elementSet()"><!-- --></A><H3>
+elementSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt; <B>elementSet</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">Multiset</A></CODE></B></DD>
+<DD>Returns the set of distinct elements contained in this multiset. The
+ element set is backed by the same data as the multiset, so any change to
+ either is immediately reflected in the other. The order of the elements in
+ the element set is unspecified.
+
+ <p>If the element set supports any removal operations, these necessarily
+ cause <b>all</b> occurrences of the removed element(s) to be removed from
+ the multiset. Implementations are not expected to support the add
+ operations, although this is possible.
+
+ <p>A common use for the element set is to find the number of distinct
+ elements in the multiset: <code>elementSet().size()</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">elementSet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a view of the set of distinct elements in this multiset</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD>Indicates whether some other object is "equal to" this one.
+ <p>
+ The <code>equals</code> method implements an equivalence relation
+ on non-null object references:
+ <ul>
+ <li>It is <i>reflexive</i>: for any non-null reference value
+ <code>x</code>, <code>x.equals(x)</code> should return
+ <code>true</code>.
+ <li>It is <i>symmetric</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, <code>x.equals(y)</code>
+ should return <code>true</code> if and only if
+ <code>y.equals(x)</code> returns <code>true</code>.
+ <li>It is <i>transitive</i>: for any non-null reference values
+ <code>x</code>, <code>y</code>, and <code>z</code>, if
+ <code>x.equals(y)</code> returns <code>true</code> and
+ <code>y.equals(z)</code> returns <code>true</code>, then
+ <code>x.equals(z)</code> should return <code>true</code>.
+ <li>It is <i>consistent</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, multiple invocations of
+ <tt>x.equals(y)</tt> consistently return <code>true</code>
+ or consistently return <code>false</code>, provided no
+ information used in <code>equals</code> comparisons on the
+ objects is modified.
+ <li>For any non-null reference value <code>x</code>,
+ <code>x.equals(null)</code> should return <code>false</code>.
+ </ul>
+ <p>
+ The <tt>equals</tt> method for class <code>Object</code> implements
+ the most discriminating possible equivalence relation on objects;
+ that is, for any non-null reference values <code>x</code> and
+ <code>y</code>, this method returns <code>true</code> if and only
+ if <code>x</code> and <code>y</code> refer to the same object
+ (<code>x == y</code> has the value <code>true</code>).
+ <p>
+ Note that it is generally necessary to override the <tt>hashCode</tt>
+ method whenever this method is overridden, so as to maintain the
+ general contract for the <tt>hashCode</tt> method, which states
+ that equal objects must have equal hash codes.
+
+ <p>This implementation returns <code>true</code> if <code>other</code> is a multiset
+ of the same size and if, for each element, the two multisets have the same
+ count.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+public int <B>hashCode</B>()</PRE>
+<DL>
+<DD>Returns a hash code value for the object. This method is
+ supported for the benefit of hashtables such as those provided by
+ <code>java.util.Hashtable</code>.
+ <p>
+ The general contract of <code>hashCode</code> is:
+ <ul>
+ <li>Whenever it is invoked on the same object more than once during
+ an execution of a Java application, the <tt>hashCode</tt> method
+ must consistently return the same integer, provided no information
+ used in <tt>equals</tt> comparisons on the object is modified.
+ This integer need not remain consistent from one execution of an
+ application to another execution of the same application.
+ <li>If two objects are equal according to the <tt>equals(Object)</tt>
+ method, then calling the <code>hashCode</code> method on each of
+ the two objects must produce the same integer result.
+ <li>It is <em>not</em> required that if two objects are unequal
+ according to the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>
+ method, then calling the <tt>hashCode</tt> method on each of the
+ two objects must produce distinct integer results. However, the
+ programmer should be aware that producing distinct integer results
+ for unequal objects may improve the performance of hashtables.
+ </ul>
+ <p>
+ As much as is reasonably practical, the hashCode method defined by
+ class <tt>Object</tt> does return distinct integers for distinct
+ objects. (This is typically implemented by converting the internal
+ address of the object into an integer, but this implementation
+ technique is not required by the
+ Java<font size="-2"><sup>TM</sup></font> programming language.)
+
+ <p>This implementation returns the hash code of <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Returns a string representation of this collection. The string
+ representation consists of a list of the collection's elements in the
+ order they are returned by its iterator, enclosed in square brackets
+ (<tt>"[]"</tt>). Adjacent elements are separated by the characters
+ <tt>", "</tt> (comma and space). Elements are converted to strings as
+ by <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true#valueOf(java.lang.Object)" title="class or interface in java.lang"><CODE>String.valueOf(Object)</CODE></A>.
+
+ <p>This implementation returns the result of invoking <code>toString</code> on
+ <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#toString()">toString</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toString()" title="class or interface in java.util">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a string representation of this collection</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ConcurrentHashMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ConcurrentHashMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ConcurrentHashMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/EnumBiMap.html b/javadoc/com/google/common/collect/EnumBiMap.html
new file mode 100644
index 0000000..4043c97
--- /dev/null
+++ b/javadoc/com/google/common/collect/EnumBiMap.html
@@ -0,0 +1,753 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:15 PST 2009 -->
+<TITLE>
+EnumBiMap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="EnumBiMap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/EnumBiMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/EnumBiMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="EnumBiMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class EnumBiMap&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;V&gt;&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingMap</A>&lt;K,V&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.EnumBiMap&lt;K,V&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public final class <B>EnumBiMap&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;V&gt;&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</DL>
+</PRE>
+
+<P>
+A <code>BiMap</code> backed by two <code>EnumMap</code> instances. Null keys and values
+ are not permitted. An <code>EnumBiMap</code> and its inverse are both
+ serializable.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Mike Bostock</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.EnumBiMap">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">V</A>&gt;</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#clear()">clear</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all of the mappings from this map (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this map maps one or more keys to the
+ specified value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;V&gt;&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#create(java.lang.Class, java.lang.Class)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;K&gt;&nbsp;keyType,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;V&gt;&nbsp;valueType)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new, empty <code>EnumBiMap</code> using the specified key and value
+ types.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;V&gt;&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#create(java.util.Map)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new bimap with the same mappings as the specified map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#delegate()">delegate</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#entrySet()">entrySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> view of the mappings contained in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;V</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#forcePut(K, V)">forcePut</A></B>(K&nbsp;key,
+ V&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An alternate form of <code>put</code> that silently removes any existing entry
+ with the value <code>value</code> before proceeding with the <A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)"><CODE>BiMap.put(K, V)</CODE></A>
+ operation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;V,K&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#inverse()">inverse</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the inverse view of this bimap, which maps each of this bimap's
+ values to its associated key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;K&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#keySet()">keySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> view of the keys contained in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;<A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="type parameter in EnumBiMap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#keyType()">keyType</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the associated key type.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;V</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#put(K, V)">put</A></B>(K&nbsp;key,
+ V&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates the specified value with the specified key in this map
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all of the mappings from the specified map to this map
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;V</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes the mapping for a key from this map if it is present
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#values()">values</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> view of the values contained in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;<A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="type parameter in EnumBiMap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#valueType()">valueType</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the associated value type.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingMap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#get(java.lang.Object)">get</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#size()">size</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="create(java.lang.Class, java.lang.Class)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;V&gt;&gt; <A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A>&lt;K,V&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;K&gt;&nbsp;keyType,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;V&gt;&nbsp;valueType)</PRE>
+<DL>
+<DD>Returns a new, empty <code>EnumBiMap</code> using the specified key and value
+ types.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>keyType</CODE> - the key type<DD><CODE>valueType</CODE> - the value type</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="create(java.util.Map)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;V&gt;&gt; <A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A>&lt;K,V&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;map)</PRE>
+<DL>
+<DD>Returns a new bimap with the same mappings as the specified map. If the
+ specified map is an <code>EnumBiMap</code>, the new bimap has the same types as
+ the provided map. Otherwise, the specified map must contain at least one
+ mapping, in order to determine the key and value types.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>map</CODE> - the map whose mappings are to be placed in this map
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if map is not an <code>EnumBiMap</code>
+ instance and contains no mappings</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keyType()"><!-- --></A><H3>
+keyType</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;<A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="type parameter in EnumBiMap">K</A>&gt; <B>keyType</B>()</PRE>
+<DL>
+<DD>Returns the associated key type.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="valueType()"><!-- --></A><H3>
+valueType</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;<A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="type parameter in EnumBiMap">V</A>&gt; <B>valueType</B>()</PRE>
+<DL>
+<DD>Returns the associated value type.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="delegate()"><!-- --></A><H3>
+delegate</H3>
+<PRE>
+protected <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt; <B>delegate</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
+<DD>Returns the backing delegate instance that methods are forwarded to.
+ Abstract subclasses generally override this method with an abstract method
+ that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
+ the instance being decorated.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
+containsValue</H3>
+<PRE>
+public boolean <B>containsValue</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this map maps one or more keys to the
+ specified value. More formally, returns <tt>true</tt> if and only if
+ this map contains at least one mapping to a value <tt>v</tt> such that
+ <tt>(value==null ? v==null : value.equals(v))</tt>. This operation
+ will probably require time linear in the map size for most
+ implementations of the <tt>Map</tt> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsValue(java.lang.Object)">containsValue</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>value</CODE> - value whose presence in this map is to be tested
+<DT><B>Returns:</B><DD><tt>true</tt> if this map maps one or more keys to the
+ specified value</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
+put</H3>
+<PRE>
+public V <B>put</B>(K&nbsp;key,
+ V&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Associates the specified value with the specified key in this map
+ (optional operation). If the map previously contained a mapping for
+ the key, the old value is replaced by the specified value. (A map
+ <tt>m</tt> is said to contain a mapping for a key <tt>k</tt> if and only
+ if <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util"><CODE>m.containsKey(k)</CODE></A> would return
+ <tt>true</tt>.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)">put</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">put</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#put(K, V)">put</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key with which the specified value is to be associated<DD><CODE>value</CODE> - value to be associated with the specified key
+<DT><B>Returns:</B><DD>the previous value associated with <tt>key</tt>, or
+ <tt>null</tt> if there was no mapping for <tt>key</tt>.
+ (A <tt>null</tt> return can also indicate that the map
+ previously associated <tt>null</tt> with <tt>key</tt>,
+ if the implementation supports <tt>null</tt> values.)</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="forcePut(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="forcePut(K, V)"><!-- --></A><H3>
+forcePut</H3>
+<PRE>
+public V <B>forcePut</B>(K&nbsp;key,
+ V&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/BiMap.html#forcePut(K, V)">BiMap</A></CODE></B></DD>
+<DD>An alternate form of <code>put</code> that silently removes any existing entry
+ with the value <code>value</code> before proceeding with the <A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)"><CODE>BiMap.put(K, V)</CODE></A>
+ operation. If the bimap previously contained the provided key-value
+ mapping, this method has no effect.
+
+ <p>Note that a successful call to this method could cause the size of the
+ bimap to increase by one, stay the same, or even decrease by one.
+
+ <p><b>Warning</b>: If an existing entry with this value is removed, the key
+ for that entry is discarded and not returned.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#forcePut(K, V)">forcePut</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - the key with which the specified value is to be associated<DD><CODE>value</CODE> - the value to be associated with the specified key
+<DT><B>Returns:</B><DD>the value which was previously associated with the key, which may
+ be <code>null</code>, or <code>null</code> if there was no previous entry</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public V <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Removes the mapping for a key from this map if it is present
+ (optional operation). More formally, if this map contains a mapping
+ from key <tt>k</tt> to value <tt>v</tt> such that
+ <code>(key==null ? k==null : key.equals(k))</code>, that mapping
+ is removed. (The map can contain at most one such mapping.)
+
+ <p>Returns the value to which this map previously associated the key,
+ or <tt>null</tt> if the map contained no mapping for the key.
+
+ <p>If this map permits null values, then a return value of
+ <tt>null</tt> does not <i>necessarily</i> indicate that the map
+ contained no mapping for the key; it's also possible that the map
+ explicitly mapped the key to <tt>null</tt>.
+
+ <p>The map will not contain a mapping for the specified key once the
+ call returns.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#remove(java.lang.Object)">remove</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key whose mapping is to be removed from the map
+<DT><B>Returns:</B><DD>the previous value associated with <tt>key</tt>, or
+ <tt>null</tt> if there was no mapping for <tt>key</tt>.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(java.util.Map)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public void <B>putAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Copies all of the mappings from the specified map to this map
+ (optional operation). The effect of this call is equivalent to that
+ of calling <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util"><CODE>put(k, v)</CODE></A> on this map once
+ for each mapping from key <tt>k</tt> to value <tt>v</tt> in the
+ specified map. The behavior of this operation is undefined if the
+ specified map is modified while the operation is in progress.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#putAll(java.util.Map)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#putAll(java.util.Map)">putAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>map</CODE> - mappings to be stored in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clear()"><!-- --></A><H3>
+clear</H3>
+<PRE>
+public void <B>clear</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Removes all of the mappings from this map (optional operation).
+ The map will be empty after this call returns.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#clear()">clear</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="inverse()"><!-- --></A><H3>
+inverse</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;V,K&gt; <B>inverse</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/BiMap.html#inverse()">BiMap</A></CODE></B></DD>
+<DD>Returns the inverse view of this bimap, which maps each of this bimap's
+ values to its associated key. The two bimaps are backed by the same data;
+ any changes to one will appear in the other.
+
+ <p><b>Note:</b>There is no guaranteed correspondence between the iteration
+ order of a bimap and that of its inverse.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#inverse()">inverse</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the inverse view of this bimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keySet()"><!-- --></A><H3>
+keySet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;K&gt; <B>keySet</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> view of the keys contained in this map.
+ The set is backed by the map, so changes to the map are
+ reflected in the set, and vice-versa. If the map is modified
+ while an iteration over the set is in progress (except through
+ the iterator's own <tt>remove</tt> operation), the results of
+ the iteration are undefined. The set supports element removal,
+ which removes the corresponding mapping from the map, via the
+ <tt>Iterator.remove</tt>, <tt>Set.remove</tt>,
+ <tt>removeAll</tt>, <tt>retainAll</tt>, and <tt>clear</tt>
+ operations. It does not support the <tt>add</tt> or <tt>addAll</tt>
+ operations.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#keySet()">keySet</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a set view of the keys contained in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="values()"><!-- --></A><H3>
+values</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt; <B>values</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> view of the values contained in this map.
+ The collection is backed by the map, so changes to the map are
+ reflected in the collection, and vice-versa. If the map is
+ modified while an iteration over the collection is in progress
+ (except through the iterator's own <tt>remove</tt> operation),
+ the results of the iteration are undefined. The collection
+ supports element removal, which removes the corresponding
+ mapping from the map, via the <tt>Iterator.remove</tt>,
+ <tt>Collection.remove</tt>, <tt>removeAll</tt>,
+ <tt>retainAll</tt> and <tt>clear</tt> operations. It does not
+ support the <tt>add</tt> or <tt>addAll</tt> operations.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#values()">values</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#values()">values</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a collection view of the values contained in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entrySet()"><!-- --></A><H3>
+entrySet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt; <B>entrySet</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> view of the mappings contained in this map.
+ The set is backed by the map, so changes to the map are
+ reflected in the set, and vice-versa. If the map is modified
+ while an iteration over the set is in progress (except through
+ the iterator's own <tt>remove</tt> operation, or through the
+ <tt>setValue</tt> operation on a map entry returned by the
+ iterator) the results of the iteration are undefined. The set
+ supports element removal, which removes the corresponding
+ mapping from the map, via the <tt>Iterator.remove</tt>,
+ <tt>Set.remove</tt>, <tt>removeAll</tt>, <tt>retainAll</tt> and
+ <tt>clear</tt> operations. It does not support the
+ <tt>add</tt> or <tt>addAll</tt> operations.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#entrySet()">entrySet</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a set view of the mappings contained in this map</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/EnumBiMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/EnumBiMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="EnumBiMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/EnumHashBiMap.html b/javadoc/com/google/common/collect/EnumHashBiMap.html
new file mode 100644
index 0000000..878787c
--- /dev/null
+++ b/javadoc/com/google/common/collect/EnumHashBiMap.html
@@ -0,0 +1,731 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:15 PST 2009 -->
+<TITLE>
+EnumHashBiMap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="EnumHashBiMap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/EnumHashBiMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/EnumHashBiMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="EnumHashBiMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class EnumHashBiMap&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingMap</A>&lt;K,V&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.EnumHashBiMap&lt;K,V&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public final class <B>EnumHashBiMap&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</DL>
+</PRE>
+
+<P>
+A <code>BiMap</code> backed by an <code>EnumMap</code> instance for keys-to-values, and
+ a <code>HashMap</code> instance for values-to-keys. Null keys are not permitted,
+ but null values are. An <code>EnumHashBiMap</code> and its inverse are both
+ serializable.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Mike Bostock</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.EnumHashBiMap">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">V</A>&gt;</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#clear()">clear</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all of the mappings from this map (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this map maps one or more keys to the
+ specified value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#create(java.lang.Class)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;K&gt;&nbsp;keyType)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new, empty <code>EnumHashBiMap</code> using the specified key type.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#create(java.util.Map)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,? extends V&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new bimap with the same mappings as the specified map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#delegate()">delegate</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#entrySet()">entrySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> view of the mappings contained in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">V</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#forcePut(K, V)">forcePut</A></B>(<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An alternate form of <code>put</code> that silently removes any existing entry
+ with the value <code>value</code> before proceeding with the <A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)"><CODE>BiMap.put(K, V)</CODE></A>
+ operation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;V,K&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#inverse()">inverse</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the inverse view of this bimap, which maps each of this bimap's
+ values to its associated key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;K&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#keySet()">keySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> view of the keys contained in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#keyType()">keyType</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the associated key type.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">V</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates the specified value with the specified key in this map
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all of the mappings from the specified map to this map
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;V</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes the mapping for a key from this map if it is present
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#values()">values</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> view of the values contained in this map.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingMap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#get(java.lang.Object)">get</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#size()">size</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="create(java.lang.Class)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V&gt; <A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>&lt;K,V&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;K&gt;&nbsp;keyType)</PRE>
+<DL>
+<DD>Returns a new, empty <code>EnumHashBiMap</code> using the specified key type.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>keyType</CODE> - the key type</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="create(java.util.Map)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V&gt; <A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>&lt;K,V&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,? extends V&gt;&nbsp;map)</PRE>
+<DL>
+<DD>Constructs a new bimap with the same mappings as the specified map. If the
+ specified map is an <code>EnumHashBiMap</code> or an <A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect"><CODE>EnumBiMap</CODE></A>, the new
+ bimap has the same key type as the input bimap. Otherwise, the specified
+ map must contain at least one mapping, in order to determine the key type.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>map</CODE> - the map whose mappings are to be placed in this map
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if map is not an <code>EnumBiMap</code> or an
+ <code>EnumHashBiMap</code> instance and contains no mappings</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="put(java.lang.Enum,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
+put</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">V</A> <B>put</B>(<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A>&nbsp;key,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">V</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Associates the specified value with the specified key in this map
+ (optional operation). If the map previously contained a mapping for
+ the key, the old value is replaced by the specified value. (A map
+ <tt>m</tt> is said to contain a mapping for a key <tt>k</tt> if and only
+ if <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util"><CODE>m.containsKey(k)</CODE></A> would return
+ <tt>true</tt>.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)">put</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A>&gt;,<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">put</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A>&gt;,<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key with which the specified value is to be associated<DD><CODE>value</CODE> - value to be associated with the specified key
+<DT><B>Returns:</B><DD>the previous value associated with <tt>key</tt>, or
+ <tt>null</tt> if there was no mapping for <tt>key</tt>.
+ (A <tt>null</tt> return can also indicate that the map
+ previously associated <tt>null</tt> with <tt>key</tt>,
+ if the implementation supports <tt>null</tt> values.)</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="forcePut(java.lang.Enum,java.lang.Object)"><!-- --></A><A NAME="forcePut(K, V)"><!-- --></A><H3>
+forcePut</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">V</A> <B>forcePut</B>(<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A>&nbsp;key,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">V</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/BiMap.html#forcePut(K, V)">BiMap</A></CODE></B></DD>
+<DD>An alternate form of <code>put</code> that silently removes any existing entry
+ with the value <code>value</code> before proceeding with the <A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)"><CODE>BiMap.put(K, V)</CODE></A>
+ operation. If the bimap previously contained the provided key-value
+ mapping, this method has no effect.
+
+ <p>Note that a successful call to this method could cause the size of the
+ bimap to increase by one, stay the same, or even decrease by one.
+
+ <p><b>Warning</b>: If an existing entry with this value is removed, the key
+ for that entry is discarded and not returned.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#forcePut(K, V)">forcePut</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A>&gt;,<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - the key with which the specified value is to be associated<DD><CODE>value</CODE> - the value to be associated with the specified key
+<DT><B>Returns:</B><DD>the value which was previously associated with the key, which may
+ be <code>null</code>, or <code>null</code> if there was no previous entry</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keyType()"><!-- --></A><H3>
+keyType</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A>&gt; <B>keyType</B>()</PRE>
+<DL>
+<DD>Returns the associated key type.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="delegate()"><!-- --></A><H3>
+delegate</H3>
+<PRE>
+protected <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt; <B>delegate</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
+<DD>Returns the backing delegate instance that methods are forwarded to.
+ Abstract subclasses generally override this method with an abstract method
+ that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
+ the instance being decorated.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
+containsValue</H3>
+<PRE>
+public boolean <B>containsValue</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this map maps one or more keys to the
+ specified value. More formally, returns <tt>true</tt> if and only if
+ this map contains at least one mapping to a value <tt>v</tt> such that
+ <tt>(value==null ? v==null : value.equals(v))</tt>. This operation
+ will probably require time linear in the map size for most
+ implementations of the <tt>Map</tt> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsValue(java.lang.Object)">containsValue</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>value</CODE> - value whose presence in this map is to be tested
+<DT><B>Returns:</B><DD><tt>true</tt> if this map maps one or more keys to the
+ specified value</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public V <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Removes the mapping for a key from this map if it is present
+ (optional operation). More formally, if this map contains a mapping
+ from key <tt>k</tt> to value <tt>v</tt> such that
+ <code>(key==null ? k==null : key.equals(k))</code>, that mapping
+ is removed. (The map can contain at most one such mapping.)
+
+ <p>Returns the value to which this map previously associated the key,
+ or <tt>null</tt> if the map contained no mapping for the key.
+
+ <p>If this map permits null values, then a return value of
+ <tt>null</tt> does not <i>necessarily</i> indicate that the map
+ contained no mapping for the key; it's also possible that the map
+ explicitly mapped the key to <tt>null</tt>.
+
+ <p>The map will not contain a mapping for the specified key once the
+ call returns.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#remove(java.lang.Object)">remove</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key whose mapping is to be removed from the map
+<DT><B>Returns:</B><DD>the previous value associated with <tt>key</tt>, or
+ <tt>null</tt> if there was no mapping for <tt>key</tt>.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(java.util.Map)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public void <B>putAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Copies all of the mappings from the specified map to this map
+ (optional operation). The effect of this call is equivalent to that
+ of calling <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util"><CODE>put(k, v)</CODE></A> on this map once
+ for each mapping from key <tt>k</tt> to value <tt>v</tt> in the
+ specified map. The behavior of this operation is undefined if the
+ specified map is modified while the operation is in progress.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#putAll(java.util.Map)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#putAll(java.util.Map)">putAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>map</CODE> - mappings to be stored in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clear()"><!-- --></A><H3>
+clear</H3>
+<PRE>
+public void <B>clear</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Removes all of the mappings from this map (optional operation).
+ The map will be empty after this call returns.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#clear()">clear</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="inverse()"><!-- --></A><H3>
+inverse</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;V,K&gt; <B>inverse</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/BiMap.html#inverse()">BiMap</A></CODE></B></DD>
+<DD>Returns the inverse view of this bimap, which maps each of this bimap's
+ values to its associated key. The two bimaps are backed by the same data;
+ any changes to one will appear in the other.
+
+ <p><b>Note:</b>There is no guaranteed correspondence between the iteration
+ order of a bimap and that of its inverse.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#inverse()">inverse</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the inverse view of this bimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keySet()"><!-- --></A><H3>
+keySet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;K&gt; <B>keySet</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> view of the keys contained in this map.
+ The set is backed by the map, so changes to the map are
+ reflected in the set, and vice-versa. If the map is modified
+ while an iteration over the set is in progress (except through
+ the iterator's own <tt>remove</tt> operation), the results of
+ the iteration are undefined. The set supports element removal,
+ which removes the corresponding mapping from the map, via the
+ <tt>Iterator.remove</tt>, <tt>Set.remove</tt>,
+ <tt>removeAll</tt>, <tt>retainAll</tt>, and <tt>clear</tt>
+ operations. It does not support the <tt>add</tt> or <tt>addAll</tt>
+ operations.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#keySet()">keySet</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a set view of the keys contained in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="values()"><!-- --></A><H3>
+values</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt; <B>values</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> view of the values contained in this map.
+ The collection is backed by the map, so changes to the map are
+ reflected in the collection, and vice-versa. If the map is
+ modified while an iteration over the collection is in progress
+ (except through the iterator's own <tt>remove</tt> operation),
+ the results of the iteration are undefined. The collection
+ supports element removal, which removes the corresponding
+ mapping from the map, via the <tt>Iterator.remove</tt>,
+ <tt>Collection.remove</tt>, <tt>removeAll</tt>,
+ <tt>retainAll</tt> and <tt>clear</tt> operations. It does not
+ support the <tt>add</tt> or <tt>addAll</tt> operations.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#values()">values</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#values()">values</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a collection view of the values contained in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entrySet()"><!-- --></A><H3>
+entrySet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt; <B>entrySet</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> view of the mappings contained in this map.
+ The set is backed by the map, so changes to the map are
+ reflected in the set, and vice-versa. If the map is modified
+ while an iteration over the set is in progress (except through
+ the iterator's own <tt>remove</tt> operation, or through the
+ <tt>setValue</tt> operation on a map entry returned by the
+ iterator) the results of the iteration are undefined. The set
+ supports element removal, which removes the corresponding
+ mapping from the map, via the <tt>Iterator.remove</tt>,
+ <tt>Set.remove</tt>, <tt>removeAll</tt>, <tt>retainAll</tt> and
+ <tt>clear</tt> operations. It does not support the
+ <tt>add</tt> or <tt>addAll</tt> operations.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#entrySet()">entrySet</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a set view of the mappings contained in this map</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/EnumHashBiMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/EnumHashBiMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="EnumHashBiMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/EnumMultiset.html b/javadoc/com/google/common/collect/EnumMultiset.html
new file mode 100644
index 0000000..f1418aa
--- /dev/null
+++ b/javadoc/com/google/common/collect/EnumMultiset.html
@@ -0,0 +1,1126 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:15 PST 2009 -->
+<TITLE>
+EnumMultiset (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="EnumMultiset (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/EnumMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/EnumMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="EnumMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class EnumMultiset&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">java.util.AbstractCollection</A>&lt;E&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.EnumMultiset&lt;E&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public final class <B>EnumMultiset&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</DL>
+</PRE>
+
+<P>
+Multiset implementation backed by an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumMap.html?is-external=true" title="class or interface in java.util"><CODE>EnumMap</CODE></A>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Jared Levy</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.EnumMultiset">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="nested_classes_inherited_from_class_com.google.common.collect.Multiset"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="type parameter in Multiset.Entry">E</A>&gt;</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#add(E)">add</A></B>(E&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures that this collection contains the specified element (optional
+ operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#add(E, int)">add</A></B>(E&nbsp;element,
+ int&nbsp;occurrences)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a number of occurrences of an element to this multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#addAll(java.util.Collection)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends E&gt;&nbsp;elementsToAdd)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds all of the elements in the specified collection to this collection
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#clear()">clear</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all of the elements from this collection (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#contains(java.lang.Object)">contains</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this collection contains the specified element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#containsAll(java.util.Collection)">containsAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this collection contains all of the elements
+ in the specified collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#count(java.lang.Object)">count</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of occurrences of an element in this multiset (the
+ <i>count</i> of the element).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#create(java.lang.Class)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;E&gt;&nbsp;type)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an empty <code>EnumMultiset</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#create(java.lang.Iterable)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>EnumMultiset</code> containing the specified elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#elementSet()">elementSet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of distinct elements contained in this multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;E&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#entrySet()">entrySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
+ the count of that element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indicates whether some other object is "equal to" this one.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code value for the object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#isEmpty()">isEmpty</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this collection contains no elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#iterator()">iterator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator over the elements contained in this collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a single instance of the specified element from this
+ collection, if it is present (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#remove(java.lang.Object, int)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
+ int&nbsp;occurrences)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a number of occurrences of the specified element from this
+ multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#removeAll(java.util.Collection)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all of this collection's elements that are also contained in the
+ specified collection (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#retainAll(java.util.Collection)">retainAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retains only the elements in this collection that are contained in the
+ specified collection (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#setCount(E, int)">setCount</A></B>(E&nbsp;element,
+ int&nbsp;count)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds or removes the necessary occurrences of an element such that the
+ element attains the desired count.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#setCount(E, int, int)">setCount</A></B>(E&nbsp;element,
+ int&nbsp;oldCount,
+ int&nbsp;newCount)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Conditionally sets the count of an element to a new value, as described in
+ <A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)"><CODE>Multiset.setCount(Object, int)</CODE></A>, provided that the element has the expected
+ current count.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#size()">size</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of elements in this collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string representation of this collection.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.AbstractCollection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Collection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="create(java.lang.Class)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; <A HREF="../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset</A>&lt;E&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;E&gt;&nbsp;type)</PRE>
+<DL>
+<DD>Creates an empty <code>EnumMultiset</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="create(java.lang.Iterable)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; <A HREF="../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset</A>&lt;E&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Creates a new <code>EnumMultiset</code> containing the specified elements.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements that the multiset should contain
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>elements</code> is empty</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entrySet()"><!-- --></A><H3>
+entrySet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;E&gt;&gt; <B>entrySet</B>()</PRE>
+<DL>
+<DD>Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
+ the count of that element. This set contains exactly one entry for each
+ distinct element in the multiset (thus it always has the same size as the
+ <A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()"><CODE>Multiset.elementSet()</CODE></A>). The order of the elements in the element set is
+ unspecified.
+
+ <p>The entry set is backed by the same data as the multiset, so any change
+ to either is immediately reflected in the other. However, multiset changes
+ may or may not be reflected in any <code>Entry</code> instances already
+ retrieved from the entry set (this is implementation-dependent).
+ Furthermore, implementations are not required to support modifications to
+ the entry set at all, and the <code>Entry</code> instances themselves don't
+ even have methods for modification. See the specific implementation class
+ for more details on how its entry set handles modifications.
+
+ <p>Invoking <A HREF="../../../../com/google/common/collect/Multiset.Entry.html#getCount()"><CODE>Multiset.Entry.getCount()</CODE></A> on an entry in the returned
+ set always returns the current count of that element in the multiset, as
+ opposed to the count at the time the entry was retrieved.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()">entrySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a set of entries representing the data of this multiset</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="size()"><!-- --></A><H3>
+size</H3>
+<PRE>
+public int <B>size</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">java.util.Collection</A></CODE></B></DD>
+<DD>Returns the number of elements in this collection. If this collection
+ contains more than <tt>Integer.MAX_VALUE</tt> elements, returns
+ <tt>Integer.MAX_VALUE</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the number of elements in this collection</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="iterator()"><!-- --></A><H3>
+iterator</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt; <B>iterator</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#iterator()" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Returns an iterator over the elements contained in this collection.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#iterator()">iterator</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true#iterator()" title="class or interface in java.lang">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>an iterator over the elements contained in this collection</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="count(java.lang.Object)"><!-- --></A><H3>
+count</H3>
+<PRE>
+public int <B>count</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">Multiset</A></CODE></B></DD>
+<DD>Returns the number of occurrences of an element in this multiset (the
+ <i>count</i> of the element). Note that for an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>-based
+ multiset, this gives the same result as <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#frequency(java.util.Collection, java.lang.Object)" title="class or interface in java.util"><CODE>Collections.frequency(java.util.Collection<?>, java.lang.Object)</CODE></A>
+ (which would presumably perform more poorly).
+
+ <p><b>Note:</b> the utility method <A HREF="../../../../com/google/common/collect/Iterables.html#frequency(java.lang.Iterable, java.lang.Object)"><CODE>Iterables.frequency(java.lang.Iterable<?>, java.lang.Object)</CODE></A> generalizes
+ this operation; it correctly delegates to this method when dealing with a
+ multiset, but it can also accept any other iterable type.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">count</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to count occurrences of
+<DT><B>Returns:</B><DD>the number of occurrences of the element in this multiset; possibly
+ zero but never negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="add(java.lang.Object,int)"><!-- --></A><A NAME="add(E, int)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public int <B>add</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ E&nbsp;element,
+ int&nbsp;occurrences)</PRE>
+<DL>
+<DD>Adds a number of occurrences of an element to this multiset. Note that if
+ <code>occurrences == 1</code>, this method has the identical effect to <A HREF="../../../../com/google/common/collect/Multiset.html#add(E)"><CODE>Multiset.add(Object)</CODE></A>. This method is functionally equivalent (except in the case
+ of overflow) to the call <code>addAll(Collections.nCopies(element,
+ occurrences))</code>, which would presumably perform much more poorly.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E, int)">add</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add occurrences of; may be <code>null</code> only
+ if explicitly allowed by the implementation<DD><CODE>occurrences</CODE> - the number of occurrences of the element to add. May be
+ zero, in which case no change will be made.
+<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the call would result in more than
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Integer.MAX_VALUE</CODE></A> occurrences of <code>element</code> in this
+ multiset.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object, int)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public int <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
+ int&nbsp;occurrences)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object, int)">Multiset</A></CODE></B></DD>
+<DD>Removes a number of occurrences of the specified element from this
+ multiset. If the multiset contains fewer than this number of occurrences to
+ begin with, all occurrences will be removed. Note that if
+ <code>occurrences == 1</code>, this is functionally equivalent to the call
+ <code>remove(element)</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object, int)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally remove occurrences of<DD><CODE>occurrences</CODE> - the number of occurrences of the element to remove. May
+ be zero, in which case no change will be made.
+<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setCount(java.lang.Object,int)"><!-- --></A><A NAME="setCount(E, int)"><!-- --></A><H3>
+setCount</H3>
+<PRE>
+public int <B>setCount</B>(E&nbsp;element,
+ int&nbsp;count)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)">Multiset</A></CODE></B></DD>
+<DD>Adds or removes the necessary occurrences of an element such that the
+ element attains the desired count.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add or remove occurrences of; may be null
+ only if explicitly allowed by the implementation<DD><CODE>count</CODE> - the desired count of the element in this multiset
+<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isEmpty()"><!-- --></A><H3>
+isEmpty</H3>
+<PRE>
+public boolean <B>isEmpty</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#isEmpty()" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this collection contains no elements.
+
+ <p>This implementation returns <tt>size() == 0</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection contains no elements</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="contains(java.lang.Object)"><!-- --></A><H3>
+contains</H3>
+<PRE>
+public boolean <B>contains</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this collection contains the specified element.
+ More formally, returns <tt>true</tt> if and only if this collection
+ contains at least one element <tt>e</tt> such that
+ <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>.
+
+ <p>This implementation iterates over the elements in the collection,
+ checking each element in turn for equality with the specified element.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#contains(java.lang.Object)">contains</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - element whose presence in this collection is to be tested
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection contains the specified
+ element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="add(java.lang.Object)"><!-- --></A><A NAME="add(E)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public boolean <B>add</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ E&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#add(E)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Ensures that this collection contains the specified element (optional
+ operation). Returns <tt>true</tt> if this collection changed as a
+ result of the call. (Returns <tt>false</tt> if this collection does
+ not permit duplicates and already contains the specified element.)<p>
+
+ Collections that support this operation may place limitations on what
+ elements may be added to this collection. In particular, some
+ collections will refuse to add <tt>null</tt> elements, and others will
+ impose restrictions on the type of elements that may be added.
+ Collection classes should clearly specify in their documentation any
+ restrictions on what elements may be added.<p>
+
+ If a collection refuses to add a particular element for any reason
+ other than that it already contains the element, it <i>must</i> throw
+ an exception (rather than returning <tt>false</tt>). This preserves
+ the invariant that a collection always contains the specified element
+ after this call returns.
+
+ <p>This implementation always throws an
+ <tt>UnsupportedOperationException</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E)">add</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - element whose presence in this collection is to be ensured
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the
+ call</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public boolean <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Removes a single instance of the specified element from this
+ collection, if it is present (optional operation). More formally,
+ removes an element <tt>e</tt> such that
+ <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>, if
+ this collection contains one or more such elements. Returns
+ <tt>true</tt> if this collection contained the specified element (or
+ equivalently, if this collection changed as a result of the call).
+
+ <p>This implementation iterates over the collection looking for the
+ specified element. If it finds the element, it removes the element
+ from the collection using the iterator's remove method.
+
+ <p>Note that this implementation throws an
+ <tt>UnsupportedOperationException</tt> if the iterator returned by this
+ collection's iterator method does not implement the <tt>remove</tt>
+ method and this collection contains the specified object.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - element to be removed from this collection, if present
+<DT><B>Returns:</B><DD><tt>true</tt> if an element was removed as a result of this call</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setCount(java.lang.Object,int,int)"><!-- --></A><A NAME="setCount(E, int, int)"><!-- --></A><H3>
+setCount</H3>
+<PRE>
+public boolean <B>setCount</B>(E&nbsp;element,
+ int&nbsp;oldCount,
+ int&nbsp;newCount)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int, int)">Multiset</A></CODE></B></DD>
+<DD>Conditionally sets the count of an element to a new value, as described in
+ <A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)"><CODE>Multiset.setCount(Object, int)</CODE></A>, provided that the element has the expected
+ current count. If the current count is not <code>oldCount</code>, no change is
+ made.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally set the count of; may be null
+ only if explicitly allowed by the implementation<DD><CODE>oldCount</CODE> - the expected present count of the element in this multiset<DD><CODE>newCount</CODE> - the desired count of the element in this multiset
+<DT><B>Returns:</B><DD><code>true</code> if the condition for modification was met. This
+ implies that the multiset was indeed modified, unless
+ <code>oldCount == newCount</code>.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsAll(java.util.Collection)"><!-- --></A><H3>
+containsAll</H3>
+<PRE>
+public boolean <B>containsAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elements)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this collection contains all of the elements
+ in the specified collection.
+
+ <p>This implementation iterates over the specified collection,
+ checking each element returned by the iterator in turn to see
+ if it's contained in this collection. If all elements are so
+ contained <tt>true</tt> is returned, otherwise <tt>false</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#containsAll(java.util.Collection)">containsAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - collection to be checked for containment in this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection contains all of the elements
+ in the specified collection<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>AbstractCollection.contains(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addAll(java.util.Collection)"><!-- --></A><H3>
+addAll</H3>
+<PRE>
+public boolean <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends E&gt;&nbsp;elementsToAdd)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Adds all of the elements in the specified collection to this collection
+ (optional operation). The behavior of this operation is undefined if
+ the specified collection is modified while the operation is in progress.
+ (This implies that the behavior of this call is undefined if the
+ specified collection is this collection, and this collection is
+ nonempty.)
+
+ <p>This implementation iterates over the specified collection, and adds
+ each object returned by the iterator to this collection, in turn.
+
+ <p>Note that this implementation will throw an
+ <tt>UnsupportedOperationException</tt> unless <tt>add</tt> is
+ overridden (assuming the specified collection is non-empty).
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elementsToAdd</CODE> - collection containing elements to be added to this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the call<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#add(E)" title="class or interface in java.util"><CODE>AbstractCollection.add(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="removeAll(java.util.Collection)"><!-- --></A><H3>
+removeAll</H3>
+<PRE>
+public boolean <B>removeAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Removes all of this collection's elements that are also contained in the
+ specified collection (optional operation). After this call returns,
+ this collection will contain no elements in common with the specified
+ collection.
+
+ <p>This implementation iterates over this collection, checking each
+ element returned by the iterator in turn to see if it's contained
+ in the specified collection. If it's so contained, it's removed from
+ this collection with the iterator's <tt>remove</tt> method.
+
+ <p>Note that this implementation will throw an
+ <tt>UnsupportedOperationException</tt> if the iterator returned by the
+ <tt>iterator</tt> method does not implement the <tt>remove</tt> method
+ and this collection contains one or more elements in common with the
+ specified collection.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#removeAll(java.util.Collection)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elementsToRemove</CODE> - collection containing elements to be removed from this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the
+ call<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util"><CODE>AbstractCollection.remove(Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>AbstractCollection.contains(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="retainAll(java.util.Collection)"><!-- --></A><H3>
+retainAll</H3>
+<PRE>
+public boolean <B>retainAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Retains only the elements in this collection that are contained in the
+ specified collection (optional operation). In other words, removes from
+ this collection all of its elements that are not contained in the
+ specified collection.
+
+ <p>This implementation iterates over this collection, checking each
+ element returned by the iterator in turn to see if it's contained
+ in the specified collection. If it's not so contained, it's removed
+ from this collection with the iterator's <tt>remove</tt> method.
+
+ <p>Note that this implementation will throw an
+ <tt>UnsupportedOperationException</tt> if the iterator returned by the
+ <tt>iterator</tt> method does not implement the <tt>remove</tt> method
+ and this collection contains one or more elements not present in the
+ specified collection.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#retainAll(java.util.Collection)">retainAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elementsToRetain</CODE> - collection containing elements to be retained in this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the call<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util"><CODE>AbstractCollection.remove(Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>AbstractCollection.contains(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clear()"><!-- --></A><H3>
+clear</H3>
+<PRE>
+public void <B>clear</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#clear()" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Removes all of the elements from this collection (optional operation).
+ The collection will be empty after this method returns.
+
+ <p>This implementation iterates over this collection, removing each
+ element using the <tt>Iterator.remove</tt> operation. Most
+ implementations will probably choose to override this method for
+ efficiency.
+
+ <p>Note that this implementation will throw an
+ <tt>UnsupportedOperationException</tt> if the iterator returned by this
+ collection's <tt>iterator</tt> method does not implement the
+ <tt>remove</tt> method and this collection is non-empty.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="elementSet()"><!-- --></A><H3>
+elementSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt; <B>elementSet</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">Multiset</A></CODE></B></DD>
+<DD>Returns the set of distinct elements contained in this multiset. The
+ element set is backed by the same data as the multiset, so any change to
+ either is immediately reflected in the other. The order of the elements in
+ the element set is unspecified.
+
+ <p>If the element set supports any removal operations, these necessarily
+ cause <b>all</b> occurrences of the removed element(s) to be removed from
+ the multiset. Implementations are not expected to support the add
+ operations, although this is possible.
+
+ <p>A common use for the element set is to find the number of distinct
+ elements in the multiset: <code>elementSet().size()</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">elementSet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a view of the set of distinct elements in this multiset</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD>Indicates whether some other object is "equal to" this one.
+ <p>
+ The <code>equals</code> method implements an equivalence relation
+ on non-null object references:
+ <ul>
+ <li>It is <i>reflexive</i>: for any non-null reference value
+ <code>x</code>, <code>x.equals(x)</code> should return
+ <code>true</code>.
+ <li>It is <i>symmetric</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, <code>x.equals(y)</code>
+ should return <code>true</code> if and only if
+ <code>y.equals(x)</code> returns <code>true</code>.
+ <li>It is <i>transitive</i>: for any non-null reference values
+ <code>x</code>, <code>y</code>, and <code>z</code>, if
+ <code>x.equals(y)</code> returns <code>true</code> and
+ <code>y.equals(z)</code> returns <code>true</code>, then
+ <code>x.equals(z)</code> should return <code>true</code>.
+ <li>It is <i>consistent</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, multiple invocations of
+ <tt>x.equals(y)</tt> consistently return <code>true</code>
+ or consistently return <code>false</code>, provided no
+ information used in <code>equals</code> comparisons on the
+ objects is modified.
+ <li>For any non-null reference value <code>x</code>,
+ <code>x.equals(null)</code> should return <code>false</code>.
+ </ul>
+ <p>
+ The <tt>equals</tt> method for class <code>Object</code> implements
+ the most discriminating possible equivalence relation on objects;
+ that is, for any non-null reference values <code>x</code> and
+ <code>y</code>, this method returns <code>true</code> if and only
+ if <code>x</code> and <code>y</code> refer to the same object
+ (<code>x == y</code> has the value <code>true</code>).
+ <p>
+ Note that it is generally necessary to override the <tt>hashCode</tt>
+ method whenever this method is overridden, so as to maintain the
+ general contract for the <tt>hashCode</tt> method, which states
+ that equal objects must have equal hash codes.
+
+ <p>This implementation returns <code>true</code> if <code>other</code> is a multiset
+ of the same size and if, for each element, the two multisets have the same
+ count.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+public int <B>hashCode</B>()</PRE>
+<DL>
+<DD>Returns a hash code value for the object. This method is
+ supported for the benefit of hashtables such as those provided by
+ <code>java.util.Hashtable</code>.
+ <p>
+ The general contract of <code>hashCode</code> is:
+ <ul>
+ <li>Whenever it is invoked on the same object more than once during
+ an execution of a Java application, the <tt>hashCode</tt> method
+ must consistently return the same integer, provided no information
+ used in <tt>equals</tt> comparisons on the object is modified.
+ This integer need not remain consistent from one execution of an
+ application to another execution of the same application.
+ <li>If two objects are equal according to the <tt>equals(Object)</tt>
+ method, then calling the <code>hashCode</code> method on each of
+ the two objects must produce the same integer result.
+ <li>It is <em>not</em> required that if two objects are unequal
+ according to the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>
+ method, then calling the <tt>hashCode</tt> method on each of the
+ two objects must produce distinct integer results. However, the
+ programmer should be aware that producing distinct integer results
+ for unequal objects may improve the performance of hashtables.
+ </ul>
+ <p>
+ As much as is reasonably practical, the hashCode method defined by
+ class <tt>Object</tt> does return distinct integers for distinct
+ objects. (This is typically implemented by converting the internal
+ address of the object into an integer, but this implementation
+ technique is not required by the
+ Java<font size="-2"><sup>TM</sup></font> programming language.)
+
+ <p>This implementation returns the hash code of <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Returns a string representation of this collection. The string
+ representation consists of a list of the collection's elements in the
+ order they are returned by its iterator, enclosed in square brackets
+ (<tt>"[]"</tt>). Adjacent elements are separated by the characters
+ <tt>", "</tt> (comma and space). Elements are converted to strings as
+ by <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true#valueOf(java.lang.Object)" title="class or interface in java.lang"><CODE>String.valueOf(Object)</CODE></A>.
+
+ <p>This implementation returns the result of invoking <code>toString</code> on
+ <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#toString()">toString</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toString()" title="class or interface in java.util">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a string representation of this collection</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/EnumMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/EnumMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="EnumMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingCollection.html b/javadoc/com/google/common/collect/ForwardingCollection.html
new file mode 100644
index 0000000..3551bee
--- /dev/null
+++ b/javadoc/com/google/common/collect/ForwardingCollection.html
@@ -0,0 +1,740 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:15 PST 2009 -->
+<TITLE>
+ForwardingCollection (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ForwardingCollection (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingCollection.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingCollection.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingCollection.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ForwardingCollection&lt;E&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingCollection&lt;E&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</DD>
+</DL>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>, <A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>, <A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect">ForwardingQueue</A>, <A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>ForwardingCollection&lt;E&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A><DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</DL>
+</PRE>
+
+<P>
+A collection which forwards all its method calls to another collection.
+ Subclasses should override one or more methods to modify the behavior of
+ the backing collection as desired per the <a
+ href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A></DL>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#ForwardingCollection()">ForwardingCollection</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#add(E)">add</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures that this collection contains the specified element (optional
+ operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#addAll(java.util.Collection)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;&nbsp;collection)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds all of the elements in the specified collection to this collection
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#clear()">clear</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all of the elements from this collection (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#contains(java.lang.Object)">contains</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this collection contains the specified element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#containsAll(java.util.Collection)">containsAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;collection)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this collection contains all of the elements
+ in the specified collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected abstract &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#delegate()">delegate</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#isEmpty()">isEmpty</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this collection contains no elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#iterator()">iterator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator over the elements in this collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a single instance of the specified element from this
+ collection, if it is present (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#removeAll(java.util.Collection)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;collection)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all of this collection's elements that are also contained in the
+ specified collection (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#retainAll(java.util.Collection)">retainAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;collection)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retains only the elements in this collection that are contained in the
+ specified collection (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#size()">size</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of elements in this collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#toArray()">toArray</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array containing all of the elements in this collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#toArray(T[])">toArray</A></B>(T[]&nbsp;array)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array containing all of the elements in this collection;
+ the runtime type of the returned array is that of the specified array.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Collection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ForwardingCollection()"><!-- --></A><H3>
+ForwardingCollection</H3>
+<PRE>
+public <B>ForwardingCollection</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="delegate()"><!-- --></A><H3>
+delegate</H3>
+<PRE>
+protected abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt; <B>delegate</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
+<DD>Returns the backing delegate instance that methods are forwarded to.
+ Abstract subclasses generally override this method with an abstract method
+ that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
+ the instance being decorated.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="iterator()"><!-- --></A><H3>
+iterator</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt; <B>iterator</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#iterator()" title="class or interface in java.util">java.util.Collection</A></CODE></B></DD>
+<DD>Returns an iterator over the elements in this collection. There are no
+ guarantees concerning the order in which the elements are returned
+ (unless this collection is an instance of some class that provides a
+ guarantee).
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true#iterator()" title="class or interface in java.lang">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>an <tt>Iterator</tt> over the elements in this collection</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="size()"><!-- --></A><H3>
+size</H3>
+<PRE>
+public int <B>size</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">java.util.Collection</A></CODE></B></DD>
+<DD>Returns the number of elements in this collection. If this collection
+ contains more than <tt>Integer.MAX_VALUE</tt> elements, returns
+ <tt>Integer.MAX_VALUE</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the number of elements in this collection</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="removeAll(java.util.Collection)"><!-- --></A><H3>
+removeAll</H3>
+<PRE>
+public boolean <B>removeAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;collection)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">java.util.Collection</A></CODE></B></DD>
+<DD>Removes all of this collection's elements that are also contained in the
+ specified collection (optional operation). After this call returns,
+ this collection will contain no elements in common with the specified
+ collection.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>collection</CODE> - collection containing elements to be removed from this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the
+ call<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.remove(Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.contains(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isEmpty()"><!-- --></A><H3>
+isEmpty</H3>
+<PRE>
+public boolean <B>isEmpty</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#isEmpty()" title="class or interface in java.util">java.util.Collection</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this collection contains no elements.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection contains no elements</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="contains(java.lang.Object)"><!-- --></A><H3>
+contains</H3>
+<PRE>
+public boolean <B>contains</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">java.util.Collection</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this collection contains the specified element.
+ More formally, returns <tt>true</tt> if and only if this collection
+ contains at least one element <tt>e</tt> such that
+ <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - element whose presence in this collection is to be tested
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection contains the specified
+ element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toArray()"><!-- --></A><H3>
+toArray</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>[] <B>toArray</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util">java.util.Collection</A></CODE></B></DD>
+<DD>Returns an array containing all of the elements in this collection.
+ If this collection makes any guarantees as to what order its elements
+ are returned by its iterator, this method must return the elements in
+ the same order.
+
+ <p>The returned array will be "safe" in that no references to it are
+ maintained by this collection. (In other words, this method must
+ allocate a new array even if this collection is backed by an array).
+ The caller is thus free to modify the returned array.
+
+ <p>This method acts as bridge between array-based and collection-based
+ APIs.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>an array containing all of the elements in this collection</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toArray(java.lang.Object[])"><!-- --></A><A NAME="toArray(T[])"><!-- --></A><H3>
+toArray</H3>
+<PRE>
+public &lt;T&gt; T[] <B>toArray</B>(T[]&nbsp;array)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray(T[])" title="class or interface in java.util">java.util.Collection</A></CODE></B></DD>
+<DD>Returns an array containing all of the elements in this collection;
+ the runtime type of the returned array is that of the specified array.
+ If the collection fits in the specified array, it is returned therein.
+ Otherwise, a new array is allocated with the runtime type of the
+ specified array and the size of this collection.
+
+ <p>If this collection fits in the specified array with room to spare
+ (i.e., the array has more elements than this collection), the element
+ in the array immediately following the end of the collection is set to
+ <tt>null</tt>. (This is useful in determining the length of this
+ collection <i>only</i> if the caller knows that this collection does
+ not contain any <tt>null</tt> elements.)
+
+ <p>If this collection makes any guarantees as to what order its elements
+ are returned by its iterator, this method must return the elements in
+ the same order.
+
+ <p>Like the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util"><CODE>Collection.toArray()</CODE></A> method, this method acts as bridge between
+ array-based and collection-based APIs. Further, this method allows
+ precise control over the runtime type of the output array, and may,
+ under certain circumstances, be used to save allocation costs.
+
+ <p>Suppose <tt>x</tt> is a collection known to contain only strings.
+ The following code can be used to dump the collection into a newly
+ allocated array of <tt>String</tt>:
+
+ <pre>
+ String[] y = x.toArray(new String[0]);</pre>
+
+ Note that <tt>toArray(new Object[0])</tt> is identical in function to
+ <tt>toArray()</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>array</CODE> - the array into which the elements of this collection are to be
+ stored, if it is big enough; otherwise, a new array of the same
+ runtime type is allocated for this purpose.
+<DT><B>Returns:</B><DD>an array containing all of the elements in this collection</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="add(java.lang.Object)"><!-- --></A><A NAME="add(E)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public boolean <B>add</B>(<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#add(E)" title="class or interface in java.util">java.util.Collection</A></CODE></B></DD>
+<DD>Ensures that this collection contains the specified element (optional
+ operation). Returns <tt>true</tt> if this collection changed as a
+ result of the call. (Returns <tt>false</tt> if this collection does
+ not permit duplicates and already contains the specified element.)<p>
+
+ Collections that support this operation may place limitations on what
+ elements may be added to this collection. In particular, some
+ collections will refuse to add <tt>null</tt> elements, and others will
+ impose restrictions on the type of elements that may be added.
+ Collection classes should clearly specify in their documentation any
+ restrictions on what elements may be added.<p>
+
+ If a collection refuses to add a particular element for any reason
+ other than that it already contains the element, it <i>must</i> throw
+ an exception (rather than returning <tt>false</tt>). This preserves
+ the invariant that a collection always contains the specified element
+ after this call returns.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - element whose presence in this collection is to be ensured
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the
+ call</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public boolean <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">java.util.Collection</A></CODE></B></DD>
+<DD>Removes a single instance of the specified element from this
+ collection, if it is present (optional operation). More formally,
+ removes an element <tt>e</tt> such that
+ <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>, if
+ this collection contains one or more such elements. Returns
+ <tt>true</tt> if this collection contained the specified element (or
+ equivalently, if this collection changed as a result of the call).
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - element to be removed from this collection, if present
+<DT><B>Returns:</B><DD><tt>true</tt> if an element was removed as a result of this call</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsAll(java.util.Collection)"><!-- --></A><H3>
+containsAll</H3>
+<PRE>
+public boolean <B>containsAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;collection)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">java.util.Collection</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this collection contains all of the elements
+ in the specified collection.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>collection</CODE> - collection to be checked for containment in this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection contains all of the elements
+ in the specified collection<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.contains(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addAll(java.util.Collection)"><!-- --></A><H3>
+addAll</H3>
+<PRE>
+public boolean <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;&nbsp;collection)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">java.util.Collection</A></CODE></B></DD>
+<DD>Adds all of the elements in the specified collection to this collection
+ (optional operation). The behavior of this operation is undefined if
+ the specified collection is modified while the operation is in progress.
+ (This implies that the behavior of this call is undefined if the
+ specified collection is this collection, and this collection is
+ nonempty.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>collection</CODE> - collection containing elements to be added to this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the call<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#add(E)" title="class or interface in java.util"><CODE>Collection.add(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="retainAll(java.util.Collection)"><!-- --></A><H3>
+retainAll</H3>
+<PRE>
+public boolean <B>retainAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;collection)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">java.util.Collection</A></CODE></B></DD>
+<DD>Retains only the elements in this collection that are contained in the
+ specified collection (optional operation). In other words, removes from
+ this collection all of its elements that are not contained in the
+ specified collection.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>collection</CODE> - collection containing elements to be retained in this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the call<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.remove(Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.contains(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clear()"><!-- --></A><H3>
+clear</H3>
+<PRE>
+public void <B>clear</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#clear()" title="class or interface in java.util">java.util.Collection</A></CODE></B></DD>
+<DD>Removes all of the elements from this collection (optional operation).
+ The collection will be empty after this method returns.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingCollection.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingCollection.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingCollection.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingConcurrentMap.html b/javadoc/com/google/common/collect/ForwardingConcurrentMap.html
new file mode 100644
index 0000000..5f66bbf
--- /dev/null
+++ b/javadoc/com/google/common/collect/ForwardingConcurrentMap.html
@@ -0,0 +1,474 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:15 PST 2009 -->
+<TITLE>
+ForwardingConcurrentMap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ForwardingConcurrentMap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingConcurrentMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingConcurrentMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingConcurrentMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ForwardingConcurrentMap&lt;K,V&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingMap</A>&lt;K,V&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingConcurrentMap&lt;K,V&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>ForwardingConcurrentMap&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;<DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;K,V&gt;</DL>
+</PRE>
+
+<P>
+A concurrent map which forwards all its method calls to another concurrent
+ map. Subclasses should override one or more methods to modify the behavior of
+ the backing map as desired per the <a
+ href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Charles Fry</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">V</A>&gt;</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html#ForwardingConcurrentMap()">ForwardingConcurrentMap</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected abstract &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html#delegate()">delegate</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html#putIfAbsent(K, V)">putIfAbsent</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the specified key is not already associated
+ with a value, associate it with the given value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html#remove(java.lang.Object, java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes the entry for a key only if currently mapped to a given value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html#replace(K, V)">replace</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Replaces the entry for a key only if currently mapped to some value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html#replace(K, V, V)">replace</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&nbsp;oldValue,
+ <A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&nbsp;newValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Replaces the entry for a key only if currently mapped to a given value.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingMap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#entrySet()">entrySet</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#get(java.lang.Object)">get</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#putAll(java.util.Map)">putAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#values()">values</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">put</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ForwardingConcurrentMap()"><!-- --></A><H3>
+ForwardingConcurrentMap</H3>
+<PRE>
+public <B>ForwardingConcurrentMap</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="delegate()"><!-- --></A><H3>
+delegate</H3>
+<PRE>
+protected abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&gt; <B>delegate</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
+<DD>Returns the backing delegate instance that methods are forwarded to.
+ Abstract subclasses generally override this method with an abstract method
+ that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
+ the instance being decorated.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putIfAbsent(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="putIfAbsent(K, V)"><!-- --></A><H3>
+putIfAbsent</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A> <B>putIfAbsent</B>(<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true#putIfAbsent(K, V)" title="class or interface in java.util.concurrent">java.util.concurrent.ConcurrentMap</A></CODE></B></DD>
+<DD>If the specified key is not already associated
+ with a value, associate it with the given value.
+ This is equivalent to
+ <pre>
+ if (!map.containsKey(key))
+ return map.put(key, value);
+ else
+ return map.get(key);</pre>
+ except that the action is performed atomically.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true#putIfAbsent(K, V)" title="class or interface in java.util.concurrent">putIfAbsent</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key with which the specified value is to be associated<DD><CODE>value</CODE> - value to be associated with the specified key
+<DT><B>Returns:</B><DD>the previous value associated with the specified key, or
+ <tt>null</tt> if there was no mapping for the key.
+ (A <tt>null</tt> return can also indicate that the map
+ previously associated <tt>null</tt> with the key,
+ if the implementation supports null values.)</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public boolean <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true#remove(java.lang.Object, java.lang.Object)" title="class or interface in java.util.concurrent">java.util.concurrent.ConcurrentMap</A></CODE></B></DD>
+<DD>Removes the entry for a key only if currently mapped to a given value.
+ This is equivalent to
+ <pre>
+ if (map.containsKey(key) &amp;&amp; map.get(key).equals(value)) {
+ map.remove(key);
+ return true;
+ } else return false;</pre>
+ except that the action is performed atomically.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true#remove(java.lang.Object, java.lang.Object)" title="class or interface in java.util.concurrent">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key with which the specified value is associated<DD><CODE>value</CODE> - value expected to be associated with the specified key
+<DT><B>Returns:</B><DD><tt>true</tt> if the value was removed</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="replace(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="replace(K, V)"><!-- --></A><H3>
+replace</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A> <B>replace</B>(<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true#replace(K, V)" title="class or interface in java.util.concurrent">java.util.concurrent.ConcurrentMap</A></CODE></B></DD>
+<DD>Replaces the entry for a key only if currently mapped to some value.
+ This is equivalent to
+ <pre>
+ if (map.containsKey(key)) {
+ return map.put(key, value);
+ } else return null;</pre>
+ except that the action is performed atomically.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true#replace(K, V)" title="class or interface in java.util.concurrent">replace</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key with which the specified value is associated<DD><CODE>value</CODE> - value to be associated with the specified key
+<DT><B>Returns:</B><DD>the previous value associated with the specified key, or
+ <tt>null</tt> if there was no mapping for the key.
+ (A <tt>null</tt> return can also indicate that the map
+ previously associated <tt>null</tt> with the key,
+ if the implementation supports null values.)</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="replace(java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="replace(K, V, V)"><!-- --></A><H3>
+replace</H3>
+<PRE>
+public boolean <B>replace</B>(<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&nbsp;oldValue,
+ <A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&nbsp;newValue)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true#replace(K, V, V)" title="class or interface in java.util.concurrent">java.util.concurrent.ConcurrentMap</A></CODE></B></DD>
+<DD>Replaces the entry for a key only if currently mapped to a given value.
+ This is equivalent to
+ <pre>
+ if (map.containsKey(key) &amp;&amp; map.get(key).equals(oldValue)) {
+ map.put(key, newValue);
+ return true;
+ } else return false;</pre>
+ except that the action is performed atomically.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true#replace(K, V, V)" title="class or interface in java.util.concurrent">replace</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key with which the specified value is associated<DD><CODE>oldValue</CODE> - value expected to be associated with the specified key<DD><CODE>newValue</CODE> - value to be associated with the specified key
+<DT><B>Returns:</B><DD><tt>true</tt> if the value was replaced</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingConcurrentMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingConcurrentMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingConcurrentMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingIterator.html b/javadoc/com/google/common/collect/ForwardingIterator.html
new file mode 100644
index 0000000..959e778
--- /dev/null
+++ b/javadoc/com/google/common/collect/ForwardingIterator.html
@@ -0,0 +1,373 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:15 PST 2009 -->
+<TITLE>
+ForwardingIterator (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ForwardingIterator (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingIterator.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingIterator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ForwardingIterator&lt;T&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingIterator&lt;T&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;</DD>
+</DL>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>ForwardingIterator&lt;T&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A><DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;</DL>
+</PRE>
+
+<P>
+An iterator which forwards all its method calls to another iterator.
+ Subclasses should override one or more methods to modify the behavior of the
+ backing iterator as desired per the <a
+ href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A></DL>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingIterator.html#ForwardingIterator()">ForwardingIterator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected abstract &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="type parameter in ForwardingIterator">T</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingIterator.html#delegate()">delegate</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingIterator.html#hasNext()">hasNext</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the iteration has more elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="type parameter in ForwardingIterator">T</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingIterator.html#next()">next</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next element in the iteration.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingIterator.html#remove()">remove</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes from the underlying collection the last element returned
+ by this iterator (optional operation).</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ForwardingIterator()"><!-- --></A><H3>
+ForwardingIterator</H3>
+<PRE>
+public <B>ForwardingIterator</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="delegate()"><!-- --></A><H3>
+delegate</H3>
+<PRE>
+protected abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="type parameter in ForwardingIterator">T</A>&gt; <B>delegate</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
+<DD>Returns the backing delegate instance that methods are forwarded to.
+ Abstract subclasses generally override this method with an abstract method
+ that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
+ the instance being decorated.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hasNext()"><!-- --></A><H3>
+hasNext</H3>
+<PRE>
+public boolean <B>hasNext</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#hasNext()" title="class or interface in java.util">java.util.Iterator</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the iteration has more elements.
+ (In other words, returns <code>true</code> if <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#next()" title="class or interface in java.util"><CODE>Iterator.next()</CODE></A> would
+ return an element rather than throwing an exception.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#hasNext()" title="class or interface in java.util">hasNext</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="type parameter in ForwardingIterator">T</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD><code>true</code> if the iteration has more elements</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="next()"><!-- --></A><H3>
+next</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="type parameter in ForwardingIterator">T</A> <B>next</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#next()" title="class or interface in java.util">java.util.Iterator</A></CODE></B></DD>
+<DD>Returns the next element in the iteration.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#next()" title="class or interface in java.util">next</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="type parameter in ForwardingIterator">T</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the next element in the iteration</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove()"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public void <B>remove</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#remove()" title="class or interface in java.util">java.util.Iterator</A></CODE></B></DD>
+<DD>Removes from the underlying collection the last element returned
+ by this iterator (optional operation). This method can be called
+ only once per call to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#next()" title="class or interface in java.util"><CODE>Iterator.next()</CODE></A>. The behavior of an iterator
+ is unspecified if the underlying collection is modified while the
+ iteration is in progress in any way other than by calling this
+ method.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#remove()" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="type parameter in ForwardingIterator">T</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingIterator.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingIterator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingList.html b/javadoc/com/google/common/collect/ForwardingList.html
new file mode 100644
index 0000000..6fdcc8c
--- /dev/null
+++ b/javadoc/com/google/common/collect/ForwardingList.html
@@ -0,0 +1,764 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:15 PST 2009 -->
+<TITLE>
+ForwardingList (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ForwardingList (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingList.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingList.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingList.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ForwardingList&lt;E&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingCollection</A>&lt;E&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingList&lt;E&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>ForwardingList&lt;E&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>&lt;E&gt;<DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt;</DL>
+</PRE>
+
+<P>
+A list which forwards all its method calls to another list. Subclasses should
+ override one or more methods to modify the behavior of the backing list as
+ desired per the <a
+ href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+
+ <p>This class does not implement <A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util"><CODE>RandomAccess</CODE></A>. If the
+ delegate supports random access, the <code>ForwadingList</code> subclass should
+ implement the <code>RandomAccess</code> interface.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Mike Bostock</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#ForwardingList()">ForwardingList</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#add(int, E)">add</A></B>(int&nbsp;index,
+ <A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Inserts the specified element at the specified position in this list
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#addAll(int, java.util.Collection)">addAll</A></B>(int&nbsp;index,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Inserts all of the elements in the specified collection into this
+ list at the specified position (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected abstract &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#delegate()">delegate</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indicates whether some other object is "equal to" this one.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#get(int)">get</A></B>(int&nbsp;index)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the element at the specified position in this list.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code value for the object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#indexOf(java.lang.Object)">indexOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the first occurrence of the specified element
+ in this list, or -1 if this list does not contain the element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#lastIndexOf(java.lang.Object)">lastIndexOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the last occurrence of the specified element
+ in this list, or -1 if this list does not contain the element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#listIterator()">listIterator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a list iterator over the elements in this list (in proper
+ sequence).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#listIterator(int)">listIterator</A></B>(int&nbsp;index)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a list iterator over the elements in this list (in proper
+ sequence), starting at the specified position in the list.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#remove(int)">remove</A></B>(int&nbsp;index)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes the element at the specified position in this list (optional
+ operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#set(int, E)">set</A></B>(int&nbsp;index,
+ <A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Replaces the element at the specified position in this list with the
+ specified element (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#subList(int, int)">subList</A></B>(int&nbsp;fromIndex,
+ int&nbsp;toIndex)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this list between the specified
+ <tt>fromIndex</tt>, inclusive, and <tt>toIndex</tt>, exclusive.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingCollection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#add(E)">add</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#contains(java.lang.Object)">contains</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#iterator()">iterator</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#toArray()">toArray</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#toArray(T[])">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.List"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#add(E)" title="class or interface in java.util">add</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ForwardingList()"><!-- --></A><H3>
+ForwardingList</H3>
+<PRE>
+public <B>ForwardingList</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="delegate()"><!-- --></A><H3>
+delegate</H3>
+<PRE>
+protected abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt; <B>delegate</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
+<DD>Returns the backing delegate instance that methods are forwarded to.
+ Abstract subclasses generally override this method with an abstract method
+ that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
+ the instance being decorated.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="add(int,java.lang.Object)"><!-- --></A><A NAME="add(int, E)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public void <B>add</B>(int&nbsp;index,
+ <A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#add(int, E)" title="class or interface in java.util">java.util.List</A></CODE></B></DD>
+<DD>Inserts the specified element at the specified position in this list
+ (optional operation). Shifts the element currently at that position
+ (if any) and any subsequent elements to the right (adds one to their
+ indices).
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#add(int, E)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - index at which the specified element is to be inserted<DD><CODE>element</CODE> - element to be inserted</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addAll(int, java.util.Collection)"><!-- --></A><H3>
+addAll</H3>
+<PRE>
+public boolean <B>addAll</B>(int&nbsp;index,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;&nbsp;elements)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#addAll(int, java.util.Collection)" title="class or interface in java.util">java.util.List</A></CODE></B></DD>
+<DD>Inserts all of the elements in the specified collection into this
+ list at the specified position (optional operation). Shifts the
+ element currently at that position (if any) and any subsequent
+ elements to the right (increases their indices). The new elements
+ will appear in this list in the order that they are returned by the
+ specified collection's iterator. The behavior of this operation is
+ undefined if the specified collection is modified while the
+ operation is in progress. (Note that this will occur if the specified
+ collection is this list, and it's nonempty.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#addAll(int, java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - index at which to insert the first element from the
+ specified collection<DD><CODE>elements</CODE> - collection containing elements to be added to this list
+<DT><B>Returns:</B><DD><tt>true</tt> if this list changed as a result of the call</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(int)"><!-- --></A><H3>
+get</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A> <B>get</B>(int&nbsp;index)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#get(int)" title="class or interface in java.util">java.util.List</A></CODE></B></DD>
+<DD>Returns the element at the specified position in this list.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#get(int)" title="class or interface in java.util">get</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - index of the element to return
+<DT><B>Returns:</B><DD>the element at the specified position in this list</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="indexOf(java.lang.Object)"><!-- --></A><H3>
+indexOf</H3>
+<PRE>
+public int <B>indexOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#indexOf(java.lang.Object)" title="class or interface in java.util">java.util.List</A></CODE></B></DD>
+<DD>Returns the index of the first occurrence of the specified element
+ in this list, or -1 if this list does not contain the element.
+ More formally, returns the lowest index <tt>i</tt> such that
+ <tt>(o==null&nbsp;?&nbsp;get(i)==null&nbsp;:&nbsp;o.equals(get(i)))</tt>,
+ or -1 if there is no such index.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#indexOf(java.lang.Object)" title="class or interface in java.util">indexOf</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - element to search for
+<DT><B>Returns:</B><DD>the index of the first occurrence of the specified element in
+ this list, or -1 if this list does not contain the element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="lastIndexOf(java.lang.Object)"><!-- --></A><H3>
+lastIndexOf</H3>
+<PRE>
+public int <B>lastIndexOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#lastIndexOf(java.lang.Object)" title="class or interface in java.util">java.util.List</A></CODE></B></DD>
+<DD>Returns the index of the last occurrence of the specified element
+ in this list, or -1 if this list does not contain the element.
+ More formally, returns the highest index <tt>i</tt> such that
+ <tt>(o==null&nbsp;?&nbsp;get(i)==null&nbsp;:&nbsp;o.equals(get(i)))</tt>,
+ or -1 if there is no such index.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#lastIndexOf(java.lang.Object)" title="class or interface in java.util">lastIndexOf</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - element to search for
+<DT><B>Returns:</B><DD>the index of the last occurrence of the specified element in
+ this list, or -1 if this list does not contain the element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="listIterator()"><!-- --></A><H3>
+listIterator</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt; <B>listIterator</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#listIterator()" title="class or interface in java.util">java.util.List</A></CODE></B></DD>
+<DD>Returns a list iterator over the elements in this list (in proper
+ sequence).
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#listIterator()" title="class or interface in java.util">listIterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a list iterator over the elements in this list (in proper
+ sequence)</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="listIterator(int)"><!-- --></A><H3>
+listIterator</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt; <B>listIterator</B>(int&nbsp;index)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#listIterator(int)" title="class or interface in java.util">java.util.List</A></CODE></B></DD>
+<DD>Returns a list iterator over the elements in this list (in proper
+ sequence), starting at the specified position in the list.
+ The specified index indicates the first element that would be
+ returned by an initial call to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#next()" title="class or interface in java.util"><CODE>next</CODE></A>.
+ An initial call to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#previous()" title="class or interface in java.util"><CODE>previous</CODE></A> would
+ return the element with the specified index minus one.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#listIterator(int)" title="class or interface in java.util">listIterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - index of the first element to be returned from the
+ list iterator (by a call to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#next()" title="class or interface in java.util"><CODE>next</CODE></A>)
+<DT><B>Returns:</B><DD>a list iterator over the elements in this list (in proper
+ sequence), starting at the specified position in the list</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(int)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A> <B>remove</B>(int&nbsp;index)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#remove(int)" title="class or interface in java.util">java.util.List</A></CODE></B></DD>
+<DD>Removes the element at the specified position in this list (optional
+ operation). Shifts any subsequent elements to the left (subtracts one
+ from their indices). Returns the element that was removed from the
+ list.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#remove(int)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - the index of the element to be removed
+<DT><B>Returns:</B><DD>the element previously at the specified position</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set(int,java.lang.Object)"><!-- --></A><A NAME="set(int, E)"><!-- --></A><H3>
+set</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A> <B>set</B>(int&nbsp;index,
+ <A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#set(int, E)" title="class or interface in java.util">java.util.List</A></CODE></B></DD>
+<DD>Replaces the element at the specified position in this list with the
+ specified element (optional operation).
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#set(int, E)" title="class or interface in java.util">set</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - index of the element to replace<DD><CODE>element</CODE> - element to be stored at the specified position
+<DT><B>Returns:</B><DD>the element previously at the specified position</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="subList(int, int)"><!-- --></A><H3>
+subList</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt; <B>subList</B>(int&nbsp;fromIndex,
+ int&nbsp;toIndex)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#subList(int, int)" title="class or interface in java.util">java.util.List</A></CODE></B></DD>
+<DD>Returns a view of the portion of this list between the specified
+ <tt>fromIndex</tt>, inclusive, and <tt>toIndex</tt>, exclusive. (If
+ <tt>fromIndex</tt> and <tt>toIndex</tt> are equal, the returned list is
+ empty.) The returned list is backed by this list, so non-structural
+ changes in the returned list are reflected in this list, and vice-versa.
+ The returned list supports all of the optional list operations supported
+ by this list.<p>
+
+ This method eliminates the need for explicit range operations (of
+ the sort that commonly exist for arrays). Any operation that expects
+ a list can be used as a range operation by passing a subList view
+ instead of a whole list. For example, the following idiom
+ removes a range of elements from a list:
+ <pre>
+ list.subList(from, to).clear();
+ </pre>
+ Similar idioms may be constructed for <tt>indexOf</tt> and
+ <tt>lastIndexOf</tt>, and all of the algorithms in the
+ <tt>Collections</tt> class can be applied to a subList.<p>
+
+ The semantics of the list returned by this method become undefined if
+ the backing list (i.e., this list) is <i>structurally modified</i> in
+ any way other than via the returned list. (Structural modifications are
+ those that change the size of this list, or otherwise perturb it in such
+ a fashion that iterations in progress may yield incorrect results.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#subList(int, int)" title="class or interface in java.util">subList</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fromIndex</CODE> - low endpoint (inclusive) of the subList<DD><CODE>toIndex</CODE> - high endpoint (exclusive) of the subList
+<DT><B>Returns:</B><DD>a view of the specified range within this list</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Indicates whether some other object is "equal to" this one.
+ <p>
+ The <code>equals</code> method implements an equivalence relation
+ on non-null object references:
+ <ul>
+ <li>It is <i>reflexive</i>: for any non-null reference value
+ <code>x</code>, <code>x.equals(x)</code> should return
+ <code>true</code>.
+ <li>It is <i>symmetric</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, <code>x.equals(y)</code>
+ should return <code>true</code> if and only if
+ <code>y.equals(x)</code> returns <code>true</code>.
+ <li>It is <i>transitive</i>: for any non-null reference values
+ <code>x</code>, <code>y</code>, and <code>z</code>, if
+ <code>x.equals(y)</code> returns <code>true</code> and
+ <code>y.equals(z)</code> returns <code>true</code>, then
+ <code>x.equals(z)</code> should return <code>true</code>.
+ <li>It is <i>consistent</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, multiple invocations of
+ <tt>x.equals(y)</tt> consistently return <code>true</code>
+ or consistently return <code>false</code>, provided no
+ information used in <code>equals</code> comparisons on the
+ objects is modified.
+ <li>For any non-null reference value <code>x</code>,
+ <code>x.equals(null)</code> should return <code>false</code>.
+ </ul>
+ <p>
+ The <tt>equals</tt> method for class <code>Object</code> implements
+ the most discriminating possible equivalence relation on objects;
+ that is, for any non-null reference values <code>x</code> and
+ <code>y</code>, this method returns <code>true</code> if and only
+ if <code>x</code> and <code>y</code> refer to the same object
+ (<code>x == y</code> has the value <code>true</code>).
+ <p>
+ Note that it is generally necessary to override the <tt>hashCode</tt>
+ method whenever this method is overridden, so as to maintain the
+ general contract for the <tt>hashCode</tt> method, which states
+ that equal objects must have equal hash codes.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+public int <B>hashCode</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Returns a hash code value for the object. This method is
+ supported for the benefit of hashtables such as those provided by
+ <code>java.util.Hashtable</code>.
+ <p>
+ The general contract of <code>hashCode</code> is:
+ <ul>
+ <li>Whenever it is invoked on the same object more than once during
+ an execution of a Java application, the <tt>hashCode</tt> method
+ must consistently return the same integer, provided no information
+ used in <tt>equals</tt> comparisons on the object is modified.
+ This integer need not remain consistent from one execution of an
+ application to another execution of the same application.
+ <li>If two objects are equal according to the <tt>equals(Object)</tt>
+ method, then calling the <code>hashCode</code> method on each of
+ the two objects must produce the same integer result.
+ <li>It is <em>not</em> required that if two objects are unequal
+ according to the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>
+ method, then calling the <tt>hashCode</tt> method on each of the
+ two objects must produce distinct integer results. However, the
+ programmer should be aware that producing distinct integer results
+ for unequal objects may improve the performance of hashtables.
+ </ul>
+ <p>
+ As much as is reasonably practical, the hashCode method defined by
+ class <tt>Object</tt> does return distinct integers for distinct
+ objects. (This is typically implemented by converting the internal
+ address of the object into an integer, but this implementation
+ technique is not required by the
+ Java<font size="-2"><sup>TM</sup></font> programming language.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingList.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingList.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingList.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingListIterator.html b/javadoc/com/google/common/collect/ForwardingListIterator.html
new file mode 100644
index 0000000..ded4265
--- /dev/null
+++ b/javadoc/com/google/common/collect/ForwardingListIterator.html
@@ -0,0 +1,493 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:15 PST 2009 -->
+<TITLE>
+ForwardingListIterator (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ForwardingListIterator (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingListIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingListIterator.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingListIterator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ForwardingListIterator&lt;E&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingIterator</A>&lt;E&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingListIterator&lt;E&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;E&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>ForwardingListIterator&lt;E&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator</A>&lt;E&gt;<DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;E&gt;</DL>
+</PRE>
+
+<P>
+A list iterator which forwards all its method calls to another list
+ iterator. Subclasses should override one or more methods to modify the
+ behavior of the backing iterator as desired per the <a
+ href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Mike Bostock</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A></DL>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingListIterator.html#ForwardingListIterator()">ForwardingListIterator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingListIterator.html#add(E)">add</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Inserts the specified element into the list (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected abstract &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingListIterator.html#delegate()">delegate</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingListIterator.html#hasPrevious()">hasPrevious</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if this list iterator has more elements when
+ traversing the list in the reverse direction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingListIterator.html#nextIndex()">nextIndex</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the element that would be returned by a
+ subsequent call to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#next()" title="class or interface in java.util"><CODE>ListIterator.next()</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingListIterator.html#previous()">previous</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the previous element in the list and moves the cursor
+ position backwards.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingListIterator.html#previousIndex()">previousIndex</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the element that would be returned by a
+ subsequent call to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#previous()" title="class or interface in java.util"><CODE>ListIterator.previous()</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingListIterator.html#set(E)">set</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Replaces the last element returned by <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#next()" title="class or interface in java.util"><CODE>ListIterator.next()</CODE></A> or
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#previous()" title="class or interface in java.util"><CODE>ListIterator.previous()</CODE></A> with the specified element (optional operation).</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingIterator"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingIterator.html#hasNext()">hasNext</A>, <A HREF="../../../../com/google/common/collect/ForwardingIterator.html#next()">next</A>, <A HREF="../../../../com/google/common/collect/ForwardingIterator.html#remove()">remove</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.ListIterator"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#hasNext()" title="class or interface in java.util">hasNext</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#next()" title="class or interface in java.util">next</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#remove()" title="class or interface in java.util">remove</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ForwardingListIterator()"><!-- --></A><H3>
+ForwardingListIterator</H3>
+<PRE>
+public <B>ForwardingListIterator</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="delegate()"><!-- --></A><H3>
+delegate</H3>
+<PRE>
+protected abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&gt; <B>delegate</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
+<DD>Returns the backing delegate instance that methods are forwarded to.
+ Abstract subclasses generally override this method with an abstract method
+ that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
+ the instance being decorated.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingIterator.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="add(java.lang.Object)"><!-- --></A><A NAME="add(E)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public void <B>add</B>(<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#add(E)" title="class or interface in java.util">java.util.ListIterator</A></CODE></B></DD>
+<DD>Inserts the specified element into the list (optional operation).
+ The element is inserted immediately before the next element that
+ would be returned by <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#next()" title="class or interface in java.util"><CODE>ListIterator.next()</CODE></A>, if any, and after the next
+ element that would be returned by <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#previous()" title="class or interface in java.util"><CODE>ListIterator.previous()</CODE></A>, if any. (If the
+ list contains no elements, the new element becomes the sole element
+ on the list.) The new element is inserted before the implicit
+ cursor: a subsequent call to <code>next</code> would be unaffected, and a
+ subsequent call to <code>previous</code> would return the new element.
+ (This call increases by one the value that would be returned by a
+ call to <code>nextIndex</code> or <code>previousIndex</code>.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to insert</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hasPrevious()"><!-- --></A><H3>
+hasPrevious</H3>
+<PRE>
+public boolean <B>hasPrevious</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#hasPrevious()" title="class or interface in java.util">java.util.ListIterator</A></CODE></B></DD>
+<DD>Returns <code>true</code> if this list iterator has more elements when
+ traversing the list in the reverse direction. (In other words,
+ returns <code>true</code> if <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#previous()" title="class or interface in java.util"><CODE>ListIterator.previous()</CODE></A> would return an element
+ rather than throwing an exception.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#hasPrevious()" title="class or interface in java.util">hasPrevious</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD><code>true</code> if the list iterator has more elements when
+ traversing the list in the reverse direction</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="nextIndex()"><!-- --></A><H3>
+nextIndex</H3>
+<PRE>
+public int <B>nextIndex</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#nextIndex()" title="class or interface in java.util">java.util.ListIterator</A></CODE></B></DD>
+<DD>Returns the index of the element that would be returned by a
+ subsequent call to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#next()" title="class or interface in java.util"><CODE>ListIterator.next()</CODE></A>. (Returns list size if the list
+ iterator is at the end of the list.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#nextIndex()" title="class or interface in java.util">nextIndex</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the index of the element that would be returned by a
+ subsequent call to <code>next</code>, or list size if the list
+ iterator is at the end of the list</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="previous()"><!-- --></A><H3>
+previous</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A> <B>previous</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#previous()" title="class or interface in java.util">java.util.ListIterator</A></CODE></B></DD>
+<DD>Returns the previous element in the list and moves the cursor
+ position backwards. This method may be called repeatedly to
+ iterate through the list backwards, or intermixed with calls to
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#next()" title="class or interface in java.util"><CODE>ListIterator.next()</CODE></A> to go back and forth. (Note that alternating calls
+ to <code>next</code> and <code>previous</code> will return the same
+ element repeatedly.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#previous()" title="class or interface in java.util">previous</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the previous element in the list</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="previousIndex()"><!-- --></A><H3>
+previousIndex</H3>
+<PRE>
+public int <B>previousIndex</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#previousIndex()" title="class or interface in java.util">java.util.ListIterator</A></CODE></B></DD>
+<DD>Returns the index of the element that would be returned by a
+ subsequent call to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#previous()" title="class or interface in java.util"><CODE>ListIterator.previous()</CODE></A>. (Returns -1 if the list
+ iterator is at the beginning of the list.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#previousIndex()" title="class or interface in java.util">previousIndex</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the index of the element that would be returned by a
+ subsequent call to <code>previous</code>, or -1 if the list
+ iterator is at the beginning of the list</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set(java.lang.Object)"><!-- --></A><A NAME="set(E)"><!-- --></A><H3>
+set</H3>
+<PRE>
+public void <B>set</B>(<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#set(E)" title="class or interface in java.util">java.util.ListIterator</A></CODE></B></DD>
+<DD>Replaces the last element returned by <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#next()" title="class or interface in java.util"><CODE>ListIterator.next()</CODE></A> or
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#previous()" title="class or interface in java.util"><CODE>ListIterator.previous()</CODE></A> with the specified element (optional operation).
+ This call can be made only if neither <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#remove()" title="class or interface in java.util"><CODE>ListIterator.remove()</CODE></A> nor <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#add(E)" title="class or interface in java.util"><CODE>ListIterator.add(E)</CODE></A> have been called after the last call to <code>next</code> or
+ <code>previous</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#set(E)" title="class or interface in java.util">set</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element with which to replace the last element returned by
+ <code>next</code> or <code>previous</code></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingListIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingListIterator.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingListIterator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingMap.html b/javadoc/com/google/common/collect/ForwardingMap.html
new file mode 100644
index 0000000..e55d239
--- /dev/null
+++ b/javadoc/com/google/common/collect/ForwardingMap.html
@@ -0,0 +1,833 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:15 PST 2009 -->
+<TITLE>
+ForwardingMap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ForwardingMap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ForwardingMap&lt;K,V&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingMap&lt;K,V&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</DD>
+</DL>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A>, <A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>, <A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect">ForwardingConcurrentMap</A>, <A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap</A>, <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>, <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>, <A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>ForwardingMap&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A><DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</DL>
+</PRE>
+
+<P>
+A map which forwards all its method calls to another map. Subclasses should
+ override one or more methods to modify the behavior of the backing map as
+ desired per the <a
+ href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion, Jared Levy</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">V</A>&gt;</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#ForwardingMap()">ForwardingMap</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#clear()">clear</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all of the mappings from this map (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsKey(java.lang.Object)">containsKey</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this map contains a mapping for the specified
+ key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this map maps one or more keys to the
+ specified value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected abstract &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#delegate()">delegate</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#entrySet()">entrySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> view of the mappings contained in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indicates whether some other object is "equal to" this one.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#get(java.lang.Object)">get</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value to which the specified key is mapped,
+ or <code>null</code> if this map contains no mapping for the key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code value for the object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#isEmpty()">isEmpty</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this map contains no key-value mappings.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#keySet()">keySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> view of the keys contained in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates the specified value with the specified key in this map
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,? extends <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all of the mappings from the specified map to this map
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes the mapping for a key from this map if it is present
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#size()">size</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of key-value mappings in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#values()">values</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> view of the values contained in this map.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ForwardingMap()"><!-- --></A><H3>
+ForwardingMap</H3>
+<PRE>
+public <B>ForwardingMap</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="delegate()"><!-- --></A><H3>
+delegate</H3>
+<PRE>
+protected abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt; <B>delegate</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
+<DD>Returns the backing delegate instance that methods are forwarded to.
+ Abstract subclasses generally override this method with an abstract method
+ that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
+ the instance being decorated.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="size()"><!-- --></A><H3>
+size</H3>
+<PRE>
+public int <B>size</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns the number of key-value mappings in this map. If the
+ map contains more than <tt>Integer.MAX_VALUE</tt> elements, returns
+ <tt>Integer.MAX_VALUE</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the number of key-value mappings in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isEmpty()"><!-- --></A><H3>
+isEmpty</H3>
+<PRE>
+public boolean <B>isEmpty</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this map contains no key-value mappings.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD><tt>true</tt> if this map contains no key-value mappings</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A> <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Removes the mapping for a key from this map if it is present
+ (optional operation). More formally, if this map contains a mapping
+ from key <tt>k</tt> to value <tt>v</tt> such that
+ <code>(key==null ? k==null : key.equals(k))</code>, that mapping
+ is removed. (The map can contain at most one such mapping.)
+
+ <p>Returns the value to which this map previously associated the key,
+ or <tt>null</tt> if the map contained no mapping for the key.
+
+ <p>If this map permits null values, then a return value of
+ <tt>null</tt> does not <i>necessarily</i> indicate that the map
+ contained no mapping for the key; it's also possible that the map
+ explicitly mapped the key to <tt>null</tt>.
+
+ <p>The map will not contain a mapping for the specified key once the
+ call returns.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - key whose mapping is to be removed from the map
+<DT><B>Returns:</B><DD>the previous value associated with <tt>key</tt>, or
+ <tt>null</tt> if there was no mapping for <tt>key</tt>.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clear()"><!-- --></A><H3>
+clear</H3>
+<PRE>
+public void <B>clear</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Removes all of the mappings from this map (optional operation).
+ The map will be empty after this call returns.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsKey(java.lang.Object)"><!-- --></A><H3>
+containsKey</H3>
+<PRE>
+public boolean <B>containsKey</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this map contains a mapping for the specified
+ key. More formally, returns <tt>true</tt> if and only if
+ this map contains a mapping for a key <tt>k</tt> such that
+ <tt>(key==null ? k==null : key.equals(k))</tt>. (There can be
+ at most one such mapping.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key whose presence in this map is to be tested
+<DT><B>Returns:</B><DD><tt>true</tt> if this map contains a mapping for the specified
+ key</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
+containsValue</H3>
+<PRE>
+public boolean <B>containsValue</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this map maps one or more keys to the
+ specified value. More formally, returns <tt>true</tt> if and only if
+ this map contains at least one mapping to a value <tt>v</tt> such that
+ <tt>(value==null ? v==null : value.equals(v))</tt>. This operation
+ will probably require time linear in the map size for most
+ implementations of the <tt>Map</tt> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>value</CODE> - value whose presence in this map is to be tested
+<DT><B>Returns:</B><DD><tt>true</tt> if this map maps one or more keys to the
+ specified value</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(java.lang.Object)"><!-- --></A><H3>
+get</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A> <B>get</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns the value to which the specified key is mapped,
+ or <code>null</code> if this map contains no mapping for the key.
+
+ <p>More formally, if this map contains a mapping from a key
+ <code>k</code> to a value <code>v</code> such that <code>(key==null ? k==null :
+ key.equals(k))</code>, then this method returns <code>v</code>; otherwise
+ it returns <code>null</code>. (There can be at most one such mapping.)
+
+ <p>If this map permits null values, then a return value of
+ <code>null</code> does not <i>necessarily</i> indicate that the map
+ contains no mapping for the key; it's also possible that the map
+ explicitly maps the key to <code>null</code>. The <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util"><CODE>containsKey</CODE></A> operation may be used to distinguish these two cases.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - the key whose associated value is to be returned
+<DT><B>Returns:</B><DD>the value to which the specified key is mapped, or
+ <code>null</code> if this map contains no mapping for the key</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
+put</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A> <B>put</B>(<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Associates the specified value with the specified key in this map
+ (optional operation). If the map previously contained a mapping for
+ the key, the old value is replaced by the specified value. (A map
+ <tt>m</tt> is said to contain a mapping for a key <tt>k</tt> if and only
+ if <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util"><CODE>m.containsKey(k)</CODE></A> would return
+ <tt>true</tt>.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">put</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key with which the specified value is to be associated<DD><CODE>value</CODE> - value to be associated with the specified key
+<DT><B>Returns:</B><DD>the previous value associated with <tt>key</tt>, or
+ <tt>null</tt> if there was no mapping for <tt>key</tt>.
+ (A <tt>null</tt> return can also indicate that the map
+ previously associated <tt>null</tt> with <tt>key</tt>,
+ if the implementation supports <tt>null</tt> values.)</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(java.util.Map)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public void <B>putAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,? extends <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;&nbsp;map)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Copies all of the mappings from the specified map to this map
+ (optional operation). The effect of this call is equivalent to that
+ of calling <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util"><CODE>put(k, v)</CODE></A> on this map once
+ for each mapping from key <tt>k</tt> to value <tt>v</tt> in the
+ specified map. The behavior of this operation is undefined if the
+ specified map is modified while the operation is in progress.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>map</CODE> - mappings to be stored in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keySet()"><!-- --></A><H3>
+keySet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>&gt; <B>keySet</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> view of the keys contained in this map.
+ The set is backed by the map, so changes to the map are
+ reflected in the set, and vice-versa. If the map is modified
+ while an iteration over the set is in progress (except through
+ the iterator's own <tt>remove</tt> operation), the results of
+ the iteration are undefined. The set supports element removal,
+ which removes the corresponding mapping from the map, via the
+ <tt>Iterator.remove</tt>, <tt>Set.remove</tt>,
+ <tt>removeAll</tt>, <tt>retainAll</tt>, and <tt>clear</tt>
+ operations. It does not support the <tt>add</tt> or <tt>addAll</tt>
+ operations.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a set view of the keys contained in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="values()"><!-- --></A><H3>
+values</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt; <B>values</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> view of the values contained in this map.
+ The collection is backed by the map, so changes to the map are
+ reflected in the collection, and vice-versa. If the map is
+ modified while an iteration over the collection is in progress
+ (except through the iterator's own <tt>remove</tt> operation),
+ the results of the iteration are undefined. The collection
+ supports element removal, which removes the corresponding
+ mapping from the map, via the <tt>Iterator.remove</tt>,
+ <tt>Collection.remove</tt>, <tt>removeAll</tt>,
+ <tt>retainAll</tt> and <tt>clear</tt> operations. It does not
+ support the <tt>add</tt> or <tt>addAll</tt> operations.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a collection view of the values contained in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entrySet()"><!-- --></A><H3>
+entrySet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;&gt; <B>entrySet</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> view of the mappings contained in this map.
+ The set is backed by the map, so changes to the map are
+ reflected in the set, and vice-versa. If the map is modified
+ while an iteration over the set is in progress (except through
+ the iterator's own <tt>remove</tt> operation, or through the
+ <tt>setValue</tt> operation on a map entry returned by the
+ iterator) the results of the iteration are undefined. The set
+ supports element removal, which removes the corresponding
+ mapping from the map, via the <tt>Iterator.remove</tt>,
+ <tt>Set.remove</tt>, <tt>removeAll</tt>, <tt>retainAll</tt> and
+ <tt>clear</tt> operations. It does not support the
+ <tt>add</tt> or <tt>addAll</tt> operations.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a set view of the mappings contained in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Indicates whether some other object is "equal to" this one.
+ <p>
+ The <code>equals</code> method implements an equivalence relation
+ on non-null object references:
+ <ul>
+ <li>It is <i>reflexive</i>: for any non-null reference value
+ <code>x</code>, <code>x.equals(x)</code> should return
+ <code>true</code>.
+ <li>It is <i>symmetric</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, <code>x.equals(y)</code>
+ should return <code>true</code> if and only if
+ <code>y.equals(x)</code> returns <code>true</code>.
+ <li>It is <i>transitive</i>: for any non-null reference values
+ <code>x</code>, <code>y</code>, and <code>z</code>, if
+ <code>x.equals(y)</code> returns <code>true</code> and
+ <code>y.equals(z)</code> returns <code>true</code>, then
+ <code>x.equals(z)</code> should return <code>true</code>.
+ <li>It is <i>consistent</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, multiple invocations of
+ <tt>x.equals(y)</tt> consistently return <code>true</code>
+ or consistently return <code>false</code>, provided no
+ information used in <code>equals</code> comparisons on the
+ objects is modified.
+ <li>For any non-null reference value <code>x</code>,
+ <code>x.equals(null)</code> should return <code>false</code>.
+ </ul>
+ <p>
+ The <tt>equals</tt> method for class <code>Object</code> implements
+ the most discriminating possible equivalence relation on objects;
+ that is, for any non-null reference values <code>x</code> and
+ <code>y</code>, this method returns <code>true</code> if and only
+ if <code>x</code> and <code>y</code> refer to the same object
+ (<code>x == y</code> has the value <code>true</code>).
+ <p>
+ Note that it is generally necessary to override the <tt>hashCode</tt>
+ method whenever this method is overridden, so as to maintain the
+ general contract for the <tt>hashCode</tt> method, which states
+ that equal objects must have equal hash codes.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+public int <B>hashCode</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Returns a hash code value for the object. This method is
+ supported for the benefit of hashtables such as those provided by
+ <code>java.util.Hashtable</code>.
+ <p>
+ The general contract of <code>hashCode</code> is:
+ <ul>
+ <li>Whenever it is invoked on the same object more than once during
+ an execution of a Java application, the <tt>hashCode</tt> method
+ must consistently return the same integer, provided no information
+ used in <tt>equals</tt> comparisons on the object is modified.
+ This integer need not remain consistent from one execution of an
+ application to another execution of the same application.
+ <li>If two objects are equal according to the <tt>equals(Object)</tt>
+ method, then calling the <code>hashCode</code> method on each of
+ the two objects must produce the same integer result.
+ <li>It is <em>not</em> required that if two objects are unequal
+ according to the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>
+ method, then calling the <tt>hashCode</tt> method on each of the
+ two objects must produce distinct integer results. However, the
+ programmer should be aware that producing distinct integer results
+ for unequal objects may improve the performance of hashtables.
+ </ul>
+ <p>
+ As much as is reasonably practical, the hashCode method defined by
+ class <tt>Object</tt> does return distinct integers for distinct
+ objects. (This is typically implemented by converting the internal
+ address of the object into an integer, but this implementation
+ technique is not required by the
+ Java<font size="-2"><sup>TM</sup></font> programming language.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingMapEntry.html b/javadoc/com/google/common/collect/ForwardingMapEntry.html
new file mode 100644
index 0000000..d84986c
--- /dev/null
+++ b/javadoc/com/google/common/collect/ForwardingMapEntry.html
@@ -0,0 +1,490 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:15 PST 2009 -->
+<TITLE>
+ForwardingMapEntry (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ForwardingMapEntry (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingMapEntry.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingMapEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingMapEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ForwardingMapEntry&lt;K,V&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingMapEntry&lt;K,V&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>ForwardingMapEntry&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A><DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;</DL>
+</PRE>
+
+<P>
+A map entry which forwards all its method calls to another map entry.
+ Subclasses should override one or more methods to modify the behavior of the
+ backing map entry as desired per the <a
+ href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Mike Bostock</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A></DL>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html#ForwardingMapEntry()">ForwardingMapEntry</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected abstract &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html#delegate()">delegate</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indicates whether some other object is "equal to" this one.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">K</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html#getKey()">getKey</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the key corresponding to this entry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html#getValue()">getValue</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value corresponding to this entry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code value for the object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html#setValue(V)">setValue</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Replaces the value corresponding to this entry with the specified
+ value (optional operation).</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ForwardingMapEntry()"><!-- --></A><H3>
+ForwardingMapEntry</H3>
+<PRE>
+public <B>ForwardingMapEntry</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="delegate()"><!-- --></A><H3>
+delegate</H3>
+<PRE>
+protected abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A>&gt; <B>delegate</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
+<DD>Returns the backing delegate instance that methods are forwarded to.
+ Abstract subclasses generally override this method with an abstract method
+ that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
+ the instance being decorated.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getKey()"><!-- --></A><H3>
+getKey</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">K</A> <B>getKey</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true#getKey()" title="class or interface in java.util">java.util.Map.Entry</A></CODE></B></DD>
+<DD>Returns the key corresponding to this entry.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true#getKey()" title="class or interface in java.util">getKey</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the key corresponding to this entry</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getValue()"><!-- --></A><H3>
+getValue</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A> <B>getValue</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true#getValue()" title="class or interface in java.util">java.util.Map.Entry</A></CODE></B></DD>
+<DD>Returns the value corresponding to this entry. If the mapping
+ has been removed from the backing map (by the iterator's
+ <tt>remove</tt> operation), the results of this call are undefined.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true#getValue()" title="class or interface in java.util">getValue</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the value corresponding to this entry</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setValue(java.lang.Object)"><!-- --></A><A NAME="setValue(V)"><!-- --></A><H3>
+setValue</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A> <B>setValue</B>(<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true#setValue(V)" title="class or interface in java.util">java.util.Map.Entry</A></CODE></B></DD>
+<DD>Replaces the value corresponding to this entry with the specified
+ value (optional operation). (Writes through to the map.) The
+ behavior of this call is undefined if the mapping has already been
+ removed from the map (by the iterator's <tt>remove</tt> operation).
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true#setValue(V)" title="class or interface in java.util">setValue</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>value</CODE> - new value to be stored in this entry
+<DT><B>Returns:</B><DD>old value corresponding to the entry</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Indicates whether some other object is "equal to" this one.
+ <p>
+ The <code>equals</code> method implements an equivalence relation
+ on non-null object references:
+ <ul>
+ <li>It is <i>reflexive</i>: for any non-null reference value
+ <code>x</code>, <code>x.equals(x)</code> should return
+ <code>true</code>.
+ <li>It is <i>symmetric</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, <code>x.equals(y)</code>
+ should return <code>true</code> if and only if
+ <code>y.equals(x)</code> returns <code>true</code>.
+ <li>It is <i>transitive</i>: for any non-null reference values
+ <code>x</code>, <code>y</code>, and <code>z</code>, if
+ <code>x.equals(y)</code> returns <code>true</code> and
+ <code>y.equals(z)</code> returns <code>true</code>, then
+ <code>x.equals(z)</code> should return <code>true</code>.
+ <li>It is <i>consistent</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, multiple invocations of
+ <tt>x.equals(y)</tt> consistently return <code>true</code>
+ or consistently return <code>false</code>, provided no
+ information used in <code>equals</code> comparisons on the
+ objects is modified.
+ <li>For any non-null reference value <code>x</code>,
+ <code>x.equals(null)</code> should return <code>false</code>.
+ </ul>
+ <p>
+ The <tt>equals</tt> method for class <code>Object</code> implements
+ the most discriminating possible equivalence relation on objects;
+ that is, for any non-null reference values <code>x</code> and
+ <code>y</code>, this method returns <code>true</code> if and only
+ if <code>x</code> and <code>y</code> refer to the same object
+ (<code>x == y</code> has the value <code>true</code>).
+ <p>
+ Note that it is generally necessary to override the <tt>hashCode</tt>
+ method whenever this method is overridden, so as to maintain the
+ general contract for the <tt>hashCode</tt> method, which states
+ that equal objects must have equal hash codes.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+public int <B>hashCode</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Returns a hash code value for the object. This method is
+ supported for the benefit of hashtables such as those provided by
+ <code>java.util.Hashtable</code>.
+ <p>
+ The general contract of <code>hashCode</code> is:
+ <ul>
+ <li>Whenever it is invoked on the same object more than once during
+ an execution of a Java application, the <tt>hashCode</tt> method
+ must consistently return the same integer, provided no information
+ used in <tt>equals</tt> comparisons on the object is modified.
+ This integer need not remain consistent from one execution of an
+ application to another execution of the same application.
+ <li>If two objects are equal according to the <tt>equals(Object)</tt>
+ method, then calling the <code>hashCode</code> method on each of
+ the two objects must produce the same integer result.
+ <li>It is <em>not</em> required that if two objects are unequal
+ according to the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>
+ method, then calling the <tt>hashCode</tt> method on each of the
+ two objects must produce distinct integer results. However, the
+ programmer should be aware that producing distinct integer results
+ for unequal objects may improve the performance of hashtables.
+ </ul>
+ <p>
+ As much as is reasonably practical, the hashCode method defined by
+ class <tt>Object</tt> does return distinct integers for distinct
+ objects. (This is typically implemented by converting the internal
+ address of the object into an integer, but this implementation
+ technique is not required by the
+ Java<font size="-2"><sup>TM</sup></font> programming language.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingMapEntry.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingMapEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingMapEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingMultimap.html b/javadoc/com/google/common/collect/ForwardingMultimap.html
new file mode 100644
index 0000000..7a3396e
--- /dev/null
+++ b/javadoc/com/google/common/collect/ForwardingMultimap.html
@@ -0,0 +1,930 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:15 PST 2009 -->
+<TITLE>
+ForwardingMultimap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ForwardingMultimap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ForwardingMultimap&lt;K,V&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingMultimap&lt;K,V&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>ForwardingMultimap&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A><DT>implements <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</DL>
+</PRE>
+
+<P>
+A multimap which forwards all its method calls to another multimap.
+ Subclasses should override one or more methods to modify the behavior of
+ the backing multimap as desired per the <a
+ href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Robert Konigsberg</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A></DL>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#ForwardingMultimap()">ForwardingMultimap</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#asMap()">asMap</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map view that associates each key with the corresponding values
+ in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#clear()">clear</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all key-value pairs from the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified key-value pair.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#containsKey(java.lang.Object)">containsKey</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains any values for the specified
+ key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified value for any
+ key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected abstract &nbsp;<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#delegate()">delegate</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#entries()">entries</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all key-value pairs.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indicates whether some other object is "equal to" this one.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#get(K)">get</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection view of all values associated with a key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code value for the object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#isEmpty()">isEmpty</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains no key-value pairs.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#keys()">keys</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection, which may contain duplicates, of all keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#keySet()">keySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of all keys, each appearing once in the returned set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a key-value pair in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#putAll(K, java.lang.Iterable)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,? extends <A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all of another multimap's key-value pairs into this multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a key-value pair from the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all values associated with a given key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key, replacing any existing
+ values for that key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#size()">size</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of key-value pairs in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#values()">values</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all values in the multimap.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ForwardingMultimap()"><!-- --></A><H3>
+ForwardingMultimap</H3>
+<PRE>
+public <B>ForwardingMultimap</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="delegate()"><!-- --></A><H3>
+delegate</H3>
+<PRE>
+protected abstract <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt; <B>delegate</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
+<DD>Returns the backing delegate instance that methods are forwarded to.
+ Abstract subclasses generally override this method with an abstract method
+ that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
+ the instance being decorated.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="asMap()"><!-- --></A><H3>
+asMap</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;&gt; <B>asMap</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">Multimap</A></CODE></B></DD>
+<DD>Returns a map view that associates each key with the corresponding values
+ in the multimap. Changes to the returned map, such as element removal,
+ will update the underlying multimap. The map does not support
+ <code>setValue()</code> on its entries, <code>put</code>, or <code>putAll</code>.
+
+ <p>The collections returned by <code>asMap().get(Object)</code> have the same
+ behavior as those returned by <A HREF="../../../../com/google/common/collect/Multimap.html#get(K)"><CODE>Multimap.get(K)</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a map view from a key to its collection of values</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clear()"><!-- --></A><H3>
+clear</H3>
+<PRE>
+public void <B>clear</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">Multimap</A></CODE></B></DD>
+<DD>Removes all key-value pairs from the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsEntry(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
+containsEntry</H3>
+<PRE>
+public boolean <B>containsEntry</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains the specified key-value pair.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap<DD><CODE>value</CODE> - value to search for in multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsKey(java.lang.Object)"><!-- --></A><H3>
+containsKey</H3>
+<PRE>
+public boolean <B>containsKey</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains any values for the specified
+ key.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
+containsValue</H3>
+<PRE>
+public boolean <B>containsValue</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains the specified value for any
+ key.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>value</CODE> - value to search for in multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entries()"><!-- --></A><H3>
+entries</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;&gt; <B>entries</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#entries()">Multimap</A></CODE></B></DD>
+<DD>Returns a collection of all key-value pairs. Changes to the returned
+ collection will update the underlying multimap, and vice versa. The entries
+ collection does not support the <code>add</code> or <code>addAll</code> operations.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#entries()">entries</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>collection of map entries consisting of key-value pairs</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(java.lang.Object)"><!-- --></A><A NAME="get(K)"><!-- --></A><H3>
+get</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt; <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>&nbsp;key)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">Multimap</A></CODE></B></DD>
+<DD>Returns a collection view of all values associated with a key. If no
+ mappings in the multimap have the provided key, an empty collection is
+ returned.
+
+ <p>Changes to the returned collection will update the underlying multimap,
+ and vice versa.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap
+<DT><B>Returns:</B><DD>the collection of values that the key maps to</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isEmpty()"><!-- --></A><H3>
+isEmpty</H3>
+<PRE>
+public boolean <B>isEmpty</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains no key-value pairs.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keys()"><!-- --></A><H3>
+keys</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>&gt; <B>keys</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">Multimap</A></CODE></B></DD>
+<DD>Returns a collection, which may contain duplicates, of all keys. The number
+ of times of key appears in the returned multiset equals the number of
+ mappings the key has in the multimap. Changes to the returned multiset will
+ update the underlying multimap, and vice versa.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a multiset with keys corresponding to the distinct keys of the
+ multimap and frequencies corresponding to the number of values that
+ each key maps to</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keySet()"><!-- --></A><H3>
+keySet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>&gt; <B>keySet</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">Multimap</A></CODE></B></DD>
+<DD>Returns the set of all keys, each appearing once in the returned set.
+ Changes to the returned set will update the underlying multimap, and vice
+ versa.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the collection of distinct keys</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
+put</H3>
+<PRE>
+public boolean <B>put</B>(<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">Multimap</A></CODE></B></DD>
+<DD>Stores a key-value pair in the multimap.
+
+ <p>Some multimap implementations allow duplicate key-value pairs, in which
+ case <code>put</code> always adds a new key-value pair and increases the
+ multimap size by 1. Other implementations prohibit duplicates, and storing
+ a key-value pair that's already in the multimap has no effect.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>value</CODE> - value to store in the multimap
+<DT><B>Returns:</B><DD><code>true</code> if the method increased the size of the multimap, or
+ <code>false</code> if the multimap already contained the key-value pair and
+ doesn't allow duplicates</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="putAll(K, java.lang.Iterable)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public boolean <B>putAll</B>(<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;&nbsp;values)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">Multimap</A></CODE></B></DD>
+<DD>Stores a collection of values with the same key.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
+<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(com.google.common.collect.Multimap)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public boolean <B>putAll</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,? extends <A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;&nbsp;multimap)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">Multimap</A></CODE></B></DD>
+<DD>Copies all of another multimap's key-value pairs into this multimap. The
+ order in which the mappings are added is determined by
+ <code>multimap.entries()</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - mappings to store in this multimap
+<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public boolean <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Removes a key-value pair from the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entry to remove from the multimap<DD><CODE>value</CODE> - value of entry to remove the multimap
+<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
+removeAll</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt; <B>removeAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Removes all values associated with a given key.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entries to remove from the multimap
+<DT><B>Returns:</B><DD>the collection of removed values, or an empty collection if no
+ values were associated with the provided key. The collection
+ <i>may</i> be modifiable, but updating it will have no effect on the
+ multimap.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="replaceValues(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="replaceValues(K, java.lang.Iterable)"><!-- --></A><H3>
+replaceValues</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt; <B>replaceValues</B>(<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;&nbsp;values)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">Multimap</A></CODE></B></DD>
+<DD>Stores a collection of values with the same key, replacing any existing
+ values for that key.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
+<DT><B>Returns:</B><DD>the collection of replaced values, or an empty collection if no
+ values were previously associated with the key. The collection
+ <i>may</i> be modifiable, but updating it will have no effect on the
+ multimap.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="size()"><!-- --></A><H3>
+size</H3>
+<PRE>
+public int <B>size</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">Multimap</A></CODE></B></DD>
+<DD>Returns the number of key-value pairs in the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="values()"><!-- --></A><H3>
+values</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt; <B>values</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#values()">Multimap</A></CODE></B></DD>
+<DD>Returns a collection of all values in the multimap. Changes to the returned
+ collection will update the underlying multimap, and vice versa.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>collection of values, which may include the same value multiple
+ times if it occurs in multiple mappings</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Indicates whether some other object is "equal to" this one.
+ <p>
+ The <code>equals</code> method implements an equivalence relation
+ on non-null object references:
+ <ul>
+ <li>It is <i>reflexive</i>: for any non-null reference value
+ <code>x</code>, <code>x.equals(x)</code> should return
+ <code>true</code>.
+ <li>It is <i>symmetric</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, <code>x.equals(y)</code>
+ should return <code>true</code> if and only if
+ <code>y.equals(x)</code> returns <code>true</code>.
+ <li>It is <i>transitive</i>: for any non-null reference values
+ <code>x</code>, <code>y</code>, and <code>z</code>, if
+ <code>x.equals(y)</code> returns <code>true</code> and
+ <code>y.equals(z)</code> returns <code>true</code>, then
+ <code>x.equals(z)</code> should return <code>true</code>.
+ <li>It is <i>consistent</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, multiple invocations of
+ <tt>x.equals(y)</tt> consistently return <code>true</code>
+ or consistently return <code>false</code>, provided no
+ information used in <code>equals</code> comparisons on the
+ objects is modified.
+ <li>For any non-null reference value <code>x</code>,
+ <code>x.equals(null)</code> should return <code>false</code>.
+ </ul>
+ <p>
+ The <tt>equals</tt> method for class <code>Object</code> implements
+ the most discriminating possible equivalence relation on objects;
+ that is, for any non-null reference values <code>x</code> and
+ <code>y</code>, this method returns <code>true</code> if and only
+ if <code>x</code> and <code>y</code> refer to the same object
+ (<code>x == y</code> has the value <code>true</code>).
+ <p>
+ Note that it is generally necessary to override the <tt>hashCode</tt>
+ method whenever this method is overridden, so as to maintain the
+ general contract for the <tt>hashCode</tt> method, which states
+ that equal objects must have equal hash codes.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+public int <B>hashCode</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Returns a hash code value for the object. This method is
+ supported for the benefit of hashtables such as those provided by
+ <code>java.util.Hashtable</code>.
+ <p>
+ The general contract of <code>hashCode</code> is:
+ <ul>
+ <li>Whenever it is invoked on the same object more than once during
+ an execution of a Java application, the <tt>hashCode</tt> method
+ must consistently return the same integer, provided no information
+ used in <tt>equals</tt> comparisons on the object is modified.
+ This integer need not remain consistent from one execution of an
+ application to another execution of the same application.
+ <li>If two objects are equal according to the <tt>equals(Object)</tt>
+ method, then calling the <code>hashCode</code> method on each of
+ the two objects must produce the same integer result.
+ <li>It is <em>not</em> required that if two objects are unequal
+ according to the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>
+ method, then calling the <tt>hashCode</tt> method on each of the
+ two objects must produce distinct integer results. However, the
+ programmer should be aware that producing distinct integer results
+ for unequal objects may improve the performance of hashtables.
+ </ul>
+ <p>
+ As much as is reasonably practical, the hashCode method defined by
+ class <tt>Object</tt> does return distinct integers for distinct
+ objects. (This is typically implemented by converting the internal
+ address of the object into an integer, but this implementation
+ technique is not required by the
+ Java<font size="-2"><sup>TM</sup></font> programming language.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingMultiset.html b/javadoc/com/google/common/collect/ForwardingMultiset.html
new file mode 100644
index 0000000..ad94273
--- /dev/null
+++ b/javadoc/com/google/common/collect/ForwardingMultiset.html
@@ -0,0 +1,701 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:15 PST 2009 -->
+<TITLE>
+ForwardingMultiset (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ForwardingMultiset (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ForwardingMultiset&lt;E&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingCollection</A>&lt;E&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingMultiset&lt;E&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>ForwardingMultiset&lt;E&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>&lt;E&gt;<DT>implements <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</DL>
+</PRE>
+
+<P>
+A multiset which forwards all its method calls to another multiset.
+ Subclasses should override one or more methods to modify the behavior of the
+ backing multiset as desired per the <a
+ href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="nested_classes_inherited_from_class_com.google.common.collect.Multiset"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="type parameter in Multiset.Entry">E</A>&gt;</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultiset.html#ForwardingMultiset()">ForwardingMultiset</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultiset.html#add(E, int)">add</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&nbsp;element,
+ int&nbsp;occurrences)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a number of occurrences of an element to this multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultiset.html#count(java.lang.Object)">count</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of occurrences of an element in this multiset (the
+ <i>count</i> of the element).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected abstract &nbsp;<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultiset.html#delegate()">delegate</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultiset.html#elementSet()">elementSet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of distinct elements contained in this multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultiset.html#entrySet()">entrySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
+ the count of that element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultiset.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indicates whether some other object is "equal to" this one.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultiset.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code value for the object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultiset.html#remove(java.lang.Object, int)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
+ int&nbsp;occurrences)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a number of occurrences of the specified element from this
+ multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultiset.html#setCount(E, int)">setCount</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&nbsp;element,
+ int&nbsp;count)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds or removes the necessary occurrences of an element such that the
+ element attains the desired count.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultiset.html#setCount(E, int, int)">setCount</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&nbsp;element,
+ int&nbsp;oldCount,
+ int&nbsp;newCount)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Conditionally sets the count of an element to a new value, as described in
+ <A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)"><CODE>Multiset.setCount(Object, int)</CODE></A>, provided that the element has the expected
+ current count.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingCollection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#add(E)">add</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#contains(java.lang.Object)">contains</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#iterator()">iterator</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#toArray()">toArray</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#toArray(T[])">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.Multiset"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E)">add</A>, <A HREF="../../../../com/google/common/collect/Multiset.html#contains(java.lang.Object)">contains</A>, <A HREF="../../../../com/google/common/collect/Multiset.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/google/common/collect/Multiset.html#iterator()">iterator</A>, <A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/Multiset.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/google/common/collect/Multiset.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/google/common/collect/Multiset.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Collection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ForwardingMultiset()"><!-- --></A><H3>
+ForwardingMultiset</H3>
+<PRE>
+public <B>ForwardingMultiset</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="delegate()"><!-- --></A><H3>
+delegate</H3>
+<PRE>
+protected abstract <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt; <B>delegate</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
+<DD>Returns the backing delegate instance that methods are forwarded to.
+ Abstract subclasses generally override this method with an abstract method
+ that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
+ the instance being decorated.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="count(java.lang.Object)"><!-- --></A><H3>
+count</H3>
+<PRE>
+public int <B>count</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">Multiset</A></CODE></B></DD>
+<DD>Returns the number of occurrences of an element in this multiset (the
+ <i>count</i> of the element). Note that for an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>-based
+ multiset, this gives the same result as <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#frequency(java.util.Collection, java.lang.Object)" title="class or interface in java.util"><CODE>Collections.frequency(java.util.Collection<?>, java.lang.Object)</CODE></A>
+ (which would presumably perform more poorly).
+
+ <p><b>Note:</b> the utility method <A HREF="../../../../com/google/common/collect/Iterables.html#frequency(java.lang.Iterable, java.lang.Object)"><CODE>Iterables.frequency(java.lang.Iterable<?>, java.lang.Object)</CODE></A> generalizes
+ this operation; it correctly delegates to this method when dealing with a
+ multiset, but it can also accept any other iterable type.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">count</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to count occurrences of
+<DT><B>Returns:</B><DD>the number of occurrences of the element in this multiset; possibly
+ zero but never negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="add(java.lang.Object,int)"><!-- --></A><A NAME="add(E, int)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public int <B>add</B>(<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&nbsp;element,
+ int&nbsp;occurrences)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E, int)">Multiset</A></CODE></B></DD>
+<DD>Adds a number of occurrences of an element to this multiset. Note that if
+ <code>occurrences == 1</code>, this method has the identical effect to <A HREF="../../../../com/google/common/collect/Multiset.html#add(E)"><CODE>Multiset.add(Object)</CODE></A>. This method is functionally equivalent (except in the case
+ of overflow) to the call <code>addAll(Collections.nCopies(element,
+ occurrences))</code>, which would presumably perform much more poorly.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E, int)">add</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add occurrences of; may be <code>null</code> only
+ if explicitly allowed by the implementation<DD><CODE>occurrences</CODE> - the number of occurrences of the element to add. May be
+ zero, in which case no change will be made.
+<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object, int)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public int <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
+ int&nbsp;occurrences)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object, int)">Multiset</A></CODE></B></DD>
+<DD>Removes a number of occurrences of the specified element from this
+ multiset. If the multiset contains fewer than this number of occurrences to
+ begin with, all occurrences will be removed. Note that if
+ <code>occurrences == 1</code>, this is functionally equivalent to the call
+ <code>remove(element)</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object, int)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally remove occurrences of<DD><CODE>occurrences</CODE> - the number of occurrences of the element to remove. May
+ be zero, in which case no change will be made.
+<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="elementSet()"><!-- --></A><H3>
+elementSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt; <B>elementSet</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">Multiset</A></CODE></B></DD>
+<DD>Returns the set of distinct elements contained in this multiset. The
+ element set is backed by the same data as the multiset, so any change to
+ either is immediately reflected in the other. The order of the elements in
+ the element set is unspecified.
+
+ <p>If the element set supports any removal operations, these necessarily
+ cause <b>all</b> occurrences of the removed element(s) to be removed from
+ the multiset. Implementations are not expected to support the add
+ operations, although this is possible.
+
+ <p>A common use for the element set is to find the number of distinct
+ elements in the multiset: <code>elementSet().size()</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">elementSet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a view of the set of distinct elements in this multiset</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entrySet()"><!-- --></A><H3>
+entrySet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;&gt; <B>entrySet</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()">Multiset</A></CODE></B></DD>
+<DD>Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
+ the count of that element. This set contains exactly one entry for each
+ distinct element in the multiset (thus it always has the same size as the
+ <A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()"><CODE>Multiset.elementSet()</CODE></A>). The order of the elements in the element set is
+ unspecified.
+
+ <p>The entry set is backed by the same data as the multiset, so any change
+ to either is immediately reflected in the other. However, multiset changes
+ may or may not be reflected in any <code>Entry</code> instances already
+ retrieved from the entry set (this is implementation-dependent).
+ Furthermore, implementations are not required to support modifications to
+ the entry set at all, and the <code>Entry</code> instances themselves don't
+ even have methods for modification. See the specific implementation class
+ for more details on how its entry set handles modifications.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()">entrySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a set of entries representing the data of this multiset</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Indicates whether some other object is "equal to" this one.
+ <p>
+ The <code>equals</code> method implements an equivalence relation
+ on non-null object references:
+ <ul>
+ <li>It is <i>reflexive</i>: for any non-null reference value
+ <code>x</code>, <code>x.equals(x)</code> should return
+ <code>true</code>.
+ <li>It is <i>symmetric</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, <code>x.equals(y)</code>
+ should return <code>true</code> if and only if
+ <code>y.equals(x)</code> returns <code>true</code>.
+ <li>It is <i>transitive</i>: for any non-null reference values
+ <code>x</code>, <code>y</code>, and <code>z</code>, if
+ <code>x.equals(y)</code> returns <code>true</code> and
+ <code>y.equals(z)</code> returns <code>true</code>, then
+ <code>x.equals(z)</code> should return <code>true</code>.
+ <li>It is <i>consistent</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, multiple invocations of
+ <tt>x.equals(y)</tt> consistently return <code>true</code>
+ or consistently return <code>false</code>, provided no
+ information used in <code>equals</code> comparisons on the
+ objects is modified.
+ <li>For any non-null reference value <code>x</code>,
+ <code>x.equals(null)</code> should return <code>false</code>.
+ </ul>
+ <p>
+ The <tt>equals</tt> method for class <code>Object</code> implements
+ the most discriminating possible equivalence relation on objects;
+ that is, for any non-null reference values <code>x</code> and
+ <code>y</code>, this method returns <code>true</code> if and only
+ if <code>x</code> and <code>y</code> refer to the same object
+ (<code>x == y</code> has the value <code>true</code>).
+ <p>
+ Note that it is generally necessary to override the <tt>hashCode</tt>
+ method whenever this method is overridden, so as to maintain the
+ general contract for the <tt>hashCode</tt> method, which states
+ that equal objects must have equal hash codes.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+public int <B>hashCode</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Returns a hash code value for the object. This method is
+ supported for the benefit of hashtables such as those provided by
+ <code>java.util.Hashtable</code>.
+ <p>
+ The general contract of <code>hashCode</code> is:
+ <ul>
+ <li>Whenever it is invoked on the same object more than once during
+ an execution of a Java application, the <tt>hashCode</tt> method
+ must consistently return the same integer, provided no information
+ used in <tt>equals</tt> comparisons on the object is modified.
+ This integer need not remain consistent from one execution of an
+ application to another execution of the same application.
+ <li>If two objects are equal according to the <tt>equals(Object)</tt>
+ method, then calling the <code>hashCode</code> method on each of
+ the two objects must produce the same integer result.
+ <li>It is <em>not</em> required that if two objects are unequal
+ according to the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>
+ method, then calling the <tt>hashCode</tt> method on each of the
+ two objects must produce distinct integer results. However, the
+ programmer should be aware that producing distinct integer results
+ for unequal objects may improve the performance of hashtables.
+ </ul>
+ <p>
+ As much as is reasonably practical, the hashCode method defined by
+ class <tt>Object</tt> does return distinct integers for distinct
+ objects. (This is typically implemented by converting the internal
+ address of the object into an integer, but this implementation
+ technique is not required by the
+ Java<font size="-2"><sup>TM</sup></font> programming language.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setCount(java.lang.Object,int)"><!-- --></A><A NAME="setCount(E, int)"><!-- --></A><H3>
+setCount</H3>
+<PRE>
+public int <B>setCount</B>(<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&nbsp;element,
+ int&nbsp;count)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)">Multiset</A></CODE></B></DD>
+<DD>Adds or removes the necessary occurrences of an element such that the
+ element attains the desired count.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add or remove occurrences of; may be null
+ only if explicitly allowed by the implementation<DD><CODE>count</CODE> - the desired count of the element in this multiset
+<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setCount(java.lang.Object,int,int)"><!-- --></A><A NAME="setCount(E, int, int)"><!-- --></A><H3>
+setCount</H3>
+<PRE>
+public boolean <B>setCount</B>(<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&nbsp;element,
+ int&nbsp;oldCount,
+ int&nbsp;newCount)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int, int)">Multiset</A></CODE></B></DD>
+<DD>Conditionally sets the count of an element to a new value, as described in
+ <A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)"><CODE>Multiset.setCount(Object, int)</CODE></A>, provided that the element has the expected
+ current count. If the current count is not <code>oldCount</code>, no change is
+ made.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally set the count of; may be null
+ only if explicitly allowed by the implementation<DD><CODE>oldCount</CODE> - the expected present count of the element in this multiset<DD><CODE>newCount</CODE> - the desired count of the element in this multiset
+<DT><B>Returns:</B><DD><code>true</code> if the condition for modification was met. This
+ implies that the multiset was indeed modified, unless
+ <code>oldCount == newCount</code>.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingObject.html b/javadoc/com/google/common/collect/ForwardingObject.html
new file mode 100644
index 0000000..575adf4
--- /dev/null
+++ b/javadoc/com/google/common/collect/ForwardingObject.html
@@ -0,0 +1,320 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:15 PST 2009 -->
+<TITLE>
+ForwardingObject (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ForwardingObject (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingObject.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingObject.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingObject.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ForwardingObject</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingObject</B>
+</PRE>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>, <A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>, <A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect">ForwardingMapEntry</A>, <A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>ForwardingObject</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+An abstract base class for implementing the <a
+ href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ The <A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()"><CODE>delegate()</CODE></A> method must be overridden to return the instance
+ being decorated.
+
+ This class does <i>not</i> forward the <code>hashCode</code> and <code>equals</code>
+ methods through to the backing object, but relies on <code>Object</code>'s
+ implementation. This is necessary to preserve the symmetry of <code>equals</code>.
+ Custom definitions of equality are usually based on an interface, such as
+ <code>Set</code> or <code>List</code>, so that the implementation of <code>equals</code> can
+ cast the object being tested for equality to the custom interface. <code>ForwardingObject</code> implements no such custom interfaces directly; they
+ are implemented only in subclasses. Therefore, forwarding <code>equals</code>
+ would break symmetry, as the forwarding object might consider itself equal to
+ the object being tested, but the reverse could not be true. This behavior is
+ consistent with the JDK's collection wrappers, such as
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#unmodifiableCollection(java.util.Collection)" title="class or interface in java.util"><CODE>Collections.unmodifiableCollection(java.util.Collection<? extends T>)</CODE></A>. Use an
+ interface-specific subclass of <code>ForwardingObject</code>, such as <A HREF="../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect"><CODE>ForwardingList</CODE></A>, to preserve equality behavior, or override <code>equals</code>
+ directly.
+
+ <p>The <code>toString</code> method is forwarded to the delegate. Although this
+ class does not implement <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io"><CODE>Serializable</CODE></A>, a serializable subclass may be
+ created since this class has a parameter-less constructor.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Mike Bostock</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected </CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingObject.html#ForwardingObject()">ForwardingObject</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sole constructor.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected abstract &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">delegate</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the string representation generated by the delegate's
+ <code>toString</code> method.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ForwardingObject()"><!-- --></A><H3>
+ForwardingObject</H3>
+<PRE>
+protected <B>ForwardingObject</B>()</PRE>
+<DL>
+<DD>Sole constructor.
+<P>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="delegate()"><!-- --></A><H3>
+delegate</H3>
+<PRE>
+protected abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A> <B>delegate</B>()</PRE>
+<DL>
+<DD>Returns the backing delegate instance that methods are forwarded to.
+ Abstract subclasses generally override this method with an abstract method
+ that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
+ the instance being decorated.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Returns the string representation generated by the delegate's
+ <code>toString</code> method.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a string representation of the object.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingObject.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingObject.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingObject.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingQueue.html b/javadoc/com/google/common/collect/ForwardingQueue.html
new file mode 100644
index 0000000..ff88277
--- /dev/null
+++ b/javadoc/com/google/common/collect/ForwardingQueue.html
@@ -0,0 +1,457 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:15 PST 2009 -->
+<TITLE>
+ForwardingQueue (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ForwardingQueue (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingQueue.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingQueue.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingQueue.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ForwardingQueue&lt;E&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingCollection</A>&lt;E&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingQueue&lt;E&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</A>&lt;E&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>ForwardingQueue&lt;E&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>&lt;E&gt;<DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</A>&lt;E&gt;</DL>
+</PRE>
+
+<P>
+A queue which forwards all its method calls to another queue. Subclasses
+ should override one or more methods to modify the behavior of the backing
+ queue as desired per the <a
+ href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Mike Bostock</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A></DL>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingQueue.html#ForwardingQueue()">ForwardingQueue</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected abstract &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingQueue.html#delegate()">delegate</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingQueue.html#element()">element</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves, but does not remove, the head of this queue.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingQueue.html#offer(E)">offer</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A>&nbsp;o)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Inserts the specified element into this queue if it is possible to do
+ so immediately without violating capacity restrictions.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingQueue.html#peek()">peek</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves, but does not remove, the head of this queue,
+ or returns <tt>null</tt> if this queue is empty.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingQueue.html#poll()">poll</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves and removes the head of this queue,
+ or returns <tt>null</tt> if this queue is empty.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingQueue.html#remove()">remove</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves and removes the head of this queue.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingCollection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#add(E)">add</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#contains(java.lang.Object)">contains</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#iterator()">iterator</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#toArray()">toArray</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#toArray(T[])">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Queue"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Collection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ForwardingQueue()"><!-- --></A><H3>
+ForwardingQueue</H3>
+<PRE>
+public <B>ForwardingQueue</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="delegate()"><!-- --></A><H3>
+delegate</H3>
+<PRE>
+protected abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A>&gt; <B>delegate</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
+<DD>Returns the backing delegate instance that methods are forwarded to.
+ Abstract subclasses generally override this method with an abstract method
+ that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
+ the instance being decorated.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="offer(java.lang.Object)"><!-- --></A><A NAME="offer(E)"><!-- --></A><H3>
+offer</H3>
+<PRE>
+public boolean <B>offer</B>(<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A>&nbsp;o)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true#offer(E)" title="class or interface in java.util">java.util.Queue</A></CODE></B></DD>
+<DD>Inserts the specified element into this queue if it is possible to do
+ so immediately without violating capacity restrictions.
+ When using a capacity-restricted queue, this method is generally
+ preferable to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true#add(E)" title="class or interface in java.util"><CODE>Queue.add(E)</CODE></A>, which can fail to insert an element only
+ by throwing an exception.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true#offer(E)" title="class or interface in java.util">offer</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>o</CODE> - the element to add
+<DT><B>Returns:</B><DD><tt>true</tt> if the element was added to this queue, else
+ <tt>false</tt></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="poll()"><!-- --></A><H3>
+poll</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A> <B>poll</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true#poll()" title="class or interface in java.util">java.util.Queue</A></CODE></B></DD>
+<DD>Retrieves and removes the head of this queue,
+ or returns <tt>null</tt> if this queue is empty.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true#poll()" title="class or interface in java.util">poll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the head of this queue, or <tt>null</tt> if this queue is empty</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove()"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A> <B>remove</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true#remove()" title="class or interface in java.util">java.util.Queue</A></CODE></B></DD>
+<DD>Retrieves and removes the head of this queue. This method differs
+ from <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true#poll()" title="class or interface in java.util"><CODE>poll</CODE></A> only in that it throws an exception if this
+ queue is empty.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true#remove()" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the head of this queue</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="peek()"><!-- --></A><H3>
+peek</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A> <B>peek</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true#peek()" title="class or interface in java.util">java.util.Queue</A></CODE></B></DD>
+<DD>Retrieves, but does not remove, the head of this queue,
+ or returns <tt>null</tt> if this queue is empty.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true#peek()" title="class or interface in java.util">peek</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the head of this queue, or <tt>null</tt> if this queue is empty</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="element()"><!-- --></A><H3>
+element</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A> <B>element</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true#element()" title="class or interface in java.util">java.util.Queue</A></CODE></B></DD>
+<DD>Retrieves, but does not remove, the head of this queue. This method
+ differs from <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true#peek()" title="class or interface in java.util"><CODE>peek</CODE></A> only in that it throws an exception
+ if this queue is empty.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true#element()" title="class or interface in java.util">element</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the head of this queue</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingQueue.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingQueue.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingQueue.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingSet.html b/javadoc/com/google/common/collect/ForwardingSet.html
new file mode 100644
index 0000000..63bafe9
--- /dev/null
+++ b/javadoc/com/google/common/collect/ForwardingSet.html
@@ -0,0 +1,428 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:15 PST 2009 -->
+<TITLE>
+ForwardingSet (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ForwardingSet (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingSet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingSet.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingSet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ForwardingSet&lt;E&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingCollection</A>&lt;E&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingSet&lt;E&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;</DD>
+</DL>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>ForwardingSet&lt;E&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>&lt;E&gt;<DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;</DL>
+</PRE>
+
+<P>
+A set which forwards all its method calls to another set. Subclasses should
+ override one or more methods to modify the behavior of the backing set as
+ desired per the <a
+ href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A></DL>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSet.html#ForwardingSet()">ForwardingSet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected abstract &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="type parameter in ForwardingSet">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()">delegate</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSet.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indicates whether some other object is "equal to" this one.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSet.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code value for the object.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingCollection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#add(E)">add</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#contains(java.lang.Object)">contains</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#iterator()">iterator</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#toArray()">toArray</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#toArray(T[])">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Set"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#add(E)" title="class or interface in java.util">add</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ForwardingSet()"><!-- --></A><H3>
+ForwardingSet</H3>
+<PRE>
+public <B>ForwardingSet</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="delegate()"><!-- --></A><H3>
+delegate</H3>
+<PRE>
+protected abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="type parameter in ForwardingSet">E</A>&gt; <B>delegate</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
+<DD>Returns the backing delegate instance that methods are forwarded to.
+ Abstract subclasses generally override this method with an abstract method
+ that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>delegate()</CODE></A>. Concrete subclasses override this method to supply
+ the instance being decorated.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="type parameter in ForwardingSet">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Indicates whether some other object is "equal to" this one.
+ <p>
+ The <code>equals</code> method implements an equivalence relation
+ on non-null object references:
+ <ul>
+ <li>It is <i>reflexive</i>: for any non-null reference value
+ <code>x</code>, <code>x.equals(x)</code> should return
+ <code>true</code>.
+ <li>It is <i>symmetric</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, <code>x.equals(y)</code>
+ should return <code>true</code> if and only if
+ <code>y.equals(x)</code> returns <code>true</code>.
+ <li>It is <i>transitive</i>: for any non-null reference values
+ <code>x</code>, <code>y</code>, and <code>z</code>, if
+ <code>x.equals(y)</code> returns <code>true</code> and
+ <code>y.equals(z)</code> returns <code>true</code>, then
+ <code>x.equals(z)</code> should return <code>true</code>.
+ <li>It is <i>consistent</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, multiple invocations of
+ <tt>x.equals(y)</tt> consistently return <code>true</code>
+ or consistently return <code>false</code>, provided no
+ information used in <code>equals</code> comparisons on the
+ objects is modified.
+ <li>For any non-null reference value <code>x</code>,
+ <code>x.equals(null)</code> should return <code>false</code>.
+ </ul>
+ <p>
+ The <tt>equals</tt> method for class <code>Object</code> implements
+ the most discriminating possible equivalence relation on objects;
+ that is, for any non-null reference values <code>x</code> and
+ <code>y</code>, this method returns <code>true</code> if and only
+ if <code>x</code> and <code>y</code> refer to the same object
+ (<code>x == y</code> has the value <code>true</code>).
+ <p>
+ Note that it is generally necessary to override the <tt>hashCode</tt>
+ method whenever this method is overridden, so as to maintain the
+ general contract for the <tt>hashCode</tt> method, which states
+ that equal objects must have equal hash codes.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="type parameter in ForwardingSet">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="type parameter in ForwardingSet">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+public int <B>hashCode</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Returns a hash code value for the object. This method is
+ supported for the benefit of hashtables such as those provided by
+ <code>java.util.Hashtable</code>.
+ <p>
+ The general contract of <code>hashCode</code> is:
+ <ul>
+ <li>Whenever it is invoked on the same object more than once during
+ an execution of a Java application, the <tt>hashCode</tt> method
+ must consistently return the same integer, provided no information
+ used in <tt>equals</tt> comparisons on the object is modified.
+ This integer need not remain consistent from one execution of an
+ application to another execution of the same application.
+ <li>If two objects are equal according to the <tt>equals(Object)</tt>
+ method, then calling the <code>hashCode</code> method on each of
+ the two objects must produce the same integer result.
+ <li>It is <em>not</em> required that if two objects are unequal
+ according to the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>
+ method, then calling the <tt>hashCode</tt> method on each of the
+ two objects must produce distinct integer results. However, the
+ programmer should be aware that producing distinct integer results
+ for unequal objects may improve the performance of hashtables.
+ </ul>
+ <p>
+ As much as is reasonably practical, the hashCode method defined by
+ class <tt>Object</tt> does return distinct integers for distinct
+ objects. (This is typically implemented by converting the internal
+ address of the object into an integer, but this implementation
+ technique is not required by the
+ Java<font size="-2"><sup>TM</sup></font> programming language.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="type parameter in ForwardingSet">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="type parameter in ForwardingSet">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingSet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingSet.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingSet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingSortedMap.html b/javadoc/com/google/common/collect/ForwardingSortedMap.html
new file mode 100644
index 0000000..c862239
--- /dev/null
+++ b/javadoc/com/google/common/collect/ForwardingSortedMap.html
@@ -0,0 +1,523 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:15 PST 2009 -->
+<TITLE>
+ForwardingSortedMap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ForwardingSortedMap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingSortedMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingSortedMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingSortedMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ForwardingSortedMap&lt;K,V&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingMap</A>&lt;K,V&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingSortedMap&lt;K,V&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;K,V&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>ForwardingSortedMap&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;<DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;K,V&gt;</DL>
+</PRE>
+
+<P>
+A sorted map which forwards all its method calls to another sorted map.
+ Subclasses should override one or more methods to modify the behavior of
+ the backing sorted map as desired per the <a
+ href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Mike Bostock</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">V</A>&gt;</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html#ForwardingSortedMap()">ForwardingSortedMap</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html#comparator()">comparator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the comparator used to order the keys in this map, or
+ <tt>null</tt> if this map uses the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">natural ordering</A> of its keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected abstract &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html#delegate()">delegate</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html#firstKey()">firstKey</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the first (lowest) key currently in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html#headMap(K)">headMap</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>&nbsp;toKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this map whose keys are
+ strictly less than <tt>toKey</tt>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html#lastKey()">lastKey</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the last (highest) key currently in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html#subMap(K, K)">subMap</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>&nbsp;fromKey,
+ <A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>&nbsp;toKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this map whose keys range from
+ <tt>fromKey</tt>, inclusive, to <tt>toKey</tt>, exclusive.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html#tailMap(K)">tailMap</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>&nbsp;fromKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this map whose keys are
+ greater than or equal to <tt>fromKey</tt>.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingMap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#entrySet()">entrySet</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#get(java.lang.Object)">get</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#putAll(java.util.Map)">putAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#values()">values</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.SortedMap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">put</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ForwardingSortedMap()"><!-- --></A><H3>
+ForwardingSortedMap</H3>
+<PRE>
+public <B>ForwardingSortedMap</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="delegate()"><!-- --></A><H3>
+delegate</H3>
+<PRE>
+protected abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt; <B>delegate</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
+<DD>Returns the backing delegate instance that methods are forwarded to.
+ Abstract subclasses generally override this method with an abstract method
+ that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
+ the instance being decorated.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="comparator()"><!-- --></A><H3>
+comparator</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>&gt; <B>comparator</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#comparator()" title="class or interface in java.util">java.util.SortedMap</A></CODE></B></DD>
+<DD>Returns the comparator used to order the keys in this map, or
+ <tt>null</tt> if this map uses the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">natural ordering</A> of its keys.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#comparator()" title="class or interface in java.util">comparator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the comparator used to order the keys in this map,
+ or <tt>null</tt> if this map uses the natural ordering
+ of its keys</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="firstKey()"><!-- --></A><H3>
+firstKey</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A> <B>firstKey</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#firstKey()" title="class or interface in java.util">java.util.SortedMap</A></CODE></B></DD>
+<DD>Returns the first (lowest) key currently in this map.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#firstKey()" title="class or interface in java.util">firstKey</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the first (lowest) key currently in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="headMap(java.lang.Object)"><!-- --></A><A NAME="headMap(K)"><!-- --></A><H3>
+headMap</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt; <B>headMap</B>(<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>&nbsp;toKey)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#headMap(K)" title="class or interface in java.util">java.util.SortedMap</A></CODE></B></DD>
+<DD>Returns a view of the portion of this map whose keys are
+ strictly less than <tt>toKey</tt>. The returned map is backed
+ by this map, so changes in the returned map are reflected in
+ this map, and vice-versa. The returned map supports all
+ optional map operations that this map supports.
+
+ <p>The returned map will throw an <tt>IllegalArgumentException</tt>
+ on an attempt to insert a key outside its range.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#headMap(K)" title="class or interface in java.util">headMap</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>toKey</CODE> - high endpoint (exclusive) of the keys in the returned map
+<DT><B>Returns:</B><DD>a view of the portion of this map whose keys are strictly
+ less than <tt>toKey</tt></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="lastKey()"><!-- --></A><H3>
+lastKey</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A> <B>lastKey</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#lastKey()" title="class or interface in java.util">java.util.SortedMap</A></CODE></B></DD>
+<DD>Returns the last (highest) key currently in this map.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#lastKey()" title="class or interface in java.util">lastKey</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the last (highest) key currently in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="subMap(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="subMap(K, K)"><!-- --></A><H3>
+subMap</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt; <B>subMap</B>(<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>&nbsp;fromKey,
+ <A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>&nbsp;toKey)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#subMap(K, K)" title="class or interface in java.util">java.util.SortedMap</A></CODE></B></DD>
+<DD>Returns a view of the portion of this map whose keys range from
+ <tt>fromKey</tt>, inclusive, to <tt>toKey</tt>, exclusive. (If
+ <tt>fromKey</tt> and <tt>toKey</tt> are equal, the returned map
+ is empty.) The returned map is backed by this map, so changes
+ in the returned map are reflected in this map, and vice-versa.
+ The returned map supports all optional map operations that this
+ map supports.
+
+ <p>The returned map will throw an <tt>IllegalArgumentException</tt>
+ on an attempt to insert a key outside its range.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#subMap(K, K)" title="class or interface in java.util">subMap</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fromKey</CODE> - low endpoint (inclusive) of the keys in the returned map<DD><CODE>toKey</CODE> - high endpoint (exclusive) of the keys in the returned map
+<DT><B>Returns:</B><DD>a view of the portion of this map whose keys range from
+ <tt>fromKey</tt>, inclusive, to <tt>toKey</tt>, exclusive</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="tailMap(java.lang.Object)"><!-- --></A><A NAME="tailMap(K)"><!-- --></A><H3>
+tailMap</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt; <B>tailMap</B>(<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>&nbsp;fromKey)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#tailMap(K)" title="class or interface in java.util">java.util.SortedMap</A></CODE></B></DD>
+<DD>Returns a view of the portion of this map whose keys are
+ greater than or equal to <tt>fromKey</tt>. The returned map is
+ backed by this map, so changes in the returned map are
+ reflected in this map, and vice-versa. The returned map
+ supports all optional map operations that this map supports.
+
+ <p>The returned map will throw an <tt>IllegalArgumentException</tt>
+ on an attempt to insert a key outside its range.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#tailMap(K)" title="class or interface in java.util">tailMap</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fromKey</CODE> - low endpoint (inclusive) of the keys in the returned map
+<DT><B>Returns:</B><DD>a view of the portion of this map whose keys are greater
+ than or equal to <tt>fromKey</tt></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingSortedMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingSortedMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingSortedMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingSortedSet.html b/javadoc/com/google/common/collect/ForwardingSortedSet.html
new file mode 100644
index 0000000..b30a06b
--- /dev/null
+++ b/javadoc/com/google/common/collect/ForwardingSortedSet.html
@@ -0,0 +1,506 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:15 PST 2009 -->
+<TITLE>
+ForwardingSortedSet (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ForwardingSortedSet (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingSortedSet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingSortedSet.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingSortedSet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ForwardingSortedSet&lt;E&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingCollection</A>&lt;E&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingSet</A>&lt;E&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingSortedSet&lt;E&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;E&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>ForwardingSortedSet&lt;E&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet</A>&lt;E&gt;<DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;E&gt;</DL>
+</PRE>
+
+<P>
+A sorted set which forwards all its method calls to another sorted set.
+ Subclasses should override one or more methods to modify the behavior of the
+ backing sorted set as desired per the <a
+ href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Mike Bostock</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A></DL>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html#ForwardingSortedSet()">ForwardingSortedSet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html#comparator()">comparator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the comparator used to order the elements in this set,
+ or <tt>null</tt> if this set uses the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">natural ordering</A> of its elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected abstract &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html#delegate()">delegate</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html#first()">first</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the first (lowest) element currently in this set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html#headSet(E)">headSet</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&nbsp;toElement)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this set whose elements are
+ strictly less than <tt>toElement</tt>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html#last()">last</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the last (highest) element currently in this set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html#subSet(E, E)">subSet</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&nbsp;fromElement,
+ <A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&nbsp;toElement)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this set whose elements range
+ from <tt>fromElement</tt>, inclusive, to <tt>toElement</tt>,
+ exclusive.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html#tailSet(E)">tailSet</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&nbsp;fromElement)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this set whose elements are
+ greater than or equal to <tt>fromElement</tt>.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingSet"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingSet.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/google/common/collect/ForwardingSet.html#hashCode()">hashCode</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingCollection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#add(E)">add</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#contains(java.lang.Object)">contains</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#iterator()">iterator</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#toArray()">toArray</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#toArray(T[])">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Set"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#add(E)" title="class or interface in java.util">add</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ForwardingSortedSet()"><!-- --></A><H3>
+ForwardingSortedSet</H3>
+<PRE>
+public <B>ForwardingSortedSet</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="delegate()"><!-- --></A><H3>
+delegate</H3>
+<PRE>
+protected abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt; <B>delegate</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
+<DD>Returns the backing delegate instance that methods are forwarded to.
+ Abstract subclasses generally override this method with an abstract method
+ that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
+ the instance being decorated.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="comparator()"><!-- --></A><H3>
+comparator</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt; <B>comparator</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#comparator()" title="class or interface in java.util">java.util.SortedSet</A></CODE></B></DD>
+<DD>Returns the comparator used to order the elements in this set,
+ or <tt>null</tt> if this set uses the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">natural ordering</A> of its elements.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#comparator()" title="class or interface in java.util">comparator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the comparator used to order the elements in this set,
+ or <tt>null</tt> if this set uses the natural ordering
+ of its elements</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="first()"><!-- --></A><H3>
+first</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A> <B>first</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#first()" title="class or interface in java.util">java.util.SortedSet</A></CODE></B></DD>
+<DD>Returns the first (lowest) element currently in this set.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#first()" title="class or interface in java.util">first</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the first (lowest) element currently in this set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="headSet(java.lang.Object)"><!-- --></A><A NAME="headSet(E)"><!-- --></A><H3>
+headSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt; <B>headSet</B>(<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&nbsp;toElement)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#headSet(E)" title="class or interface in java.util">java.util.SortedSet</A></CODE></B></DD>
+<DD>Returns a view of the portion of this set whose elements are
+ strictly less than <tt>toElement</tt>. The returned set is
+ backed by this set, so changes in the returned set are
+ reflected in this set, and vice-versa. The returned set
+ supports all optional set operations that this set supports.
+
+ <p>The returned set will throw an <tt>IllegalArgumentException</tt>
+ on an attempt to insert an element outside its range.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#headSet(E)" title="class or interface in java.util">headSet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>toElement</CODE> - high endpoint (exclusive) of the returned set
+<DT><B>Returns:</B><DD>a view of the portion of this set whose elements are strictly
+ less than <tt>toElement</tt></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="last()"><!-- --></A><H3>
+last</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A> <B>last</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#last()" title="class or interface in java.util">java.util.SortedSet</A></CODE></B></DD>
+<DD>Returns the last (highest) element currently in this set.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#last()" title="class or interface in java.util">last</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the last (highest) element currently in this set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="subSet(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="subSet(E, E)"><!-- --></A><H3>
+subSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt; <B>subSet</B>(<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&nbsp;fromElement,
+ <A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&nbsp;toElement)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#subSet(E, E)" title="class or interface in java.util">java.util.SortedSet</A></CODE></B></DD>
+<DD>Returns a view of the portion of this set whose elements range
+ from <tt>fromElement</tt>, inclusive, to <tt>toElement</tt>,
+ exclusive. (If <tt>fromElement</tt> and <tt>toElement</tt> are
+ equal, the returned set is empty.) The returned set is backed
+ by this set, so changes in the returned set are reflected in
+ this set, and vice-versa. The returned set supports all
+ optional set operations that this set supports.
+
+ <p>The returned set will throw an <tt>IllegalArgumentException</tt>
+ on an attempt to insert an element outside its range.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#subSet(E, E)" title="class or interface in java.util">subSet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fromElement</CODE> - low endpoint (inclusive) of the returned set<DD><CODE>toElement</CODE> - high endpoint (exclusive) of the returned set
+<DT><B>Returns:</B><DD>a view of the portion of this set whose elements range from
+ <tt>fromElement</tt>, inclusive, to <tt>toElement</tt>, exclusive</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="tailSet(java.lang.Object)"><!-- --></A><A NAME="tailSet(E)"><!-- --></A><H3>
+tailSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt; <B>tailSet</B>(<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&nbsp;fromElement)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#tailSet(E)" title="class or interface in java.util">java.util.SortedSet</A></CODE></B></DD>
+<DD>Returns a view of the portion of this set whose elements are
+ greater than or equal to <tt>fromElement</tt>. The returned
+ set is backed by this set, so changes in the returned set are
+ reflected in this set, and vice-versa. The returned set
+ supports all optional set operations that this set supports.
+
+ <p>The returned set will throw an <tt>IllegalArgumentException</tt>
+ on an attempt to insert an element outside its range.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#tailSet(E)" title="class or interface in java.util">tailSet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fromElement</CODE> - low endpoint (inclusive) of the returned set
+<DT><B>Returns:</B><DD>a view of the portion of this set whose elements are greater
+ than or equal to <tt>fromElement</tt></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForwardingSortedSet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ForwardingSortedSet.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingSortedSet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/HashBiMap.html b/javadoc/com/google/common/collect/HashBiMap.html
new file mode 100644
index 0000000..76f2cd7
--- /dev/null
+++ b/javadoc/com/google/common/collect/HashBiMap.html
@@ -0,0 +1,736 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:15 PST 2009 -->
+<TITLE>
+HashBiMap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="HashBiMap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/HashBiMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/HashBiMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="HashBiMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class HashBiMap&lt;K,V&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingMap</A>&lt;K,V&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.HashBiMap&lt;K,V&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public final class <B>HashBiMap&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</DL>
+</PRE>
+
+<P>
+A <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> backed by two <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> instances. This implementation
+ allows null keys and values. A <code>HashBiMap</code> and its inverse are both
+ serializable.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Mike Bostock</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.HashBiMap">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">V</A>&gt;</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#clear()">clear</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all of the mappings from this map (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this map maps one or more keys to the
+ specified value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#create()">create</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new, empty <code>HashBiMap</code> with the default initial capacity
+ (16).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#create(int)">create</A></B>(int&nbsp;expectedSize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new, empty bimap with the specified expected size.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#create(java.util.Map)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new bimap containing initial values from <code>map</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#delegate()">delegate</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#entrySet()">entrySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> view of the mappings contained in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">V</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#forcePut(K, V)">forcePut</A></B>(<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An alternate form of <code>put</code> that silently removes any existing entry
+ with the value <code>value</code> before proceeding with the <A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)"><CODE>BiMap.put(K, V)</CODE></A>
+ operation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;V,K&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#inverse()">inverse</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the inverse view of this bimap, which maps each of this bimap's
+ values to its associated key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;K&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#keySet()">keySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> view of the keys contained in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">V</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates the specified value with the specified key in this map
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all of the mappings from the specified map to this map
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;V</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes the mapping for a key from this map if it is present
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#values()">values</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> view of the values contained in this map.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingMap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#get(java.lang.Object)">get</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#size()">size</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="create()"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>&lt;K,V&gt; <B>create</B>()</PRE>
+<DL>
+<DD>Returns a new, empty <code>HashBiMap</code> with the default initial capacity
+ (16).
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="create(int)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>&lt;K,V&gt; <B>create</B>(int&nbsp;expectedSize)</PRE>
+<DL>
+<DD>Constructs a new, empty bimap with the specified expected size.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>expectedSize</CODE> - the expected number of entries
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the specified expected size is
+ negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="create(java.util.Map)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>&lt;K,V&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</PRE>
+<DL>
+<DD>Constructs a new bimap containing initial values from <code>map</code>. The
+ bimap is created with an initial capacity sufficient to hold the mappings
+ in the specified map.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
+put</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">V</A> <B>put</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">K</A>&nbsp;key,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">V</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Associates the specified value with the specified key in this map
+ (optional operation). If the map previously contained a mapping for
+ the key, the old value is replaced by the specified value. (A map
+ <tt>m</tt> is said to contain a mapping for a key <tt>k</tt> if and only
+ if <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util"><CODE>m.containsKey(k)</CODE></A> would return
+ <tt>true</tt>.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)">put</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">K</A>,<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">put</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">K</A>,<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key with which the specified value is to be associated<DD><CODE>value</CODE> - value to be associated with the specified key
+<DT><B>Returns:</B><DD>the previous value associated with <tt>key</tt>, or
+ <tt>null</tt> if there was no mapping for <tt>key</tt>.
+ (A <tt>null</tt> return can also indicate that the map
+ previously associated <tt>null</tt> with <tt>key</tt>,
+ if the implementation supports <tt>null</tt> values.)</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="forcePut(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="forcePut(K, V)"><!-- --></A><H3>
+forcePut</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">V</A> <B>forcePut</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">K</A>&nbsp;key,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">V</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/BiMap.html#forcePut(K, V)">BiMap</A></CODE></B></DD>
+<DD>An alternate form of <code>put</code> that silently removes any existing entry
+ with the value <code>value</code> before proceeding with the <A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)"><CODE>BiMap.put(K, V)</CODE></A>
+ operation. If the bimap previously contained the provided key-value
+ mapping, this method has no effect.
+
+ <p>Note that a successful call to this method could cause the size of the
+ bimap to increase by one, stay the same, or even decrease by one.
+
+ <p><b>Warning</b>: If an existing entry with this value is removed, the key
+ for that entry is discarded and not returned.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#forcePut(K, V)">forcePut</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">K</A>,<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - the key with which the specified value is to be associated<DD><CODE>value</CODE> - the value to be associated with the specified key
+<DT><B>Returns:</B><DD>the value which was previously associated with the key, which may
+ be <code>null</code>, or <code>null</code> if there was no previous entry</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="delegate()"><!-- --></A><H3>
+delegate</H3>
+<PRE>
+protected <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt; <B>delegate</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
+<DD>Returns the backing delegate instance that methods are forwarded to.
+ Abstract subclasses generally override this method with an abstract method
+ that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
+ the instance being decorated.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
+containsValue</H3>
+<PRE>
+public boolean <B>containsValue</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this map maps one or more keys to the
+ specified value. More formally, returns <tt>true</tt> if and only if
+ this map contains at least one mapping to a value <tt>v</tt> such that
+ <tt>(value==null ? v==null : value.equals(v))</tt>. This operation
+ will probably require time linear in the map size for most
+ implementations of the <tt>Map</tt> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsValue(java.lang.Object)">containsValue</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>value</CODE> - value whose presence in this map is to be tested
+<DT><B>Returns:</B><DD><tt>true</tt> if this map maps one or more keys to the
+ specified value</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public V <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Removes the mapping for a key from this map if it is present
+ (optional operation). More formally, if this map contains a mapping
+ from key <tt>k</tt> to value <tt>v</tt> such that
+ <code>(key==null ? k==null : key.equals(k))</code>, that mapping
+ is removed. (The map can contain at most one such mapping.)
+
+ <p>Returns the value to which this map previously associated the key,
+ or <tt>null</tt> if the map contained no mapping for the key.
+
+ <p>If this map permits null values, then a return value of
+ <tt>null</tt> does not <i>necessarily</i> indicate that the map
+ contained no mapping for the key; it's also possible that the map
+ explicitly mapped the key to <tt>null</tt>.
+
+ <p>The map will not contain a mapping for the specified key once the
+ call returns.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#remove(java.lang.Object)">remove</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key whose mapping is to be removed from the map
+<DT><B>Returns:</B><DD>the previous value associated with <tt>key</tt>, or
+ <tt>null</tt> if there was no mapping for <tt>key</tt>.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(java.util.Map)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public void <B>putAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Copies all of the mappings from the specified map to this map
+ (optional operation). The effect of this call is equivalent to that
+ of calling <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util"><CODE>put(k, v)</CODE></A> on this map once
+ for each mapping from key <tt>k</tt> to value <tt>v</tt> in the
+ specified map. The behavior of this operation is undefined if the
+ specified map is modified while the operation is in progress.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#putAll(java.util.Map)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#putAll(java.util.Map)">putAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>map</CODE> - mappings to be stored in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clear()"><!-- --></A><H3>
+clear</H3>
+<PRE>
+public void <B>clear</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Removes all of the mappings from this map (optional operation).
+ The map will be empty after this call returns.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#clear()">clear</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="inverse()"><!-- --></A><H3>
+inverse</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;V,K&gt; <B>inverse</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/BiMap.html#inverse()">BiMap</A></CODE></B></DD>
+<DD>Returns the inverse view of this bimap, which maps each of this bimap's
+ values to its associated key. The two bimaps are backed by the same data;
+ any changes to one will appear in the other.
+
+ <p><b>Note:</b>There is no guaranteed correspondence between the iteration
+ order of a bimap and that of its inverse.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#inverse()">inverse</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the inverse view of this bimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keySet()"><!-- --></A><H3>
+keySet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;K&gt; <B>keySet</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> view of the keys contained in this map.
+ The set is backed by the map, so changes to the map are
+ reflected in the set, and vice-versa. If the map is modified
+ while an iteration over the set is in progress (except through
+ the iterator's own <tt>remove</tt> operation), the results of
+ the iteration are undefined. The set supports element removal,
+ which removes the corresponding mapping from the map, via the
+ <tt>Iterator.remove</tt>, <tt>Set.remove</tt>,
+ <tt>removeAll</tt>, <tt>retainAll</tt>, and <tt>clear</tt>
+ operations. It does not support the <tt>add</tt> or <tt>addAll</tt>
+ operations.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#keySet()">keySet</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a set view of the keys contained in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="values()"><!-- --></A><H3>
+values</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt; <B>values</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> view of the values contained in this map.
+ The collection is backed by the map, so changes to the map are
+ reflected in the collection, and vice-versa. If the map is
+ modified while an iteration over the collection is in progress
+ (except through the iterator's own <tt>remove</tt> operation),
+ the results of the iteration are undefined. The collection
+ supports element removal, which removes the corresponding
+ mapping from the map, via the <tt>Iterator.remove</tt>,
+ <tt>Collection.remove</tt>, <tt>removeAll</tt>,
+ <tt>retainAll</tt> and <tt>clear</tt> operations. It does not
+ support the <tt>add</tt> or <tt>addAll</tt> operations.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#values()">values</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#values()">values</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a collection view of the values contained in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entrySet()"><!-- --></A><H3>
+entrySet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt; <B>entrySet</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> view of the mappings contained in this map.
+ The set is backed by the map, so changes to the map are
+ reflected in the set, and vice-versa. If the map is modified
+ while an iteration over the set is in progress (except through
+ the iterator's own <tt>remove</tt> operation, or through the
+ <tt>setValue</tt> operation on a map entry returned by the
+ iterator) the results of the iteration are undefined. The set
+ supports element removal, which removes the corresponding
+ mapping from the map, via the <tt>Iterator.remove</tt>,
+ <tt>Set.remove</tt>, <tt>removeAll</tt>, <tt>retainAll</tt> and
+ <tt>clear</tt> operations. It does not support the
+ <tt>add</tt> or <tt>addAll</tt> operations.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#entrySet()">entrySet</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a set view of the mappings contained in this map</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/HashBiMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/HashBiMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="HashBiMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/HashMultimap.html b/javadoc/com/google/common/collect/HashMultimap.html
new file mode 100644
index 0000000..c4e1962
--- /dev/null
+++ b/javadoc/com/google/common/collect/HashMultimap.html
@@ -0,0 +1,953 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:15 PST 2009 -->
+<TITLE>
+HashMultimap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="HashMultimap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/HashMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/HashMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="HashMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class HashMultimap&lt;K,V&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.HashMultimap&lt;K,V&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;, <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public final class <B>HashMultimap&lt;K,V&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+Implementation of <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> using hash tables.
+
+ <p>The multimap does not store duplicate key-value pairs. Adding a new
+ key-value pair equal to an existing key-value pair has no effect.
+
+ <p>Keys and values may be null. All optional multimap methods are supported,
+ and all returned views are modifiable.
+
+ <p>This class is not threadsafe when any concurrent operations update the
+ multimap. Concurrent read operations will work correctly. To allow concurrent
+ update operations, wrap your multimap with a call to <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedSetMultimap(com.google.common.collect.SetMultimap)"><CODE>Multimaps.synchronizedSetMultimap(com.google.common.collect.SetMultimap<K, V>)</CODE></A>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Jared Levy</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.HashMultimap">Serialized Form</A></DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#asMap()">asMap</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map view that associates each key with the corresponding values
+ in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#clear()">clear</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all key-value pairs from the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified key-value pair.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#containsKey(java.lang.Object)">containsKey</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains any values for the specified
+ key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified value for any
+ key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#create()">create</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>HashMultimap</code> with the default initial
+ capacities.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#create(int, int)">create</A></B>(int&nbsp;expectedKeys,
+ int&nbsp;expectedValuesPerKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an empty <code>HashMultimap</code> with enough capacity to hold the
+ specified numbers of keys and values without rehashing.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a <code>HashMultimap</code> with the same mappings as the specified
+ multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#entries()">entries</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all key-value pairs.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object to this multimap for equality.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#get(K)">get</A></B>(K&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection view of all values associated with a key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the hash code for this multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#isEmpty()">isEmpty</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains no key-value pairs.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;K&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#keys()">keys</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection, which may contain duplicates, of all keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;K&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#keySet()">keySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of all keys, each appearing once in the returned set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#put(K, V)">put</A></B>(K&nbsp;key,
+ V&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a key-value pair in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#putAll(K, java.lang.Iterable)">putAll</A></B>(K&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all of another multimap's key-value pairs into this multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a key-value pair from the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all values associated with a given key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(K&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key, replacing any existing
+ values for that key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#size()">size</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of key-value pairs in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string representation of the multimap, generated by calling
+ <code>toString</code> on the map returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#values()">values</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all values in the multimap.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.SetMultimap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#asMap()">asMap</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.Multimap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="create()"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>&lt;K,V&gt; <B>create</B>()</PRE>
+<DL>
+<DD>Creates a new, empty <code>HashMultimap</code> with the default initial
+ capacities.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="create(int, int)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>&lt;K,V&gt; <B>create</B>(int&nbsp;expectedKeys,
+ int&nbsp;expectedValuesPerKey)</PRE>
+<DL>
+<DD>Constructs an empty <code>HashMultimap</code> with enough capacity to hold the
+ specified numbers of keys and values without rehashing.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>expectedKeys</CODE> - the expected number of distinct keys<DD><CODE>expectedValuesPerKey</CODE> - the expected average number of values per key
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>expectedKeys</code> or <code>expectedValuesPerKey</code> is negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="create(com.google.common.collect.Multimap)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>&lt;K,V&gt; <B>create</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</PRE>
+<DL>
+<DD>Constructs a <code>HashMultimap</code> with the same mappings as the specified
+ multimap. If a key-value mapping appears multiple times in the input
+ multimap, it only appears once in the constructed multimap.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - the multimap whose contents are copied to this multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(java.lang.Object)"><!-- --></A><A NAME="get(K)"><!-- --></A><H3>
+get</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt; <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ K&nbsp;key)</PRE>
+<DL>
+<DD>Returns a collection view of all values associated with a key. If no
+ mappings in the multimap have the provided key, an empty collection is
+ returned.
+
+ <p>Changes to the returned collection will update the underlying multimap,
+ and vice versa.
+
+ <p>The returned collection is not serializable.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap
+<DT><B>Returns:</B><DD>the collection of values that the key maps to</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entries()"><!-- --></A><H3>
+entries</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt; <B>entries</B>()</PRE>
+<DL>
+<DD>Returns a collection of all key-value pairs. Changes to the returned
+ collection will update the underlying multimap, and vice versa. The entries
+ collection does not support the <code>add</code> or <code>addAll</code> operations.
+
+ <p>The iterator generated by the returned collection traverses the values
+ for one key, followed by the values of a second key, and so on.
+
+ <p>Each entry is an immutable snapshot of a key-value mapping in the
+ multimap, taken at the time the entry is returned by a method call to the
+ collection or its iterator.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#entries()">entries</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#entries()">entries</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>collection of map entries consisting of key-value pairs</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
+removeAll</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt; <B>removeAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD>Removes all values associated with a given key.
+
+ <p>The returned collection is immutable.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entries to remove from the multimap
+<DT><B>Returns:</B><DD>the collection of removed values, or an empty collection if no
+ values were associated with the provided key. The collection
+ <i>may</i> be modifiable, but updating it will have no effect on the
+ multimap.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="replaceValues(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="replaceValues(K, java.lang.Iterable)"><!-- --></A><H3>
+replaceValues</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt; <B>replaceValues</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ K&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</PRE>
+<DL>
+<DD>Stores a collection of values with the same key, replacing any existing
+ values for that key.
+
+ <p>The returned collection is immutable.
+
+ <p>Any duplicates in <code>values</code> will be stored in the multimap once.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
+<DT><B>Returns:</B><DD>the collection of replaced values, or an empty collection if no
+ values were previously associated with the key. The collection
+ <i>may</i> be modifiable, but updating it will have no effect on the
+ multimap.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
+put</H3>
+<PRE>
+public boolean <B>put</B>(K&nbsp;key,
+ V&nbsp;value)</PRE>
+<DL>
+<DD>Stores a key-value pair in the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>value</CODE> - value to store in the multimap
+<DT><B>Returns:</B><DD><code>true</code> if the method increased the size of the multimap, or
+ <code>false</code> if the multimap already contained the key-value pair</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD>Compares the specified object to this multimap for equality.
+
+ <p>Two <code>SetMultimap</code> instances are equal if, for each key, they
+ contain the same values. Equality does not depend on the ordering of keys
+ or values.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="size()"><!-- --></A><H3>
+size</H3>
+<PRE>
+public int <B>size</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">Multimap</A></CODE></B></DD>
+<DD>Returns the number of key-value pairs in the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isEmpty()"><!-- --></A><H3>
+isEmpty</H3>
+<PRE>
+public boolean <B>isEmpty</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains no key-value pairs.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsKey(java.lang.Object)"><!-- --></A><H3>
+containsKey</H3>
+<PRE>
+public boolean <B>containsKey</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains any values for the specified
+ key.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
+containsValue</H3>
+<PRE>
+public boolean <B>containsValue</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains the specified value for any
+ key.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>value</CODE> - value to search for in multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsEntry(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
+containsEntry</H3>
+<PRE>
+public boolean <B>containsEntry</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains the specified key-value pair.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap<DD><CODE>value</CODE> - value to search for in multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public boolean <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Removes a key-value pair from the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entry to remove from the multimap<DD><CODE>value</CODE> - value of entry to remove the multimap
+<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="putAll(K, java.lang.Iterable)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public boolean <B>putAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ K&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">Multimap</A></CODE></B></DD>
+<DD>Stores a collection of values with the same key.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
+<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(com.google.common.collect.Multimap)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public boolean <B>putAll</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">Multimap</A></CODE></B></DD>
+<DD>Copies all of another multimap's key-value pairs into this multimap. The
+ order in which the mappings are added is determined by
+ <code>multimap.entries()</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - mappings to store in this multimap
+<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clear()"><!-- --></A><H3>
+clear</H3>
+<PRE>
+public void <B>clear</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">Multimap</A></CODE></B></DD>
+<DD>Removes all key-value pairs from the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keySet()"><!-- --></A><H3>
+keySet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;K&gt; <B>keySet</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">Multimap</A></CODE></B></DD>
+<DD>Returns the set of all keys, each appearing once in the returned set.
+ Changes to the returned set will update the underlying multimap, and vice
+ versa.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the collection of distinct keys</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keys()"><!-- --></A><H3>
+keys</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;K&gt; <B>keys</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">Multimap</A></CODE></B></DD>
+<DD>Returns a collection, which may contain duplicates, of all keys. The number
+ of times of key appears in the returned multiset equals the number of
+ mappings the key has in the multimap. Changes to the returned multiset will
+ update the underlying multimap, and vice versa.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a multiset with keys corresponding to the distinct keys of the
+ multimap and frequencies corresponding to the number of values that
+ each key maps to</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="values()"><!-- --></A><H3>
+values</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt; <B>values</B>()</PRE>
+<DL>
+<DD>Returns a collection of all values in the multimap. Changes to the returned
+ collection will update the underlying multimap, and vice versa.
+
+ <p>The iterator generated by the returned collection traverses the values
+ for one key, followed by the values of a second key, and so on.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>collection of values, which may include the same value multiple
+ times if it occurs in multiple mappings</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="asMap()"><!-- --></A><H3>
+asMap</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt; <B>asMap</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">Multimap</A></CODE></B></DD>
+<DD>Returns a map view that associates each key with the corresponding values
+ in the multimap. Changes to the returned map, such as element removal,
+ will update the underlying multimap. The map does not support
+ <code>setValue()</code> on its entries, <code>put</code>, or <code>putAll</code>.
+
+ <p>The collections returned by <code>asMap().get(Object)</code> have the same
+ behavior as those returned by <A HREF="../../../../com/google/common/collect/Multimap.html#get(K)"><CODE>Multimap.get(K)</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a map view from a key to its collection of values</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+public int <B>hashCode</B>()</PRE>
+<DL>
+<DD>Returns the hash code for this multimap.
+
+ <p>The hash code of a multimap is defined as the hash code of the map view,
+ as returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util"><CODE>Map.hashCode()</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Returns a string representation of the multimap, generated by calling
+ <code>toString</code> on the map returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a string representation of the multimap</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/HashMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/HashMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="HashMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/HashMultiset.html b/javadoc/com/google/common/collect/HashMultiset.html
new file mode 100644
index 0000000..08c88f5
--- /dev/null
+++ b/javadoc/com/google/common/collect/HashMultiset.html
@@ -0,0 +1,1154 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:15 PST 2009 -->
+<TITLE>
+HashMultiset (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="HashMultiset (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/HashMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/HashMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="HashMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class HashMultiset&lt;E&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">java.util.AbstractCollection</A>&lt;E&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.HashMultiset&lt;E&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public final class <B>HashMultiset&lt;E&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</DL>
+</PRE>
+
+<P>
+Multiset implementation backed by a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion, Jared Levy</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.HashMultiset">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="nested_classes_inherited_from_class_com.google.common.collect.Multiset"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="type parameter in Multiset.Entry">E</A>&gt;</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#add(E)">add</A></B>(E&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures that this collection contains the specified element (optional
+ operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#add(E, int)">add</A></B>(E&nbsp;element,
+ int&nbsp;occurrences)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a number of occurrences of an element to this multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#addAll(java.util.Collection)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends E&gt;&nbsp;elementsToAdd)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds all of the elements in the specified collection to this collection
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#clear()">clear</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all of the elements from this collection (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#contains(java.lang.Object)">contains</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this collection contains the specified element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#containsAll(java.util.Collection)">containsAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this collection contains all of the elements
+ in the specified collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#count(java.lang.Object)">count</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of occurrences of an element in this multiset (the
+ <i>count</i> of the element).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#create()">create</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>HashMultiset</code> using the default initial
+ capacity.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#create(int)">create</A></B>(int&nbsp;distinctElements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>HashMultiset</code> with the specified expected
+ number of distinct elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#create(java.lang.Iterable)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>HashMultiset</code> containing the specified elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#elementSet()">elementSet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of distinct elements contained in this multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;E&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#entrySet()">entrySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
+ the count of that element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indicates whether some other object is "equal to" this one.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code value for the object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#isEmpty()">isEmpty</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this collection contains no elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#iterator()">iterator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator over the elements contained in this collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a single instance of the specified element from this
+ collection, if it is present (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#remove(java.lang.Object, int)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
+ int&nbsp;occurrences)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a number of occurrences of the specified element from this
+ multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#removeAll(java.util.Collection)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all of this collection's elements that are also contained in the
+ specified collection (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#retainAll(java.util.Collection)">retainAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retains only the elements in this collection that are contained in the
+ specified collection (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#setCount(E, int)">setCount</A></B>(E&nbsp;element,
+ int&nbsp;count)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds or removes the necessary occurrences of an element such that the
+ element attains the desired count.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#setCount(E, int, int)">setCount</A></B>(E&nbsp;element,
+ int&nbsp;oldCount,
+ int&nbsp;newCount)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Conditionally sets the count of an element to a new value, as described in
+ <A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)"><CODE>Multiset.setCount(Object, int)</CODE></A>, provided that the element has the expected
+ current count.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#size()">size</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of elements in this collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string representation of this collection.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.AbstractCollection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Collection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="create()"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>&lt;E&gt; <B>create</B>()</PRE>
+<DL>
+<DD>Creates a new, empty <code>HashMultiset</code> using the default initial
+ capacity.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="create(int)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>&lt;E&gt; <B>create</B>(int&nbsp;distinctElements)</PRE>
+<DL>
+<DD>Creates a new, empty <code>HashMultiset</code> with the specified expected
+ number of distinct elements.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>distinctElements</CODE> - the expected number of distinct elements
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>distinctElements</code> is negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="create(java.lang.Iterable)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>&lt;E&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Creates a new <code>HashMultiset</code> containing the specified elements.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements that the multiset should contain</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entrySet()"><!-- --></A><H3>
+entrySet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;E&gt;&gt; <B>entrySet</B>()</PRE>
+<DL>
+<DD>Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
+ the count of that element. This set contains exactly one entry for each
+ distinct element in the multiset (thus it always has the same size as the
+ <A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()"><CODE>Multiset.elementSet()</CODE></A>). The order of the elements in the element set is
+ unspecified.
+
+ <p>The entry set is backed by the same data as the multiset, so any change
+ to either is immediately reflected in the other. However, multiset changes
+ may or may not be reflected in any <code>Entry</code> instances already
+ retrieved from the entry set (this is implementation-dependent).
+ Furthermore, implementations are not required to support modifications to
+ the entry set at all, and the <code>Entry</code> instances themselves don't
+ even have methods for modification. See the specific implementation class
+ for more details on how its entry set handles modifications.
+
+ <p>Invoking <A HREF="../../../../com/google/common/collect/Multiset.Entry.html#getCount()"><CODE>Multiset.Entry.getCount()</CODE></A> on an entry in the returned
+ set always returns the current count of that element in the multiset, as
+ opposed to the count at the time the entry was retrieved.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()">entrySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a set of entries representing the data of this multiset</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="size()"><!-- --></A><H3>
+size</H3>
+<PRE>
+public int <B>size</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">java.util.Collection</A></CODE></B></DD>
+<DD>Returns the number of elements in this collection. If this collection
+ contains more than <tt>Integer.MAX_VALUE</tt> elements, returns
+ <tt>Integer.MAX_VALUE</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the number of elements in this collection</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="iterator()"><!-- --></A><H3>
+iterator</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt; <B>iterator</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#iterator()" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Returns an iterator over the elements contained in this collection.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#iterator()">iterator</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true#iterator()" title="class or interface in java.lang">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>an iterator over the elements contained in this collection</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="count(java.lang.Object)"><!-- --></A><H3>
+count</H3>
+<PRE>
+public int <B>count</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">Multiset</A></CODE></B></DD>
+<DD>Returns the number of occurrences of an element in this multiset (the
+ <i>count</i> of the element). Note that for an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>-based
+ multiset, this gives the same result as <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#frequency(java.util.Collection, java.lang.Object)" title="class or interface in java.util"><CODE>Collections.frequency(java.util.Collection<?>, java.lang.Object)</CODE></A>
+ (which would presumably perform more poorly).
+
+ <p><b>Note:</b> the utility method <A HREF="../../../../com/google/common/collect/Iterables.html#frequency(java.lang.Iterable, java.lang.Object)"><CODE>Iterables.frequency(java.lang.Iterable<?>, java.lang.Object)</CODE></A> generalizes
+ this operation; it correctly delegates to this method when dealing with a
+ multiset, but it can also accept any other iterable type.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">count</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to count occurrences of
+<DT><B>Returns:</B><DD>the number of occurrences of the element in this multiset; possibly
+ zero but never negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="add(java.lang.Object,int)"><!-- --></A><A NAME="add(E, int)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public int <B>add</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ E&nbsp;element,
+ int&nbsp;occurrences)</PRE>
+<DL>
+<DD>Adds a number of occurrences of an element to this multiset. Note that if
+ <code>occurrences == 1</code>, this method has the identical effect to <A HREF="../../../../com/google/common/collect/Multiset.html#add(E)"><CODE>Multiset.add(Object)</CODE></A>. This method is functionally equivalent (except in the case
+ of overflow) to the call <code>addAll(Collections.nCopies(element,
+ occurrences))</code>, which would presumably perform much more poorly.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E, int)">add</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add occurrences of; may be <code>null</code> only
+ if explicitly allowed by the implementation<DD><CODE>occurrences</CODE> - the number of occurrences of the element to add. May be
+ zero, in which case no change will be made.
+<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the call would result in more than
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Integer.MAX_VALUE</CODE></A> occurrences of <code>element</code> in this
+ multiset.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object, int)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public int <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
+ int&nbsp;occurrences)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object, int)">Multiset</A></CODE></B></DD>
+<DD>Removes a number of occurrences of the specified element from this
+ multiset. If the multiset contains fewer than this number of occurrences to
+ begin with, all occurrences will be removed. Note that if
+ <code>occurrences == 1</code>, this is functionally equivalent to the call
+ <code>remove(element)</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object, int)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally remove occurrences of<DD><CODE>occurrences</CODE> - the number of occurrences of the element to remove. May
+ be zero, in which case no change will be made.
+<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setCount(java.lang.Object,int)"><!-- --></A><A NAME="setCount(E, int)"><!-- --></A><H3>
+setCount</H3>
+<PRE>
+public int <B>setCount</B>(E&nbsp;element,
+ int&nbsp;count)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)">Multiset</A></CODE></B></DD>
+<DD>Adds or removes the necessary occurrences of an element such that the
+ element attains the desired count.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add or remove occurrences of; may be null
+ only if explicitly allowed by the implementation<DD><CODE>count</CODE> - the desired count of the element in this multiset
+<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isEmpty()"><!-- --></A><H3>
+isEmpty</H3>
+<PRE>
+public boolean <B>isEmpty</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#isEmpty()" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this collection contains no elements.
+
+ <p>This implementation returns <tt>size() == 0</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection contains no elements</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="contains(java.lang.Object)"><!-- --></A><H3>
+contains</H3>
+<PRE>
+public boolean <B>contains</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this collection contains the specified element.
+ More formally, returns <tt>true</tt> if and only if this collection
+ contains at least one element <tt>e</tt> such that
+ <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>.
+
+ <p>This implementation iterates over the elements in the collection,
+ checking each element in turn for equality with the specified element.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#contains(java.lang.Object)">contains</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - element whose presence in this collection is to be tested
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection contains the specified
+ element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="add(java.lang.Object)"><!-- --></A><A NAME="add(E)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public boolean <B>add</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ E&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#add(E)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Ensures that this collection contains the specified element (optional
+ operation). Returns <tt>true</tt> if this collection changed as a
+ result of the call. (Returns <tt>false</tt> if this collection does
+ not permit duplicates and already contains the specified element.)<p>
+
+ Collections that support this operation may place limitations on what
+ elements may be added to this collection. In particular, some
+ collections will refuse to add <tt>null</tt> elements, and others will
+ impose restrictions on the type of elements that may be added.
+ Collection classes should clearly specify in their documentation any
+ restrictions on what elements may be added.<p>
+
+ If a collection refuses to add a particular element for any reason
+ other than that it already contains the element, it <i>must</i> throw
+ an exception (rather than returning <tt>false</tt>). This preserves
+ the invariant that a collection always contains the specified element
+ after this call returns.
+
+ <p>This implementation always throws an
+ <tt>UnsupportedOperationException</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E)">add</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - element whose presence in this collection is to be ensured
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the
+ call</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public boolean <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Removes a single instance of the specified element from this
+ collection, if it is present (optional operation). More formally,
+ removes an element <tt>e</tt> such that
+ <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>, if
+ this collection contains one or more such elements. Returns
+ <tt>true</tt> if this collection contained the specified element (or
+ equivalently, if this collection changed as a result of the call).
+
+ <p>This implementation iterates over the collection looking for the
+ specified element. If it finds the element, it removes the element
+ from the collection using the iterator's remove method.
+
+ <p>Note that this implementation throws an
+ <tt>UnsupportedOperationException</tt> if the iterator returned by this
+ collection's iterator method does not implement the <tt>remove</tt>
+ method and this collection contains the specified object.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - element to be removed from this collection, if present
+<DT><B>Returns:</B><DD><tt>true</tt> if an element was removed as a result of this call</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setCount(java.lang.Object,int,int)"><!-- --></A><A NAME="setCount(E, int, int)"><!-- --></A><H3>
+setCount</H3>
+<PRE>
+public boolean <B>setCount</B>(E&nbsp;element,
+ int&nbsp;oldCount,
+ int&nbsp;newCount)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int, int)">Multiset</A></CODE></B></DD>
+<DD>Conditionally sets the count of an element to a new value, as described in
+ <A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)"><CODE>Multiset.setCount(Object, int)</CODE></A>, provided that the element has the expected
+ current count. If the current count is not <code>oldCount</code>, no change is
+ made.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally set the count of; may be null
+ only if explicitly allowed by the implementation<DD><CODE>oldCount</CODE> - the expected present count of the element in this multiset<DD><CODE>newCount</CODE> - the desired count of the element in this multiset
+<DT><B>Returns:</B><DD><code>true</code> if the condition for modification was met. This
+ implies that the multiset was indeed modified, unless
+ <code>oldCount == newCount</code>.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsAll(java.util.Collection)"><!-- --></A><H3>
+containsAll</H3>
+<PRE>
+public boolean <B>containsAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elements)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this collection contains all of the elements
+ in the specified collection.
+
+ <p>This implementation iterates over the specified collection,
+ checking each element returned by the iterator in turn to see
+ if it's contained in this collection. If all elements are so
+ contained <tt>true</tt> is returned, otherwise <tt>false</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#containsAll(java.util.Collection)">containsAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - collection to be checked for containment in this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection contains all of the elements
+ in the specified collection<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>AbstractCollection.contains(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addAll(java.util.Collection)"><!-- --></A><H3>
+addAll</H3>
+<PRE>
+public boolean <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends E&gt;&nbsp;elementsToAdd)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Adds all of the elements in the specified collection to this collection
+ (optional operation). The behavior of this operation is undefined if
+ the specified collection is modified while the operation is in progress.
+ (This implies that the behavior of this call is undefined if the
+ specified collection is this collection, and this collection is
+ nonempty.)
+
+ <p>This implementation iterates over the specified collection, and adds
+ each object returned by the iterator to this collection, in turn.
+
+ <p>Note that this implementation will throw an
+ <tt>UnsupportedOperationException</tt> unless <tt>add</tt> is
+ overridden (assuming the specified collection is non-empty).
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elementsToAdd</CODE> - collection containing elements to be added to this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the call<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#add(E)" title="class or interface in java.util"><CODE>AbstractCollection.add(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="removeAll(java.util.Collection)"><!-- --></A><H3>
+removeAll</H3>
+<PRE>
+public boolean <B>removeAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Removes all of this collection's elements that are also contained in the
+ specified collection (optional operation). After this call returns,
+ this collection will contain no elements in common with the specified
+ collection.
+
+ <p>This implementation iterates over this collection, checking each
+ element returned by the iterator in turn to see if it's contained
+ in the specified collection. If it's so contained, it's removed from
+ this collection with the iterator's <tt>remove</tt> method.
+
+ <p>Note that this implementation will throw an
+ <tt>UnsupportedOperationException</tt> if the iterator returned by the
+ <tt>iterator</tt> method does not implement the <tt>remove</tt> method
+ and this collection contains one or more elements in common with the
+ specified collection.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#removeAll(java.util.Collection)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elementsToRemove</CODE> - collection containing elements to be removed from this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the
+ call<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util"><CODE>AbstractCollection.remove(Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>AbstractCollection.contains(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="retainAll(java.util.Collection)"><!-- --></A><H3>
+retainAll</H3>
+<PRE>
+public boolean <B>retainAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Retains only the elements in this collection that are contained in the
+ specified collection (optional operation). In other words, removes from
+ this collection all of its elements that are not contained in the
+ specified collection.
+
+ <p>This implementation iterates over this collection, checking each
+ element returned by the iterator in turn to see if it's contained
+ in the specified collection. If it's not so contained, it's removed
+ from this collection with the iterator's <tt>remove</tt> method.
+
+ <p>Note that this implementation will throw an
+ <tt>UnsupportedOperationException</tt> if the iterator returned by the
+ <tt>iterator</tt> method does not implement the <tt>remove</tt> method
+ and this collection contains one or more elements not present in the
+ specified collection.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#retainAll(java.util.Collection)">retainAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elementsToRetain</CODE> - collection containing elements to be retained in this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the call<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util"><CODE>AbstractCollection.remove(Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>AbstractCollection.contains(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clear()"><!-- --></A><H3>
+clear</H3>
+<PRE>
+public void <B>clear</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#clear()" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Removes all of the elements from this collection (optional operation).
+ The collection will be empty after this method returns.
+
+ <p>This implementation iterates over this collection, removing each
+ element using the <tt>Iterator.remove</tt> operation. Most
+ implementations will probably choose to override this method for
+ efficiency.
+
+ <p>Note that this implementation will throw an
+ <tt>UnsupportedOperationException</tt> if the iterator returned by this
+ collection's <tt>iterator</tt> method does not implement the
+ <tt>remove</tt> method and this collection is non-empty.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="elementSet()"><!-- --></A><H3>
+elementSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt; <B>elementSet</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">Multiset</A></CODE></B></DD>
+<DD>Returns the set of distinct elements contained in this multiset. The
+ element set is backed by the same data as the multiset, so any change to
+ either is immediately reflected in the other. The order of the elements in
+ the element set is unspecified.
+
+ <p>If the element set supports any removal operations, these necessarily
+ cause <b>all</b> occurrences of the removed element(s) to be removed from
+ the multiset. Implementations are not expected to support the add
+ operations, although this is possible.
+
+ <p>A common use for the element set is to find the number of distinct
+ elements in the multiset: <code>elementSet().size()</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">elementSet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a view of the set of distinct elements in this multiset</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD>Indicates whether some other object is "equal to" this one.
+ <p>
+ The <code>equals</code> method implements an equivalence relation
+ on non-null object references:
+ <ul>
+ <li>It is <i>reflexive</i>: for any non-null reference value
+ <code>x</code>, <code>x.equals(x)</code> should return
+ <code>true</code>.
+ <li>It is <i>symmetric</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, <code>x.equals(y)</code>
+ should return <code>true</code> if and only if
+ <code>y.equals(x)</code> returns <code>true</code>.
+ <li>It is <i>transitive</i>: for any non-null reference values
+ <code>x</code>, <code>y</code>, and <code>z</code>, if
+ <code>x.equals(y)</code> returns <code>true</code> and
+ <code>y.equals(z)</code> returns <code>true</code>, then
+ <code>x.equals(z)</code> should return <code>true</code>.
+ <li>It is <i>consistent</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, multiple invocations of
+ <tt>x.equals(y)</tt> consistently return <code>true</code>
+ or consistently return <code>false</code>, provided no
+ information used in <code>equals</code> comparisons on the
+ objects is modified.
+ <li>For any non-null reference value <code>x</code>,
+ <code>x.equals(null)</code> should return <code>false</code>.
+ </ul>
+ <p>
+ The <tt>equals</tt> method for class <code>Object</code> implements
+ the most discriminating possible equivalence relation on objects;
+ that is, for any non-null reference values <code>x</code> and
+ <code>y</code>, this method returns <code>true</code> if and only
+ if <code>x</code> and <code>y</code> refer to the same object
+ (<code>x == y</code> has the value <code>true</code>).
+ <p>
+ Note that it is generally necessary to override the <tt>hashCode</tt>
+ method whenever this method is overridden, so as to maintain the
+ general contract for the <tt>hashCode</tt> method, which states
+ that equal objects must have equal hash codes.
+
+ <p>This implementation returns <code>true</code> if <code>other</code> is a multiset
+ of the same size and if, for each element, the two multisets have the same
+ count.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+public int <B>hashCode</B>()</PRE>
+<DL>
+<DD>Returns a hash code value for the object. This method is
+ supported for the benefit of hashtables such as those provided by
+ <code>java.util.Hashtable</code>.
+ <p>
+ The general contract of <code>hashCode</code> is:
+ <ul>
+ <li>Whenever it is invoked on the same object more than once during
+ an execution of a Java application, the <tt>hashCode</tt> method
+ must consistently return the same integer, provided no information
+ used in <tt>equals</tt> comparisons on the object is modified.
+ This integer need not remain consistent from one execution of an
+ application to another execution of the same application.
+ <li>If two objects are equal according to the <tt>equals(Object)</tt>
+ method, then calling the <code>hashCode</code> method on each of
+ the two objects must produce the same integer result.
+ <li>It is <em>not</em> required that if two objects are unequal
+ according to the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>
+ method, then calling the <tt>hashCode</tt> method on each of the
+ two objects must produce distinct integer results. However, the
+ programmer should be aware that producing distinct integer results
+ for unequal objects may improve the performance of hashtables.
+ </ul>
+ <p>
+ As much as is reasonably practical, the hashCode method defined by
+ class <tt>Object</tt> does return distinct integers for distinct
+ objects. (This is typically implemented by converting the internal
+ address of the object into an integer, but this implementation
+ technique is not required by the
+ Java<font size="-2"><sup>TM</sup></font> programming language.)
+
+ <p>This implementation returns the hash code of <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Returns a string representation of this collection. The string
+ representation consists of a list of the collection's elements in the
+ order they are returned by its iterator, enclosed in square brackets
+ (<tt>"[]"</tt>). Adjacent elements are separated by the characters
+ <tt>", "</tt> (comma and space). Elements are converted to strings as
+ by <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true#valueOf(java.lang.Object)" title="class or interface in java.lang"><CODE>String.valueOf(Object)</CODE></A>.
+
+ <p>This implementation returns the result of invoking <code>toString</code> on
+ <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#toString()">toString</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toString()" title="class or interface in java.util">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a string representation of this collection</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/HashMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/HashMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="HashMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableBiMap.Builder.html b/javadoc/com/google/common/collect/ImmutableBiMap.Builder.html
new file mode 100644
index 0000000..6b09528
--- /dev/null
+++ b/javadoc/com/google/common/collect/ImmutableBiMap.Builder.html
@@ -0,0 +1,338 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+ImmutableBiMap.Builder (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImmutableBiMap.Builder (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableBiMap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableBiMap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableBiMap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ImmutableBiMap.Builder&lt;K,V&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableMap.Builder</A>&lt;K,V&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableBiMap.Builder&lt;K,V&gt;</B>
+</PRE>
+<DL>
+<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public static final class <B>ImmutableBiMap.Builder&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;K,V&gt;</DL>
+</PRE>
+
+<P>
+A builder for creating immutable bimap instances, especially <code>public
+ static final</code> bimaps ("constant bimaps"). Example: <pre> <code>static final ImmutableBiMap&lt;String, Integer&gt; WORD_TO_INT =
+ new ImmutableBiMap.Builder&lt;String, Integer&gt;()
+ .put("one", 1)
+ .put("two", 2)
+ .put("three", 3)
+ .build();</code></pre>
+
+ For <i>small</i> immutable bimaps, the <code>ImmutableBiMap.of()</code> methods
+ are even more convenient.
+
+ <p>Builder instances can be reused - it is safe to call <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html#build()"><CODE>build()</CODE></A>
+ multiple times to build multiple bimaps in series. Each bimap is a superset
+ of the bimaps created before it.
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html#ImmutableBiMap.Builder()">ImmutableBiMap.Builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new builder.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html#build()">build</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created immutable bimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates <code>key</code> with <code>value</code> in the built bimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates all of the given map's keys and values in the built bimap.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ImmutableBiMap.Builder()"><!-- --></A><H3>
+ImmutableBiMap.Builder</H3>
+<PRE>
+public <B>ImmutableBiMap.Builder</B>()</PRE>
+<DL>
+<DD>Creates a new builder. The returned builder is equivalent to the builder
+ generated by <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#builder()"><CODE>ImmutableBiMap.builder()</CODE></A>.
+<P>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
+put</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt; <B>put</B>(<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&nbsp;value)</PRE>
+<DL>
+<DD>Associates <code>key</code> with <code>value</code> in the built bimap. Duplicate
+ keys or values are not allowed, and will cause <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html#build()"><CODE>build()</CODE></A> to fail.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html#put(K, V)">put</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(java.util.Map)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt; <B>putAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt;&nbsp;map)</PRE>
+<DL>
+<DD>Associates all of the given map's keys and values in the built bimap.
+ Duplicate keys or values are not allowed, and will cause <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html#build()"><CODE>build()</CODE></A>
+ to fail.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html#putAll(java.util.Map)">putAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>map</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="build()"><!-- --></A><H3>
+build</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt; <B>build</B>()</PRE>
+<DL>
+<DD>Returns a newly-created immutable bimap.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html#build()">build</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if duplicate keys or values were added</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableBiMap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableBiMap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableBiMap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableBiMap.html b/javadoc/com/google/common/collect/ImmutableBiMap.html
new file mode 100644
index 0000000..aa9b390
--- /dev/null
+++ b/javadoc/com/google/common/collect/ImmutableBiMap.html
@@ -0,0 +1,1062 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+ImmutableBiMap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImmutableBiMap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableBiMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableBiMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableBiMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ImmutableBiMap&lt;K,V&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableMap</A>&lt;K,V&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableBiMap&lt;K,V&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>ImmutableBiMap&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;<DT>implements <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</DL>
+</PRE>
+
+<P>
+An immutable <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> with reliable user-specified iteration order. Does
+ not permit null keys or values. An <code>ImmutableBiMap</code> and its inverse
+ have the same iteration ordering.
+
+ <p>An instance of <code>ImmutableBiMap</code> contains its own data and will
+ <i>never</i> change. <code>ImmutableBiMap</code> is convenient for
+ <code>public static final</code> maps ("constant maps") and also lets you easily
+ make a "defensive copy" of a bimap provided to your class by a caller.
+
+ <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
+ it has no public or protected constructors. Thus, instances of this class are
+ guaranteed to be immutable.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Jared Levy</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.ImmutableBiMap">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt;</B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable bimap instances, especially <code>public
+ static final</code> bimaps ("constant bimaps").</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">V</A>&gt;</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#builder()">builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#containsKey(java.lang.Object)">containsKey</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this map contains a mapping for the specified
+ key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this map maps one or more keys to the
+ specified value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#copyOf(java.util.Map)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable bimap containing the same entries as <code>map</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#entrySet()">entrySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the mappings in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indicates whether some other object is "equal to" this one.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#forcePut(K, V)">forcePut</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the bimap unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#get(java.lang.Object)">get</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value to which the specified key is mapped,
+ or <code>null</code> if this map contains no mapping for the key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code value for the object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#inverse()">inverse</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the inverse view of this bimap, which maps each of this bimap's
+ values to its associated key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#isEmpty()">isEmpty</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this map contains no key-value mappings.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#keySet()">keySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the keys in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#of()">of</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty bimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#of(K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable bimap containing a single entry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#of(K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#of(K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#of(K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#of(K, V, K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4,
+ K&nbsp;k5,
+ V&nbsp;v5)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#size()">size</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of key-value mappings in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string representation of the object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#values()">values</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the values in this map.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ImmutableMap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ImmutableMap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/ImmutableMap.html#putAll(java.util.Map)">putAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableMap.html#remove(java.lang.Object)">remove</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.BiMap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/BiMap.html#putAll(java.util.Map)">putAll</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="of()"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt; <B>of</B>()</PRE>
+<DL>
+<DD>Returns the empty bimap.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1)</PRE>
+<DL>
+<DD>Returns an immutable bimap containing a single entry.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2)</PRE>
+<DL>
+<DD>Returns an immutable map containing the given entries, in order.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if duplicate keys or values are added</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3)</PRE>
+<DL>
+<DD>Returns an immutable map containing the given entries, in order.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if duplicate keys or values are added</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V, K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4)</PRE>
+<DL>
+<DD>Returns an immutable map containing the given entries, in order.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if duplicate keys or values are added</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V, K, V, K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4,
+ K&nbsp;k5,
+ V&nbsp;v5)</PRE>
+<DL>
+<DD>Returns an immutable map containing the given entries, in order.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if duplicate keys or values are added</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="builder()"><!-- --></A><H3>
+builder</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>&lt;K,V&gt; <B>builder</B>()</PRE>
+<DL>
+<DD>Returns a new builder. The generated builder is equivalent to the builder
+ created by the <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableBiMap.Builder</CODE></A> constructor.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="copyOf(java.util.Map)"><!-- --></A><H3>
+copyOf</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</PRE>
+<DL>
+<DD>Returns an immutable bimap containing the same entries as <code>map</code>. If
+ <code>map</code> somehow contains entries with duplicate keys (for example, if
+ it is a <code>SortedMap</code> whose comparator is not <i>consistent with
+ equals</i>), the results of this method are undefined.
+
+ <p><b>Note:</b> If <code>map</code> is an <code>ImmutableBiMap</code>, the given map
+ itself will be returned.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if two keys have the same value
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>map</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="inverse()"><!-- --></A><H3>
+inverse</H3>
+<PRE>
+public abstract <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>&gt; <B>inverse</B>()</PRE>
+<DL>
+<DD>Returns the inverse view of this bimap, which maps each of this bimap's
+ values to its associated key. The two bimaps are backed by the same data;
+ any changes to one will appear in the other.
+
+ <p><b>Note:</b>There is no guaranteed correspondence between the iteration
+ order of a bimap and that of its inverse.
+
+ <p>The inverse of an <code>ImmutableBiMap</code> is another
+ <code>ImmutableBiMap</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#inverse()">inverse</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the inverse view of this bimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsKey(java.lang.Object)"><!-- --></A><H3>
+containsKey</H3>
+<PRE>
+public boolean <B>containsKey</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this map contains a mapping for the specified
+ key. More formally, returns <tt>true</tt> if and only if
+ this map contains a mapping for a key <tt>k</tt> such that
+ <tt>(key==null ? k==null : key.equals(k))</tt>. (There can be
+ at most one such mapping.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#containsKey(java.lang.Object)">containsKey</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key whose presence in this map is to be tested
+<DT><B>Returns:</B><DD><tt>true</tt> if this map contains a mapping for the specified
+ key</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
+containsValue</H3>
+<PRE>
+public boolean <B>containsValue</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this map maps one or more keys to the
+ specified value. More formally, returns <tt>true</tt> if and only if
+ this map contains at least one mapping to a value <tt>v</tt> such that
+ <tt>(value==null ? v==null : value.equals(v))</tt>. This operation
+ will probably require time linear in the map size for most
+ implementations of the <tt>Map</tt> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#containsValue(java.lang.Object)">containsValue</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>value</CODE> - value whose presence in this map is to be tested
+<DT><B>Returns:</B><DD><tt>true</tt> if this map maps one or more keys to the
+ specified value</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entrySet()"><!-- --></A><H3>
+entrySet</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;&gt; <B>entrySet</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#entrySet()">ImmutableMap</A></CODE></B></DD>
+<DD>Returns an immutable set of the mappings in this map. The entries are in
+ the same order as the parameters used to build this map.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#entrySet()">entrySet</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a set view of the mappings contained in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(java.lang.Object)"><!-- --></A><H3>
+get</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A> <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns the value to which the specified key is mapped,
+ or <code>null</code> if this map contains no mapping for the key.
+
+ <p>More formally, if this map contains a mapping from a key
+ <code>k</code> to a value <code>v</code> such that <code>(key==null ? k==null :
+ key.equals(k))</code>, then this method returns <code>v</code>; otherwise
+ it returns <code>null</code>. (There can be at most one such mapping.)
+
+ <p>If this map permits null values, then a return value of
+ <code>null</code> does not <i>necessarily</i> indicate that the map
+ contains no mapping for the key; it's also possible that the map
+ explicitly maps the key to <code>null</code>. The <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util"><CODE>containsKey</CODE></A> operation may be used to distinguish these two cases.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#get(java.lang.Object)">get</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - the key whose associated value is to be returned
+<DT><B>Returns:</B><DD>the value to which the specified key is mapped, or
+ <code>null</code> if this map contains no mapping for the key</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keySet()"><!-- --></A><H3>
+keySet</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>&gt; <B>keySet</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#keySet()">ImmutableMap</A></CODE></B></DD>
+<DD>Returns an immutable set of the keys in this map. These keys are in
+ the same order as the parameters used to build this map.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#keySet()">keySet</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a set view of the keys contained in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="values()"><!-- --></A><H3>
+values</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt; <B>values</B>()</PRE>
+<DL>
+<DD>Returns an immutable set of the values in this map. The values are in the
+ same order as the parameters used to build this map.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#values()">values</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#values()">values</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a collection view of the values contained in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="forcePut(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="forcePut(K, V)"><!-- --></A><H3>
+forcePut</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A> <B>forcePut</B>(<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&nbsp;value)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the bimap unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#forcePut(K, V)">forcePut</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - the key with which the specified value is to be associated<DD><CODE>value</CODE> - the value to be associated with the specified key
+<DT><B>Returns:</B><DD>the value which was previously associated with the key, which may
+ be <code>null</code>, or <code>null</code> if there was no previous entry
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isEmpty()"><!-- --></A><H3>
+isEmpty</H3>
+<PRE>
+public boolean <B>isEmpty</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this map contains no key-value mappings.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#isEmpty()">isEmpty</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD><tt>true</tt> if this map contains no key-value mappings</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="size()"><!-- --></A><H3>
+size</H3>
+<PRE>
+public int <B>size</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns the number of key-value mappings in this map. If the
+ map contains more than <tt>Integer.MAX_VALUE</tt> elements, returns
+ <tt>Integer.MAX_VALUE</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the number of key-value mappings in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Indicates whether some other object is "equal to" this one.
+ <p>
+ The <code>equals</code> method implements an equivalence relation
+ on non-null object references:
+ <ul>
+ <li>It is <i>reflexive</i>: for any non-null reference value
+ <code>x</code>, <code>x.equals(x)</code> should return
+ <code>true</code>.
+ <li>It is <i>symmetric</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, <code>x.equals(y)</code>
+ should return <code>true</code> if and only if
+ <code>y.equals(x)</code> returns <code>true</code>.
+ <li>It is <i>transitive</i>: for any non-null reference values
+ <code>x</code>, <code>y</code>, and <code>z</code>, if
+ <code>x.equals(y)</code> returns <code>true</code> and
+ <code>y.equals(z)</code> returns <code>true</code>, then
+ <code>x.equals(z)</code> should return <code>true</code>.
+ <li>It is <i>consistent</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, multiple invocations of
+ <tt>x.equals(y)</tt> consistently return <code>true</code>
+ or consistently return <code>false</code>, provided no
+ information used in <code>equals</code> comparisons on the
+ objects is modified.
+ <li>For any non-null reference value <code>x</code>,
+ <code>x.equals(null)</code> should return <code>false</code>.
+ </ul>
+ <p>
+ The <tt>equals</tt> method for class <code>Object</code> implements
+ the most discriminating possible equivalence relation on objects;
+ that is, for any non-null reference values <code>x</code> and
+ <code>y</code>, this method returns <code>true</code> if and only
+ if <code>x</code> and <code>y</code> refer to the same object
+ (<code>x == y</code> has the value <code>true</code>).
+ <p>
+ Note that it is generally necessary to override the <tt>hashCode</tt>
+ method whenever this method is overridden, so as to maintain the
+ general contract for the <tt>hashCode</tt> method, which states
+ that equal objects must have equal hash codes.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#equals(java.lang.Object)">equals</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+public int <B>hashCode</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Returns a hash code value for the object. This method is
+ supported for the benefit of hashtables such as those provided by
+ <code>java.util.Hashtable</code>.
+ <p>
+ The general contract of <code>hashCode</code> is:
+ <ul>
+ <li>Whenever it is invoked on the same object more than once during
+ an execution of a Java application, the <tt>hashCode</tt> method
+ must consistently return the same integer, provided no information
+ used in <tt>equals</tt> comparisons on the object is modified.
+ This integer need not remain consistent from one execution of an
+ application to another execution of the same application.
+ <li>If two objects are equal according to the <tt>equals(Object)</tt>
+ method, then calling the <code>hashCode</code> method on each of
+ the two objects must produce the same integer result.
+ <li>It is <em>not</em> required that if two objects are unequal
+ according to the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>
+ method, then calling the <tt>hashCode</tt> method on each of the
+ two objects must produce distinct integer results. However, the
+ programmer should be aware that producing distinct integer results
+ for unequal objects may improve the performance of hashtables.
+ </ul>
+ <p>
+ As much as is reasonably practical, the hashCode method defined by
+ class <tt>Object</tt> does return distinct integers for distinct
+ objects. (This is typically implemented by converting the internal
+ address of the object into an integer, but this implementation
+ technique is not required by the
+ Java<font size="-2"><sup>TM</sup></font> programming language.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#hashCode()">hashCode</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Returns a string representation of the object. In general, the
+ <code>toString</code> method returns a string that
+ "textually represents" this object. The result should
+ be a concise but informative representation that is easy for a
+ person to read.
+ It is recommended that all subclasses override this method.
+ <p>
+ The <code>toString</code> method for class <code>Object</code>
+ returns a string consisting of the name of the class of which the
+ object is an instance, the at-sign character `<code>@</code>', and
+ the unsigned hexadecimal representation of the hash code of the
+ object. In other words, this method returns a string equal to the
+ value of:
+ <blockquote>
+ <pre>
+ getClass().getName() + '@' + Integer.toHexString(hashCode())
+ </pre></blockquote>
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#toString()">toString</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a string representation of the object.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableBiMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableBiMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableBiMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableClassToInstanceMap.Builder.html b/javadoc/com/google/common/collect/ImmutableClassToInstanceMap.Builder.html
new file mode 100644
index 0000000..b1f049d
--- /dev/null
+++ b/javadoc/com/google/common/collect/ImmutableClassToInstanceMap.Builder.html
@@ -0,0 +1,343 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+ImmutableClassToInstanceMap.Builder (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImmutableClassToInstanceMap.Builder (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableClassToInstanceMap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableClassToInstanceMap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ImmutableClassToInstanceMap.Builder&lt;B&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableClassToInstanceMap.Builder&lt;B&gt;</B>
+</PRE>
+<DL>
+<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public static final class <B>ImmutableClassToInstanceMap.Builder&lt;B&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+A builder for creating immutable class-to-instance maps. Example:
+ <pre> <code>static final ImmutableClassToInstanceMap&lt;Handler&gt; HANDLERS =
+ new ImmutableClassToInstanceMap.Builder&lt;Handler&gt;()
+ .put(FooHandler.class, new FooHandler())
+ .put(BarHandler.class, new SubBarHandler())
+ .put(Handler.class, new QuuxHandler())
+ .build();</code></pre>
+
+ <p>After invoking <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#build()"><CODE>build()</CODE></A> it is still possible to add more
+ entries and build again. Thus each map generated by this builder will be
+ a superset of any map generated before it.
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#ImmutableClassToInstanceMap.Builder()">ImmutableClassToInstanceMap.Builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#build()">build</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new immutable class-to-instance map containing the entries
+ provided to this builder.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T extends <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#put(java.lang.Class, T)">put</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type,
+ T&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates <code>key</code> with <code>value</code> in the built map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T extends <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends T&gt;,? extends T&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates all of <code>map's</code> keys and values in the built map.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ImmutableClassToInstanceMap.Builder()"><!-- --></A><H3>
+ImmutableClassToInstanceMap.Builder</H3>
+<PRE>
+public <B>ImmutableClassToInstanceMap.Builder</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="put(java.lang.Class,java.lang.Object)"><!-- --></A><A NAME="put(java.lang.Class, T)"><!-- --></A><H3>
+put</H3>
+<PRE>
+public &lt;T extends <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt; <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt; <B>put</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type,
+ T&nbsp;value)</PRE>
+<DL>
+<DD>Associates <code>key</code> with <code>value</code> in the built map. Duplicate
+ keys are not allowed, and will cause <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#build()"><CODE>build()</CODE></A> to fail.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(java.util.Map)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public &lt;T extends <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt; <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt; <B>putAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends T&gt;,? extends T&gt;&nbsp;map)</PRE>
+<DL>
+<DD>Associates all of <code>map's</code> keys and values in the built map.
+ Duplicate keys are not allowed, and will cause <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#build()"><CODE>build()</CODE></A> to fail.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>map</code> is null
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang">ClassCastException</A></CODE> - if any value is not an instance of the type
+ specified by its key</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="build()"><!-- --></A><H3>
+build</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt; <B>build</B>()</PRE>
+<DL>
+<DD>Returns a new immutable class-to-instance map containing the entries
+ provided to this builder.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if duplicate keys were added</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableClassToInstanceMap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableClassToInstanceMap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableClassToInstanceMap.html b/javadoc/com/google/common/collect/ImmutableClassToInstanceMap.html
new file mode 100644
index 0000000..e0b6de4
--- /dev/null
+++ b/javadoc/com/google/common/collect/ImmutableClassToInstanceMap.html
@@ -0,0 +1,446 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+ImmutableClassToInstanceMap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImmutableClassToInstanceMap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableClassToInstanceMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableClassToInstanceMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableClassToInstanceMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ImmutableClassToInstanceMap&lt;B&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingMap</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends B&gt;,B&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableClassToInstanceMap&lt;B&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>&lt;B&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends B&gt;,B&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public final class <B>ImmutableClassToInstanceMap&lt;B&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends B&gt;,B&gt;<DT>implements <A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>&lt;B&gt;</DL>
+</PRE>
+
+<P>
+A class-to-instance map backed by an <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><CODE>ImmutableMap</CODE></A>. See also <A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect"><CODE>MutableClassToInstanceMap</CODE></A>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion</DD>
+</DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt;</B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable class-to-instance maps.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">V</A>&gt;</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;B&gt; <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>&lt;B&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html#builder()">builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;B,S extends B&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>&lt;B&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html#copyOf(java.util.Map)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends S&gt;,? extends S&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the same entries as <code>map</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt;,<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html#delegate()">delegate</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T extends <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt;
+<BR>
+T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html#getInstance(java.lang.Class)">getInstance</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value the specified class is mapped to, or <code>null</code> if no
+ entry for this class is present.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T extends <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt;
+<BR>
+T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html#putInstance(java.lang.Class, T)">putInstance</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type,
+ T&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the map unmodified.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingMap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#entrySet()">entrySet</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#get(java.lang.Object)">get</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#putAll(java.util.Map)">putAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#values()">values</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">put</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="builder()"><!-- --></A><H3>
+builder</H3>
+<PRE>
+public static &lt;B&gt; <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>&lt;B&gt; <B>builder</B>()</PRE>
+<DL>
+<DD>Returns a new builder. The generated builder is equivalent to the builder
+ created by the <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableClassToInstanceMap.Builder</CODE></A> constructor.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="copyOf(java.util.Map)"><!-- --></A><H3>
+copyOf</H3>
+<PRE>
+public static &lt;B,S extends B&gt; <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>&lt;B&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends S&gt;,? extends S&gt;&nbsp;map)</PRE>
+<DL>
+<DD>Returns an immutable map containing the same entries as <code>map</code>. If
+ <code>map</code> somehow contains entries with duplicate keys (for example, if
+ it is a <code>SortedMap</code> whose comparator is not <i>consistent with
+ equals</i>), the results of this method are undefined.
+
+ <p><b>Note:</b> Despite what the method name suggests, if <code>map</code> is
+ an <code>ImmutableClassToInstanceMap</code>, no copy will actually be performed.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>map</code> is null
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang">ClassCastException</A></CODE> - if any value is not an instance of the type
+ specified by its key</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="delegate()"><!-- --></A><H3>
+delegate</H3>
+<PRE>
+protected <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt;,<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt; <B>delegate</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
+<DD>Returns the backing delegate instance that methods are forwarded to.
+ Abstract subclasses generally override this method with an abstract method
+ that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
+ the instance being decorated.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt;,<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getInstance(java.lang.Class)"><!-- --></A><H3>
+getInstance</H3>
+<PRE>
+public &lt;T extends <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt; T <B>getInstance</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html#getInstance(java.lang.Class)">ClassToInstanceMap</A></CODE></B></DD>
+<DD>Returns the value the specified class is mapped to, or <code>null</code> if no
+ entry for this class is present. This will only return a value that was
+ bound to this specific class, not a value that may have been bound to a
+ subtype.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html#getInstance(java.lang.Class)">getInstance</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putInstance(java.lang.Class,java.lang.Object)"><!-- --></A><A NAME="putInstance(java.lang.Class, T)"><!-- --></A><H3>
+putInstance</H3>
+<PRE>
+public &lt;T extends <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt; T <B>putInstance</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type,
+ T&nbsp;value)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the map unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html#putInstance(java.lang.Class, T)">putInstance</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the value previously associated with this class (possibly <code>null</code>), or <code>null</code> if there was no previous entry.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableClassToInstanceMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableClassToInstanceMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableClassToInstanceMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableCollection.html b/javadoc/com/google/common/collect/ImmutableCollection.html
new file mode 100644
index 0000000..8b3c5ff
--- /dev/null
+++ b/javadoc/com/google/common/collect/ImmutableCollection.html
@@ -0,0 +1,648 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+ImmutableCollection (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImmutableCollection (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableCollection.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableCollection.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableCollection.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ImmutableCollection&lt;E&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableCollection&lt;E&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</DD>
+</DL>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>, <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>ImmutableCollection&lt;E&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DL>
+</PRE>
+
+<P>
+An immutable collection. Does not permit null elements.
+
+ <p><b>Note</b>: Although this class is not final, it cannot be subclassed
+ outside of this package as it has no public or protected constructors. Thus,
+ instances of this type are guaranteed to be immutable.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Jesse Wilson</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.ImmutableCollection">Serialized Form</A></DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#add(E)">add</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&nbsp;e)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the collection unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#addAll(java.util.Collection)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;&nbsp;newElements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the collection unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#clear()">clear</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the collection unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#contains(java.lang.Object)">contains</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this collection contains the specified element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#containsAll(java.util.Collection)">containsAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;targets)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this collection contains all of the elements
+ in the specified collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#isEmpty()">isEmpty</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this collection contains no elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#iterator()">iterator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable iterator across the elements in this collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the collection unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#removeAll(java.util.Collection)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;oldElements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the collection unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#retainAll(java.util.Collection)">retainAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToKeep)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the collection unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toArray()">toArray</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array containing all of the elements in this collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toArray(T[])">toArray</A></B>(T[]&nbsp;other)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array containing all of the elements in this collection;
+ the runtime type of the returned array is that of the specified array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string representation of the object.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Collection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="iterator()"><!-- --></A><H3>
+iterator</H3>
+<PRE>
+public abstract <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt; <B>iterator</B>()</PRE>
+<DL>
+<DD>Returns an unmodifiable iterator across the elements in this collection.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true#iterator()" title="class or interface in java.lang">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>an <tt>Iterator</tt> over the elements in this collection</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toArray()"><!-- --></A><H3>
+toArray</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>[] <B>toArray</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util">java.util.Collection</A></CODE></B></DD>
+<DD>Returns an array containing all of the elements in this collection.
+ If this collection makes any guarantees as to what order its elements
+ are returned by its iterator, this method must return the elements in
+ the same order.
+
+ <p>The returned array will be "safe" in that no references to it are
+ maintained by this collection. (In other words, this method must
+ allocate a new array even if this collection is backed by an array).
+ The caller is thus free to modify the returned array.
+
+ <p>This method acts as bridge between array-based and collection-based
+ APIs.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>an array containing all of the elements in this collection</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toArray(java.lang.Object[])"><!-- --></A><A NAME="toArray(T[])"><!-- --></A><H3>
+toArray</H3>
+<PRE>
+public &lt;T&gt; T[] <B>toArray</B>(T[]&nbsp;other)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray(T[])" title="class or interface in java.util">java.util.Collection</A></CODE></B></DD>
+<DD>Returns an array containing all of the elements in this collection;
+ the runtime type of the returned array is that of the specified array.
+ If the collection fits in the specified array, it is returned therein.
+ Otherwise, a new array is allocated with the runtime type of the
+ specified array and the size of this collection.
+
+ <p>If this collection fits in the specified array with room to spare
+ (i.e., the array has more elements than this collection), the element
+ in the array immediately following the end of the collection is set to
+ <tt>null</tt>. (This is useful in determining the length of this
+ collection <i>only</i> if the caller knows that this collection does
+ not contain any <tt>null</tt> elements.)
+
+ <p>If this collection makes any guarantees as to what order its elements
+ are returned by its iterator, this method must return the elements in
+ the same order.
+
+ <p>Like the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util"><CODE>Collection.toArray()</CODE></A> method, this method acts as bridge between
+ array-based and collection-based APIs. Further, this method allows
+ precise control over the runtime type of the output array, and may,
+ under certain circumstances, be used to save allocation costs.
+
+ <p>Suppose <tt>x</tt> is a collection known to contain only strings.
+ The following code can be used to dump the collection into a newly
+ allocated array of <tt>String</tt>:
+
+ <pre>
+ String[] y = x.toArray(new String[0]);</pre>
+
+ Note that <tt>toArray(new Object[0])</tt> is identical in function to
+ <tt>toArray()</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>other</CODE> - the array into which the elements of this collection are to be
+ stored, if it is big enough; otherwise, a new array of the same
+ runtime type is allocated for this purpose.
+<DT><B>Returns:</B><DD>an array containing all of the elements in this collection</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="contains(java.lang.Object)"><!-- --></A><H3>
+contains</H3>
+<PRE>
+public boolean <B>contains</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">java.util.Collection</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this collection contains the specified element.
+ More formally, returns <tt>true</tt> if and only if this collection
+ contains at least one element <tt>e</tt> such that
+ <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - element whose presence in this collection is to be tested
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection contains the specified
+ element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsAll(java.util.Collection)"><!-- --></A><H3>
+containsAll</H3>
+<PRE>
+public boolean <B>containsAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;targets)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">java.util.Collection</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this collection contains all of the elements
+ in the specified collection.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>targets</CODE> - collection to be checked for containment in this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection contains all of the elements
+ in the specified collection<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.contains(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isEmpty()"><!-- --></A><H3>
+isEmpty</H3>
+<PRE>
+public boolean <B>isEmpty</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#isEmpty()" title="class or interface in java.util">java.util.Collection</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this collection contains no elements.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection contains no elements</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Returns a string representation of the object. In general, the
+ <code>toString</code> method returns a string that
+ "textually represents" this object. The result should
+ be a concise but informative representation that is easy for a
+ person to read.
+ It is recommended that all subclasses override this method.
+ <p>
+ The <code>toString</code> method for class <code>Object</code>
+ returns a string consisting of the name of the class of which the
+ object is an instance, the at-sign character `<code>@</code>', and
+ the unsigned hexadecimal representation of the hash code of the
+ object. In other words, this method returns a string equal to the
+ value of:
+ <blockquote>
+ <pre>
+ getClass().getName() + '@' + Integer.toHexString(hashCode())
+ </pre></blockquote>
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a string representation of the object.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="add(java.lang.Object)"><!-- --></A><A NAME="add(E)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public final boolean <B>add</B>(<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&nbsp;e)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the collection unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>e</CODE> - element whose presence in this collection is to be ensured
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the
+ call
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public final boolean <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the collection unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - element to be removed from this collection, if present
+<DT><B>Returns:</B><DD><tt>true</tt> if an element was removed as a result of this call
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addAll(java.util.Collection)"><!-- --></A><H3>
+addAll</H3>
+<PRE>
+public final boolean <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;&nbsp;newElements)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the collection unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>newElements</CODE> - collection containing elements to be added to this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the call
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#add(E)" title="class or interface in java.util"><CODE>Collection.add(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="removeAll(java.util.Collection)"><!-- --></A><H3>
+removeAll</H3>
+<PRE>
+public final boolean <B>removeAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;oldElements)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the collection unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>oldElements</CODE> - collection containing elements to be removed from this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the
+ call
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.remove(Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.contains(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="retainAll(java.util.Collection)"><!-- --></A><H3>
+retainAll</H3>
+<PRE>
+public final boolean <B>retainAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToKeep)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the collection unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elementsToKeep</CODE> - collection containing elements to be retained in this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the call
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.remove(Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.contains(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clear()"><!-- --></A><H3>
+clear</H3>
+<PRE>
+public final void <B>clear</B>()</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the collection unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableCollection.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableCollection.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableCollection.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableList.Builder.html b/javadoc/com/google/common/collect/ImmutableList.Builder.html
new file mode 100644
index 0000000..e39fd38
--- /dev/null
+++ b/javadoc/com/google/common/collect/ImmutableList.Builder.html
@@ -0,0 +1,392 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+ImmutableList.Builder (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImmutableList.Builder (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableList.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableList.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableList.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ImmutableList.Builder&lt;E&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableList.Builder&lt;E&gt;</B>
+</PRE>
+<DL>
+<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public static final class <B>ImmutableList.Builder&lt;E&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+A builder for creating immutable list instances, especially
+ <code>public static final</code> lists ("constant lists").
+
+ <p>Example:
+ <pre> <code>public static final ImmutableList&lt;Color&gt; GOOGLE_COLORS
+ = new ImmutableList.Builder&lt;Color&gt;()
+ .addAll(WEBSAFE_COLORS)
+ .add(new Color(0, 191, 255))
+ .build();</code></pre>
+
+ <p>Builder instances can be reused - it is safe to call <A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html#build()"><CODE>build()</CODE></A>
+ multiple times to build multiple lists in series. Each new list
+ contains the one created before it.
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html#ImmutableList.Builder()">ImmutableList.Builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new builder.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html#add(E...)">add</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>...&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableList</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html#add(E)">add</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds <code>element</code> to the <code>ImmutableList</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html#addAll(java.lang.Iterable)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableList</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html#addAll(java.util.Iterator)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableList</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html#build()">build</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created <code>ImmutableList</code> based on the contents of
+ the <code>Builder</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ImmutableList.Builder()"><!-- --></A><H3>
+ImmutableList.Builder</H3>
+<PRE>
+public <B>ImmutableList.Builder</B>()</PRE>
+<DL>
+<DD>Creates a new builder. The returned builder is equivalent to the builder
+ generated by <A HREF="../../../../com/google/common/collect/ImmutableList.html#builder()"><CODE>ImmutableList.builder()</CODE></A>.
+<P>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="add(java.lang.Object)"><!-- --></A><A NAME="add(E)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt; <B>add</B>(<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&nbsp;element)</PRE>
+<DL>
+<DD>Adds <code>element</code> to the <code>ImmutableList</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add
+<DT><B>Returns:</B><DD>this <code>Builder</code> object
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>element</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addAll(java.lang.Iterable)"><!-- --></A><H3>
+addAll</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt; <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Adds each element of <code>elements</code> to the <code>ImmutableList</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the <code>Iterable</code> to add to the <code>ImmutableList</code>
+<DT><B>Returns:</B><DD>this <code>Builder</code> object
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>elements</code> is null or contains a
+ null element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="add(java.lang.Object[])"><!-- --></A><A NAME="add(E...)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt; <B>add</B>(<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>...&nbsp;elements)</PRE>
+<DL>
+<DD>Adds each element of <code>elements</code> to the <code>ImmutableList</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the <code>Iterable</code> to add to the <code>ImmutableList</code>
+<DT><B>Returns:</B><DD>this <code>Builder</code> object
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>elements</code> is null or contains a
+ null element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addAll(java.util.Iterator)"><!-- --></A><H3>
+addAll</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt; <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Adds each element of <code>elements</code> to the <code>ImmutableList</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the <code>Iterable</code> to add to the <code>ImmutableList</code>
+<DT><B>Returns:</B><DD>this <code>Builder</code> object
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>elements</code> is null or contains a
+ null element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="build()"><!-- --></A><H3>
+build</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt; <B>build</B>()</PRE>
+<DL>
+<DD>Returns a newly-created <code>ImmutableList</code> based on the contents of
+ the <code>Builder</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableList.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableList.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableList.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableList.html b/javadoc/com/google/common/collect/ImmutableList.html
new file mode 100644
index 0000000..64dcbd8
--- /dev/null
+++ b/javadoc/com/google/common/collect/ImmutableList.html
@@ -0,0 +1,1143 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+ImmutableList (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImmutableList (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableList.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableList.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableList.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ImmutableList&lt;E&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableCollection</A>&lt;E&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableList&lt;E&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util">RandomAccess</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>ImmutableList&lt;E&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;E&gt;<DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util">RandomAccess</A></DL>
+</PRE>
+
+<P>
+A high-performance, immutable, random-access <code>List</code> implementation.
+ Does not permit null elements.
+
+ <p>Unlike <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#unmodifiableList(java.util.List)" title="class or interface in java.util"><CODE>Collections.unmodifiableList(java.util.List<? extends T>)</CODE></A>, which is a <i>view</i> of a
+ separate collection that can still change, an instance of <code>ImmutableList</code> contains its own private data and will <i>never</i> change.
+ <code>ImmutableList</code> is convenient for <code>public static final</code> lists
+ ("constant lists") and also lets you easily make a "defensive copy" of a list
+ provided to your class by a caller.
+
+ <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
+ it has no public or protected constructors. Thus, instances of this type are
+ guaranteed to be immutable.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><CODE>ImmutableMap</CODE></A>,
+<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect"><CODE>ImmutableSet</CODE></A>,
+<A HREF="../../../../serialized-form.html#com.google.common.collect.ImmutableList">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;</B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable list instances, especially
+ <code>public static final</code> lists ("constant lists").</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#add(int, E)">add</A></B>(int&nbsp;index,
+ <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the list unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#addAll(int, java.util.Collection)">addAll</A></B>(int&nbsp;index,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;&nbsp;newElements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the list unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#builder()">builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#copyOf(java.lang.Iterable)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable list containing the given elements, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#copyOf(java.util.Iterator)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable list containing the given elements, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#indexOf(java.lang.Object)">indexOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the first occurrence of the specified element
+ in this list, or -1 if this list does not contain the element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#iterator()">iterator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable iterator across the elements in this collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#lastIndexOf(java.lang.Object)">lastIndexOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the last occurrence of the specified element
+ in this list, or -1 if this list does not contain the element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#of()">of</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty immutable list.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)">of</A></B>(E...&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable list containing the given elements, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E)">of</A></B>(E&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable list containing a single element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5,
+ E&nbsp;e6)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5,
+ E&nbsp;e6,
+ E&nbsp;e7)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5,
+ E&nbsp;e6,
+ E&nbsp;e7,
+ E&nbsp;e8)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5,
+ E&nbsp;e6,
+ E&nbsp;e7,
+ E&nbsp;e8,
+ E&nbsp;e9)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E, E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5,
+ E&nbsp;e6,
+ E&nbsp;e7,
+ E&nbsp;e8,
+ E&nbsp;e9,
+ E&nbsp;e10)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E, E, E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5,
+ E&nbsp;e6,
+ E&nbsp;e7,
+ E&nbsp;e8,
+ E&nbsp;e9,
+ E&nbsp;e10,
+ E&nbsp;e11)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#remove(int)">remove</A></B>(int&nbsp;index)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the list unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#set(int, E)">set</A></B>(int&nbsp;index,
+ <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the list unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#subList(int, int)">subList</A></B>(int&nbsp;fromIndex,
+ int&nbsp;toIndex)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable list of the elements between the specified <code>fromIndex</code>, inclusive, and <code>toIndex</code>, exclusive.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ImmutableCollection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#add(E)">add</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#contains(java.lang.Object)">contains</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toArray()">toArray</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toArray(T[])">toArray</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.List"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#add(E)" title="class or interface in java.util">add</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#get(int)" title="class or interface in java.util">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#listIterator()" title="class or interface in java.util">listIterator</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#listIterator(int)" title="class or interface in java.util">listIterator</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="of()"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>of</B>()</PRE>
+<DL>
+<DD>Returns the empty immutable list. This set behaves and performs comparably
+ to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#emptyList()" title="class or interface in java.util"><CODE>Collections.emptyList()</CODE></A>, and is preferable mainly for consistency
+ and maintainability of your code.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object)"><!-- --></A><A NAME="of(E)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>of</B>(E&nbsp;element)</PRE>
+<DL>
+<DD>Returns an immutable list containing a single element. This list behaves
+ and performs comparably to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#singleton(T)" title="class or interface in java.util"><CODE>Collections.singleton(T)</CODE></A>, but will not
+ accept a null element. It is preferable mainly for consistency and
+ maintainability of your code.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>element</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
+ E&nbsp;e2)</PRE>
+<DL>
+<DD>Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E, E)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3)</PRE>
+<DL>
+<DD>Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E, E, E)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4)</PRE>
+<DL>
+<DD>Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E, E, E, E)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5)</PRE>
+<DL>
+<DD>Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E, E, E, E, E)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5,
+ E&nbsp;e6)</PRE>
+<DL>
+<DD>Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E, E, E, E, E, E)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5,
+ E&nbsp;e6,
+ E&nbsp;e7)</PRE>
+<DL>
+<DD>Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E, E, E, E, E, E, E)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5,
+ E&nbsp;e6,
+ E&nbsp;e7,
+ E&nbsp;e8)</PRE>
+<DL>
+<DD>Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E, E, E, E, E, E, E, E)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5,
+ E&nbsp;e6,
+ E&nbsp;e7,
+ E&nbsp;e8,
+ E&nbsp;e9)</PRE>
+<DL>
+<DD>Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E, E, E, E, E, E, E, E, E)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5,
+ E&nbsp;e6,
+ E&nbsp;e7,
+ E&nbsp;e8,
+ E&nbsp;e9,
+ E&nbsp;e10)</PRE>
+<DL>
+<DD>Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E, E, E, E, E, E, E, E, E, E)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5,
+ E&nbsp;e6,
+ E&nbsp;e7,
+ E&nbsp;e8,
+ E&nbsp;e9,
+ E&nbsp;e10,
+ E&nbsp;e11)</PRE>
+<DL>
+<DD>Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object[])"><!-- --></A><A NAME="of(E...)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>of</B>(E...&nbsp;elements)</PRE>
+<DL>
+<DD>Returns an immutable list containing the given elements, in order.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="copyOf(java.lang.Iterable)"><!-- --></A><H3>
+copyOf</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Returns an immutable list containing the given elements, in order. This
+ method iterates over <code>elements</code> at most once. Note that if <code>list</code> is a <code>List&lt;String&gt;</code>, then <code>ImmutableList.copyOf(list)</code>
+ returns an <code>ImmutableList&lt;String&gt;</code> containing each of the strings
+ in <code>list</code>, while ImmutableList.of(list)} returns an <code>ImmutableList&lt;List&lt;String&gt;&gt;</code> containing one element (the given list
+ itself).
+
+ <p><b>Note:</b> Despite what the method name suggests, if <code>elements</code>
+ is an <code>ImmutableList</code>, no copy will actually be performed, and the
+ given list itself will be returned.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="copyOf(java.util.Iterator)"><!-- --></A><H3>
+copyOf</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Returns an immutable list containing the given elements, in order.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="iterator()"><!-- --></A><H3>
+iterator</H3>
+<PRE>
+public abstract <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt; <B>iterator</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#iterator()">ImmutableCollection</A></CODE></B></DD>
+<DD>Returns an unmodifiable iterator across the elements in this collection.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true#iterator()" title="class or interface in java.lang">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#iterator()">iterator</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>an <tt>Iterator</tt> over the elements in this collection</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="indexOf(java.lang.Object)"><!-- --></A><H3>
+indexOf</H3>
+<PRE>
+public abstract int <B>indexOf</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#indexOf(java.lang.Object)" title="class or interface in java.util">java.util.List</A></CODE></B></DD>
+<DD>Returns the index of the first occurrence of the specified element
+ in this list, or -1 if this list does not contain the element.
+ More formally, returns the lowest index <tt>i</tt> such that
+ <tt>(o==null&nbsp;?&nbsp;get(i)==null&nbsp;:&nbsp;o.equals(get(i)))</tt>,
+ or -1 if there is no such index.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#indexOf(java.lang.Object)" title="class or interface in java.util">indexOf</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - element to search for
+<DT><B>Returns:</B><DD>the index of the first occurrence of the specified element in
+ this list, or -1 if this list does not contain the element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="lastIndexOf(java.lang.Object)"><!-- --></A><H3>
+lastIndexOf</H3>
+<PRE>
+public abstract int <B>lastIndexOf</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#lastIndexOf(java.lang.Object)" title="class or interface in java.util">java.util.List</A></CODE></B></DD>
+<DD>Returns the index of the last occurrence of the specified element
+ in this list, or -1 if this list does not contain the element.
+ More formally, returns the highest index <tt>i</tt> such that
+ <tt>(o==null&nbsp;?&nbsp;get(i)==null&nbsp;:&nbsp;o.equals(get(i)))</tt>,
+ or -1 if there is no such index.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#lastIndexOf(java.lang.Object)" title="class or interface in java.util">lastIndexOf</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - element to search for
+<DT><B>Returns:</B><DD>the index of the last occurrence of the specified element in
+ this list, or -1 if this list does not contain the element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="subList(int, int)"><!-- --></A><H3>
+subList</H3>
+<PRE>
+public abstract <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt; <B>subList</B>(int&nbsp;fromIndex,
+ int&nbsp;toIndex)</PRE>
+<DL>
+<DD>Returns an immutable list of the elements between the specified <code>fromIndex</code>, inclusive, and <code>toIndex</code>, exclusive. (If <code>fromIndex</code> and <code>toIndex</code> are equal, the empty immutable list is
+ returned.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#subList(int, int)" title="class or interface in java.util">subList</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fromIndex</CODE> - low endpoint (inclusive) of the subList<DD><CODE>toIndex</CODE> - high endpoint (exclusive) of the subList
+<DT><B>Returns:</B><DD>a view of the specified range within this list</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addAll(int, java.util.Collection)"><!-- --></A><H3>
+addAll</H3>
+<PRE>
+public final boolean <B>addAll</B>(int&nbsp;index,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;&nbsp;newElements)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the list unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#addAll(int, java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - index at which to insert the first element from the
+ specified collection<DD><CODE>newElements</CODE> - collection containing elements to be added to this list
+<DT><B>Returns:</B><DD><tt>true</tt> if this list changed as a result of the call
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set(int,java.lang.Object)"><!-- --></A><A NAME="set(int, E)"><!-- --></A><H3>
+set</H3>
+<PRE>
+public final <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A> <B>set</B>(int&nbsp;index,
+ <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&nbsp;element)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the list unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#set(int, E)" title="class or interface in java.util">set</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - index of the element to replace<DD><CODE>element</CODE> - element to be stored at the specified position
+<DT><B>Returns:</B><DD>the element previously at the specified position
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="add(int,java.lang.Object)"><!-- --></A><A NAME="add(int, E)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public final void <B>add</B>(int&nbsp;index,
+ <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&nbsp;element)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the list unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#add(int, E)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - index at which the specified element is to be inserted<DD><CODE>element</CODE> - element to be inserted
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(int)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public final <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A> <B>remove</B>(int&nbsp;index)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the list unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#remove(int)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - the index of the element to be removed
+<DT><B>Returns:</B><DD>the element previously at the specified position
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="builder()"><!-- --></A><H3>
+builder</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;E&gt; <B>builder</B>()</PRE>
+<DL>
+<DD>Returns a new builder. The generated builder is equivalent to the builder
+ created by the <A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableList.Builder</CODE></A> constructor.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableList.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableList.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableList.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableListMultimap.Builder.html b/javadoc/com/google/common/collect/ImmutableListMultimap.Builder.html
new file mode 100644
index 0000000..ac8a065
--- /dev/null
+++ b/javadoc/com/google/common/collect/ImmutableListMultimap.Builder.html
@@ -0,0 +1,394 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+ImmutableListMultimap.Builder (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImmutableListMultimap.Builder (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableListMultimap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableListMultimap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableListMultimap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ImmutableListMultimap.Builder&lt;K,V&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableMultimap.Builder</A>&lt;K,V&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableListMultimap.Builder&lt;K,V&gt;</B>
+</PRE>
+<DL>
+<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public static final class <B>ImmutableListMultimap.Builder&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;K,V&gt;</DL>
+</PRE>
+
+<P>
+A builder for creating immutable <code>ListMultimap</code> instances, especially
+ <code>public static final</code> multimaps ("constant multimaps"). Example:
+ <pre> <code>static final Multimap&lt;String, Integer&gt; STRING_TO_INTEGER_MULTIMAP =
+ new ImmutableListMultimap.Builder&lt;String, Integer&gt;()
+ .put("one", 1)
+ .putAll("several", 1, 2, 3)
+ .putAll("many", 1, 2, 3, 4, 5)
+ .build();</code></pre>
+
+ <p>Builder instances can be reused - it is safe to call <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html#build()"><CODE>build()</CODE></A>
+ multiple times to build multiple multimaps in series. Each multimap
+ contains the key-value mappings in the previously created multimaps.
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html#ImmutableListMultimap.Builder()">ImmutableListMultimap.Builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new builder.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html#build()">build</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created immutable multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a key-value mapping to the built multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html#putAll(K, java.lang.Iterable)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key in the built multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html#putAll(K, V...)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>...&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores an array of values with the same key in the built multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores another multimap's entries in the built multimap.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ImmutableListMultimap.Builder()"><!-- --></A><H3>
+ImmutableListMultimap.Builder</H3>
+<PRE>
+public <B>ImmutableListMultimap.Builder</B>()</PRE>
+<DL>
+<DD>Creates a new builder. The returned builder is equivalent to the builder
+ generated by <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html#builder()"><CODE>ImmutableListMultimap.builder()</CODE></A>.
+<P>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
+put</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt; <B>put</B>(<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&nbsp;value)</PRE>
+<DL>
+<DD>Adds a key-value mapping to the built multimap.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#put(K, V)">put</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="putAll(K, java.lang.Iterable)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt; <B>putAll</B>(<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;&nbsp;values)</PRE>
+<DL>
+<DD>Stores a collection of values with the same key in the built multimap.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#putAll(K, java.lang.Iterable)">putAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>key</code>, <code>values</code>, or any
+ element in <code>values</code> is null. The builder is left in an invalid
+ state.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(java.lang.Object,java.lang.Object[])"><!-- --></A><A NAME="putAll(K, V...)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt; <B>putAll</B>(<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>...&nbsp;values)</PRE>
+<DL>
+<DD>Stores an array of values with the same key in the built multimap.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#putAll(K, V...)">putAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if the key or any value is null. The builder
+ is left in an invalid state.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(com.google.common.collect.Multimap)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt; <B>putAll</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;&nbsp;multimap)</PRE>
+<DL>
+<DD>Stores another multimap's entries in the built multimap. The generated
+ multimap's key and value orderings correspond to the iteration ordering
+ of the <code>multimap.asMap()</code> view, with new keys and values following
+ any existing keys and values.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#putAll(com.google.common.collect.Multimap)">putAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>multimap</code> is
+ null. The builder is left in an invalid state.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="build()"><!-- --></A><H3>
+build</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt; <B>build</B>()</PRE>
+<DL>
+<DD>Returns a newly-created immutable multimap.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#build()">build</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableListMultimap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableListMultimap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableListMultimap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableListMultimap.html b/javadoc/com/google/common/collect/ImmutableListMultimap.html
new file mode 100644
index 0000000..5ead545
--- /dev/null
+++ b/javadoc/com/google/common/collect/ImmutableListMultimap.html
@@ -0,0 +1,670 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+ImmutableListMultimap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImmutableListMultimap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableListMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableListMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableListMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ImmutableListMultimap&lt;K,V&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableMultimap</A>&lt;K,V&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableListMultimap&lt;K,V&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;, <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public class <B>ImmutableListMultimap&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;<DT>implements <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</DL>
+</PRE>
+
+<P>
+An immutable <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A> with reliable user-specified key and value
+ iteration order. Does not permit null keys or values.
+
+ <p>Unlike <A HREF="../../../../com/google/common/collect/Multimaps.html#unmodifiableListMultimap(com.google.common.collect.ListMultimap)"><CODE>Multimaps.unmodifiableListMultimap(ListMultimap)</CODE></A>, which is
+ a <i>view</i> of a separate multimap which can still change, an instance of
+ <code>ImmutableListMultimap</code> contains its own data and will <i>never</i>
+ change. <code>ImmutableListMultimap</code> is convenient for
+ <code>public static final</code> multimaps ("constant multimaps") and also lets
+ you easily make a "defensive copy" of a multimap provided to your class by
+ a caller.
+
+ <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
+ it has no public or protected constructors. Thus, instances of this class
+ are guaranteed to be immutable.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Jared Levy</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.ImmutableListMultimap">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable <code>ListMultimap</code> instances, especially
+ <code>public static final</code> multimaps ("constant multimaps").</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html#builder()">builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html#copyOf(com.google.common.collect.Multimap)">copyOf</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the same mappings as
+ <code>multimap</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html#get(K)">get</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable list of the values for the given key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html#of()">of</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html#of(K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing a single entry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html#of(K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html#of(K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html#of(K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html#of(K, V, K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4,
+ K&nbsp;k5,
+ V&nbsp;v5)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ImmutableMultimap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#asMap()">asMap</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#entries()">entries</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#keys()">keys</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#putAll(K, java.lang.Iterable)">putAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#putAll(com.google.common.collect.Multimap)">putAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#remove(java.lang.Object, java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#toString()">toString</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#values()">values</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ListMultimap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#asMap()">asMap</A>, <A HREF="../../../../com/google/common/collect/ListMultimap.html#equals(java.lang.Object)">equals</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.Multimap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#entries()">entries</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="of()"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt; <B>of</B>()</PRE>
+<DL>
+<DD>Returns the empty multimap.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1)</PRE>
+<DL>
+<DD>Returns an immutable multimap containing a single entry.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2)</PRE>
+<DL>
+<DD>Returns an immutable multimap containing the given entries, in order.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3)</PRE>
+<DL>
+<DD>Returns an immutable multimap containing the given entries, in order.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V, K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4)</PRE>
+<DL>
+<DD>Returns an immutable multimap containing the given entries, in order.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V, K, V, K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4,
+ K&nbsp;k5,
+ V&nbsp;v5)</PRE>
+<DL>
+<DD>Returns an immutable multimap containing the given entries, in order.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="builder()"><!-- --></A><H3>
+builder</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;K,V&gt; <B>builder</B>()</PRE>
+<DL>
+<DD>Returns a new builder. The generated builder is equivalent to the builder
+ created by the <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableListMultimap.Builder</CODE></A> constructor.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="copyOf(com.google.common.collect.Multimap)"><!-- --></A><H3>
+copyOf</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt; <B>copyOf</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</PRE>
+<DL>
+<DD>Returns an immutable multimap containing the same mappings as
+ <code>multimap</code>. The generated multimap's key and value orderings
+ correspond to the iteration ordering of the <code>multimap.asMap()</code> view.
+
+ <p><b>Note:</b> Despite what the method name suggests, if
+ <code>multimap</code> is an <code>ImmutableListMultimap</code>, no copy will actually
+ be performed, and the given multimap itself will be returned.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>multimap</code> is
+ null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(java.lang.Object)"><!-- --></A><A NAME="get(K)"><!-- --></A><H3>
+get</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt; <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>&nbsp;key)</PRE>
+<DL>
+<DD>Returns an immutable list of the values for the given key. If no mappings
+ in the multimap have the provided key, an empty immutable list is
+ returned. The values are in the same order as the parameters used to build
+ this multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#get(K)">get</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap
+<DT><B>Returns:</B><DD>the collection of values that the key maps to</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
+removeAll</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt; <B>removeAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the multimap unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entries to remove from the multimap
+<DT><B>Returns:</B><DD>the collection of removed values, or an empty collection if no
+ values were associated with the provided key. The collection
+ <i>may</i> be modifiable, but updating it will have no effect on the
+ multimap.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="replaceValues(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="replaceValues(K, java.lang.Iterable)"><!-- --></A><H3>
+replaceValues</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt; <B>replaceValues</B>(<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;&nbsp;values)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the multimap unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
+<DT><B>Returns:</B><DD>the collection of replaced values, or an empty collection if no
+ values were previously associated with the key. The collection
+ <i>may</i> be modifiable, but updating it will have no effect on the
+ multimap.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableListMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableListMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableListMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableMap.Builder.html b/javadoc/com/google/common/collect/ImmutableMap.Builder.html
new file mode 100644
index 0000000..f413dfc
--- /dev/null
+++ b/javadoc/com/google/common/collect/ImmutableMap.Builder.html
@@ -0,0 +1,330 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+ImmutableMap.Builder (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImmutableMap.Builder (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableMap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableMap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableMap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ImmutableMap.Builder&lt;K,V&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableMap.Builder&lt;K,V&gt;</B>
+</PRE>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>, <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A></DD>
+</DL>
+<DL>
+<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public static class <B>ImmutableMap.Builder&lt;K,V&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+A builder for creating immutable map instances, especially <code>public
+ static final</code> maps ("constant maps"). Example: <pre> <code>static final ImmutableMap&lt;String, Integer&gt; WORD_TO_INT =
+ new ImmutableMap.Builder&lt;String, Integer&gt;()
+ .put("one", 1)
+ .put("two", 2)
+ .put("three", 3)
+ .build();</code></pre>
+
+ For <i>small</i> immutable maps, the <code>ImmutableMap.of()</code> methods are
+ even more convenient.
+
+ <p>Builder instances can be reused - it is safe to call <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html#build()"><CODE>build()</CODE></A>
+ multiple times to build multiple maps in series. Each map is a superset of
+ the maps created before it.
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html#ImmutableMap.Builder()">ImmutableMap.Builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new builder.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html#build()">build</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created immutable map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates <code>key</code> with <code>value</code> in the built map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates all of the given map's keys and values in the built map.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ImmutableMap.Builder()"><!-- --></A><H3>
+ImmutableMap.Builder</H3>
+<PRE>
+public <B>ImmutableMap.Builder</B>()</PRE>
+<DL>
+<DD>Creates a new builder. The returned builder is equivalent to the builder
+ generated by <A HREF="../../../../com/google/common/collect/ImmutableMap.html#builder()"><CODE>ImmutableMap.builder()</CODE></A>.
+<P>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
+put</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt; <B>put</B>(<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&nbsp;value)</PRE>
+<DL>
+<DD>Associates <code>key</code> with <code>value</code> in the built map. Duplicate
+ keys are not allowed, and will cause <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html#build()"><CODE>build()</CODE></A> to fail.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(java.util.Map)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt; <B>putAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt;&nbsp;map)</PRE>
+<DL>
+<DD>Associates all of the given map's keys and values in the built map.
+ Duplicate keys are not allowed, and will cause <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html#build()"><CODE>build()</CODE></A> to fail.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>map</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="build()"><!-- --></A><H3>
+build</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt; <B>build</B>()</PRE>
+<DL>
+<DD>Returns a newly-created immutable map.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if duplicate keys were added</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableMap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableMap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableMap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableMap.html b/javadoc/com/google/common/collect/ImmutableMap.html
new file mode 100644
index 0000000..a79890d
--- /dev/null
+++ b/javadoc/com/google/common/collect/ImmutableMap.html
@@ -0,0 +1,1073 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+ImmutableMap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImmutableMap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ImmutableMap&lt;K,V&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableMap&lt;K,V&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</DD>
+</DL>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>, <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>ImmutableMap&lt;K,V&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DL>
+</PRE>
+
+<P>
+An immutable, hash-based <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> with reliable user-specified iteration
+ order. Does not permit null keys or values.
+
+ <p>Unlike <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#unmodifiableMap(java.util.Map)" title="class or interface in java.util"><CODE>Collections.unmodifiableMap(java.util.Map<? extends K, ? extends V>)</CODE></A>, which is a <i>view</i> of a
+ separate map which can still change, an instance of <code>ImmutableMap</code>
+ contains its own data and will <i>never</i> change. <code>ImmutableMap</code> is
+ convenient for <code>public static final</code> maps ("constant maps") and also
+ lets you easily make a "defensive copy" of a map provided to your class by a
+ caller.
+
+ <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
+ it has no public or protected constructors. Thus, instances of this class are
+ guaranteed to be immutable.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Jesse Wilson, Kevin Bourrillion</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect"><CODE>ImmutableList</CODE></A>,
+<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect"><CODE>ImmutableSet</CODE></A>,
+<A HREF="../../../../serialized-form.html#com.google.common.collect.ImmutableMap">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt;</B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable map instances, especially <code>public
+ static final</code> maps ("constant maps").</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">V</A>&gt;</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#builder()">builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#clear()">clear</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the map unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#containsKey(java.lang.Object)">containsKey</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this map contains a mapping for the specified
+ key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this map maps one or more keys to the
+ specified value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#copyOf(java.util.Map)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the same entries as <code>map</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#entrySet()">entrySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the mappings in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indicates whether some other object is "equal to" this one.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#get(java.lang.Object)">get</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value to which the specified key is mapped,
+ or <code>null</code> if this map contains no mapping for the key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code value for the object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#isEmpty()">isEmpty</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this map contains no key-value mappings.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#keySet()">keySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the keys in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#of()">of</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#of(K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing a single entry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#of(K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#of(K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#of(K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#of(K, V, K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4,
+ K&nbsp;k5,
+ V&nbsp;v5)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>&nbsp;k,
+ <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&nbsp;v)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the map unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the map unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;o)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the map unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string representation of the object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#values()">values</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable collection of the values in this map.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="of()"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt; <B>of</B>()</PRE>
+<DL>
+<DD>Returns the empty map. This map behaves and performs comparably to
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#emptyMap()" title="class or interface in java.util"><CODE>Collections.emptyMap()</CODE></A>, and is preferable mainly for consistency
+ and maintainability of your code.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1)</PRE>
+<DL>
+<DD>Returns an immutable map containing a single entry. This map behaves and
+ performs comparably to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#singletonMap(K, V)" title="class or interface in java.util"><CODE>Collections.singletonMap(K, V)</CODE></A> but will not accept
+ a null key or value. It is preferable mainly for consistency and
+ maintainability of your code.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2)</PRE>
+<DL>
+<DD>Returns an immutable map containing the given entries, in order.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if duplicate keys are provided</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3)</PRE>
+<DL>
+<DD>Returns an immutable map containing the given entries, in order.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if duplicate keys are provided</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V, K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4)</PRE>
+<DL>
+<DD>Returns an immutable map containing the given entries, in order.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if duplicate keys are provided</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V, K, V, K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4,
+ K&nbsp;k5,
+ V&nbsp;v5)</PRE>
+<DL>
+<DD>Returns an immutable map containing the given entries, in order.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if duplicate keys are provided</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="builder()"><!-- --></A><H3>
+builder</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;K,V&gt; <B>builder</B>()</PRE>
+<DL>
+<DD>Returns a new builder. The generated builder is equivalent to the builder
+ created by the <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableMap.Builder</CODE></A> constructor.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="copyOf(java.util.Map)"><!-- --></A><H3>
+copyOf</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</PRE>
+<DL>
+<DD>Returns an immutable map containing the same entries as <code>map</code>. If
+ <code>map</code> somehow contains entries with duplicate keys (for example, if
+ it is a <code>SortedMap</code> whose comparator is not <i>consistent with
+ equals</i>), the results of this method are undefined.
+
+ <p><b>Note:</b> Despite what the method name suggests, if <code>map</code> is an
+ <code>ImmutableMap</code>, no copy will actually be performed, and the given map
+ itself will be returned.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>map</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
+put</H3>
+<PRE>
+public final <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A> <B>put</B>(<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>&nbsp;k,
+ <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&nbsp;v)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the map unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">put</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>k</CODE> - key with which the specified value is to be associated<DD><CODE>v</CODE> - value to be associated with the specified key
+<DT><B>Returns:</B><DD>the previous value associated with <tt>key</tt>, or
+ <tt>null</tt> if there was no mapping for <tt>key</tt>.
+ (A <tt>null</tt> return can also indicate that the map
+ previously associated <tt>null</tt> with <tt>key</tt>,
+ if the implementation supports <tt>null</tt> values.)
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public final <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A> <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;o)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the map unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>o</CODE> - key whose mapping is to be removed from the map
+<DT><B>Returns:</B><DD>the previous value associated with <tt>key</tt>, or
+ <tt>null</tt> if there was no mapping for <tt>key</tt>.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(java.util.Map)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public final void <B>putAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;&nbsp;map)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the map unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>map</CODE> - mappings to be stored in this map
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clear()"><!-- --></A><H3>
+clear</H3>
+<PRE>
+public final void <B>clear</B>()</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the map unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isEmpty()"><!-- --></A><H3>
+isEmpty</H3>
+<PRE>
+public boolean <B>isEmpty</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this map contains no key-value mappings.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD><tt>true</tt> if this map contains no key-value mappings</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsKey(java.lang.Object)"><!-- --></A><H3>
+containsKey</H3>
+<PRE>
+public boolean <B>containsKey</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this map contains a mapping for the specified
+ key. More formally, returns <tt>true</tt> if and only if
+ this map contains a mapping for a key <tt>k</tt> such that
+ <tt>(key==null ? k==null : key.equals(k))</tt>. (There can be
+ at most one such mapping.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key whose presence in this map is to be tested
+<DT><B>Returns:</B><DD><tt>true</tt> if this map contains a mapping for the specified
+ key</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
+containsValue</H3>
+<PRE>
+public abstract boolean <B>containsValue</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this map maps one or more keys to the
+ specified value. More formally, returns <tt>true</tt> if and only if
+ this map contains at least one mapping to a value <tt>v</tt> such that
+ <tt>(value==null ? v==null : value.equals(v))</tt>. This operation
+ will probably require time linear in the map size for most
+ implementations of the <tt>Map</tt> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>value</CODE> - value whose presence in this map is to be tested
+<DT><B>Returns:</B><DD><tt>true</tt> if this map maps one or more keys to the
+ specified value</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(java.lang.Object)"><!-- --></A><H3>
+get</H3>
+<PRE>
+public abstract <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A> <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns the value to which the specified key is mapped,
+ or <code>null</code> if this map contains no mapping for the key.
+
+ <p>More formally, if this map contains a mapping from a key
+ <code>k</code> to a value <code>v</code> such that <code>(key==null ? k==null :
+ key.equals(k))</code>, then this method returns <code>v</code>; otherwise
+ it returns <code>null</code>. (There can be at most one such mapping.)
+
+ <p>If this map permits null values, then a return value of
+ <code>null</code> does not <i>necessarily</i> indicate that the map
+ contains no mapping for the key; it's also possible that the map
+ explicitly maps the key to <code>null</code>. The <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util"><CODE>containsKey</CODE></A> operation may be used to distinguish these two cases.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - the key whose associated value is to be returned
+<DT><B>Returns:</B><DD>the value to which the specified key is mapped, or
+ <code>null</code> if this map contains no mapping for the key</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entrySet()"><!-- --></A><H3>
+entrySet</H3>
+<PRE>
+public abstract <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;&gt; <B>entrySet</B>()</PRE>
+<DL>
+<DD>Returns an immutable set of the mappings in this map. The entries are in
+ the same order as the parameters used to build this map.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a set view of the mappings contained in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keySet()"><!-- --></A><H3>
+keySet</H3>
+<PRE>
+public abstract <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>&gt; <B>keySet</B>()</PRE>
+<DL>
+<DD>Returns an immutable set of the keys in this map. These keys are in
+ the same order as the parameters used to build this map.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a set view of the keys contained in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="values()"><!-- --></A><H3>
+values</H3>
+<PRE>
+public abstract <A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt; <B>values</B>()</PRE>
+<DL>
+<DD>Returns an immutable collection of the values in this map. The values are
+ in the same order as the parameters used to build this map.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a collection view of the values contained in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Indicates whether some other object is "equal to" this one.
+ <p>
+ The <code>equals</code> method implements an equivalence relation
+ on non-null object references:
+ <ul>
+ <li>It is <i>reflexive</i>: for any non-null reference value
+ <code>x</code>, <code>x.equals(x)</code> should return
+ <code>true</code>.
+ <li>It is <i>symmetric</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, <code>x.equals(y)</code>
+ should return <code>true</code> if and only if
+ <code>y.equals(x)</code> returns <code>true</code>.
+ <li>It is <i>transitive</i>: for any non-null reference values
+ <code>x</code>, <code>y</code>, and <code>z</code>, if
+ <code>x.equals(y)</code> returns <code>true</code> and
+ <code>y.equals(z)</code> returns <code>true</code>, then
+ <code>x.equals(z)</code> should return <code>true</code>.
+ <li>It is <i>consistent</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, multiple invocations of
+ <tt>x.equals(y)</tt> consistently return <code>true</code>
+ or consistently return <code>false</code>, provided no
+ information used in <code>equals</code> comparisons on the
+ objects is modified.
+ <li>For any non-null reference value <code>x</code>,
+ <code>x.equals(null)</code> should return <code>false</code>.
+ </ul>
+ <p>
+ The <tt>equals</tt> method for class <code>Object</code> implements
+ the most discriminating possible equivalence relation on objects;
+ that is, for any non-null reference values <code>x</code> and
+ <code>y</code>, this method returns <code>true</code> if and only
+ if <code>x</code> and <code>y</code> refer to the same object
+ (<code>x == y</code> has the value <code>true</code>).
+ <p>
+ Note that it is generally necessary to override the <tt>hashCode</tt>
+ method whenever this method is overridden, so as to maintain the
+ general contract for the <tt>hashCode</tt> method, which states
+ that equal objects must have equal hash codes.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+public int <B>hashCode</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Returns a hash code value for the object. This method is
+ supported for the benefit of hashtables such as those provided by
+ <code>java.util.Hashtable</code>.
+ <p>
+ The general contract of <code>hashCode</code> is:
+ <ul>
+ <li>Whenever it is invoked on the same object more than once during
+ an execution of a Java application, the <tt>hashCode</tt> method
+ must consistently return the same integer, provided no information
+ used in <tt>equals</tt> comparisons on the object is modified.
+ This integer need not remain consistent from one execution of an
+ application to another execution of the same application.
+ <li>If two objects are equal according to the <tt>equals(Object)</tt>
+ method, then calling the <code>hashCode</code> method on each of
+ the two objects must produce the same integer result.
+ <li>It is <em>not</em> required that if two objects are unequal
+ according to the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>
+ method, then calling the <tt>hashCode</tt> method on each of the
+ two objects must produce distinct integer results. However, the
+ programmer should be aware that producing distinct integer results
+ for unequal objects may improve the performance of hashtables.
+ </ul>
+ <p>
+ As much as is reasonably practical, the hashCode method defined by
+ class <tt>Object</tt> does return distinct integers for distinct
+ objects. (This is typically implemented by converting the internal
+ address of the object into an integer, but this implementation
+ technique is not required by the
+ Java<font size="-2"><sup>TM</sup></font> programming language.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Returns a string representation of the object. In general, the
+ <code>toString</code> method returns a string that
+ "textually represents" this object. The result should
+ be a concise but informative representation that is easy for a
+ person to read.
+ It is recommended that all subclasses override this method.
+ <p>
+ The <code>toString</code> method for class <code>Object</code>
+ returns a string consisting of the name of the class of which the
+ object is an instance, the at-sign character `<code>@</code>', and
+ the unsigned hexadecimal representation of the hash code of the
+ object. In other words, this method returns a string equal to the
+ value of:
+ <blockquote>
+ <pre>
+ getClass().getName() + '@' + Integer.toHexString(hashCode())
+ </pre></blockquote>
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a string representation of the object.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableMultimap.Builder.html b/javadoc/com/google/common/collect/ImmutableMultimap.Builder.html
new file mode 100644
index 0000000..d412f50
--- /dev/null
+++ b/javadoc/com/google/common/collect/ImmutableMultimap.Builder.html
@@ -0,0 +1,381 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+ImmutableMultimap.Builder (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImmutableMultimap.Builder (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableMultimap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableMultimap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableMultimap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ImmutableMultimap.Builder&lt;K,V&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableMultimap.Builder&lt;K,V&gt;</B>
+</PRE>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>, <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A></DD>
+</DL>
+<DL>
+<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public static class <B>ImmutableMultimap.Builder&lt;K,V&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+A builder for creating immutable multimap instances, especially
+ <code>public static final</code> multimaps ("constant multimaps"). Example:
+ <pre> <code>static final Multimap&lt;String, Integer&gt; STRING_TO_INTEGER_MULTIMAP =
+ new ImmutableMultimap.Builder&lt;String, Integer&gt;()
+ .put("one", 1)
+ .putAll("several", 1, 2, 3)
+ .putAll("many", 1, 2, 3, 4, 5)
+ .build();</code></pre>
+
+ <p>Builder instances can be reused - it is safe to call <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#build()"><CODE>build()</CODE></A>
+ multiple times to build multiple multimaps in series. Each multimap
+ contains the key-value mappings in the previously created multimaps.
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#ImmutableMultimap.Builder()">ImmutableMultimap.Builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new builder.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#build()">build</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created immutable multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a key-value mapping to the built multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#putAll(K, java.lang.Iterable)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key in the built multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#putAll(K, V...)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>...&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores an array of values with the same key in the built multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores another multimap's entries in the built multimap.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ImmutableMultimap.Builder()"><!-- --></A><H3>
+ImmutableMultimap.Builder</H3>
+<PRE>
+public <B>ImmutableMultimap.Builder</B>()</PRE>
+<DL>
+<DD>Creates a new builder. The returned builder is equivalent to the builder
+ generated by <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#builder()"><CODE>ImmutableMultimap.builder()</CODE></A>.
+<P>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
+put</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt; <B>put</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&nbsp;value)</PRE>
+<DL>
+<DD>Adds a key-value mapping to the built multimap.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="putAll(K, java.lang.Iterable)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt; <B>putAll</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;&nbsp;values)</PRE>
+<DL>
+<DD>Stores a collection of values with the same key in the built multimap.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>key</code>, <code>values</code>, or any
+ element in <code>values</code> is null. The builder is left in an invalid
+ state.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(java.lang.Object,java.lang.Object[])"><!-- --></A><A NAME="putAll(K, V...)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt; <B>putAll</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>...&nbsp;values)</PRE>
+<DL>
+<DD>Stores an array of values with the same key in the built multimap.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if the key or any value is null. The builder
+ is left in an invalid state.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(com.google.common.collect.Multimap)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt; <B>putAll</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;&nbsp;multimap)</PRE>
+<DL>
+<DD>Stores another multimap's entries in the built multimap. The generated
+ multimap's key and value orderings correspond to the iteration ordering
+ of the <code>multimap.asMap()</code> view, with new keys and values following
+ any existing keys and values.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>multimap</code> is
+ null. The builder is left in an invalid state.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="build()"><!-- --></A><H3>
+build</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt; <B>build</B>()</PRE>
+<DL>
+<DD>Returns a newly-created immutable multimap.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableMultimap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableMultimap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableMultimap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableMultimap.html b/javadoc/com/google/common/collect/ImmutableMultimap.html
new file mode 100644
index 0000000..889909f
--- /dev/null
+++ b/javadoc/com/google/common/collect/ImmutableMultimap.html
@@ -0,0 +1,1222 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+ImmutableMultimap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImmutableMultimap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ImmutableMultimap&lt;K,V&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableMultimap&lt;K,V&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DD>
+</DL>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>, <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>ImmutableMultimap&lt;K,V&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DL>
+</PRE>
+
+<P>
+An immutable <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A>. Does not permit null keys or values.
+
+ <p>Unlike <A HREF="../../../../com/google/common/collect/Multimaps.html#unmodifiableMultimap(com.google.common.collect.Multimap)"><CODE>Multimaps.unmodifiableMultimap(Multimap)</CODE></A>, which is
+ a <i>view</i> of a separate multimap which can still change, an instance of
+ <code>ImmutableMultimap</code> contains its own data and will <i>never</i>
+ change. <code>ImmutableMultimap</code> is convenient for
+ <code>public static final</code> multimaps ("constant multimaps") and also lets
+ you easily make a "defensive copy" of a multimap provided to your class by
+ a caller.
+
+ <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
+ it has no public or protected constructors. Thus, instances of this class
+ are guaranteed to be immutable.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Jared Levy</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.ImmutableMultimap">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;</B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable multimap instances, especially
+ <code>public static final</code> multimaps ("constant multimaps").</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#asMap()">asMap</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map that associates each key with its corresponding
+ values in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#builder()">builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#clear()">clear</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified key-value pair.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#containsKey(java.lang.Object)">containsKey</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains any values for the specified
+ key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified value for any
+ key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#copyOf(com.google.common.collect.Multimap)">copyOf</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the same mappings as
+ <code>multimap</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#entries()">entries</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable collection of all key-value pairs in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indicates whether some other object is "equal to" this one.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#get(K)">get</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable collection of the values for the given key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code value for the object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#isEmpty()">isEmpty</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains no key-value pairs.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#keys()">keys</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection, which may contain duplicates, of all keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#keySet()">keySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the distinct keys in this multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#of()">of</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an empty multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#of(K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing a single entry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#of(K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#of(K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#of(K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#of(K, V, K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4,
+ K&nbsp;k5,
+ V&nbsp;v5)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#putAll(K, java.lang.Iterable)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#size()">size</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of key-value pairs in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string representation of the object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#values()">values</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable collection of the values in this multimap.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="of()"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt; <B>of</B>()</PRE>
+<DL>
+<DD>Returns an empty multimap.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1)</PRE>
+<DL>
+<DD>Returns an immutable multimap containing a single entry.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2)</PRE>
+<DL>
+<DD>Returns an immutable multimap containing the given entries, in order.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3)</PRE>
+<DL>
+<DD>Returns an immutable multimap containing the given entries, in order.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V, K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4)</PRE>
+<DL>
+<DD>Returns an immutable multimap containing the given entries, in order.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V, K, V, K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4,
+ K&nbsp;k5,
+ V&nbsp;v5)</PRE>
+<DL>
+<DD>Returns an immutable multimap containing the given entries, in order.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="builder()"><!-- --></A><H3>
+builder</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;K,V&gt; <B>builder</B>()</PRE>
+<DL>
+<DD>Returns a new builder. The generated builder is equivalent to the builder
+ created by the <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableMultimap.Builder</CODE></A> constructor.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="copyOf(com.google.common.collect.Multimap)"><!-- --></A><H3>
+copyOf</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt; <B>copyOf</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</PRE>
+<DL>
+<DD>Returns an immutable multimap containing the same mappings as
+ <code>multimap</code>. The generated multimap's key and value orderings
+ correspond to the iteration ordering of the <code>multimap.asMap()</code> view.
+
+ <p><b>Note:</b> Despite what the method name suggests, if
+ <code>multimap</code> is an <code>ImmutableMultimap</code>, no copy will actually be
+ performed, and the given multimap itself will be returned.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>multimap</code> is
+ null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
+removeAll</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt; <B>removeAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the multimap unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entries to remove from the multimap
+<DT><B>Returns:</B><DD>the collection of removed values, or an empty collection if no
+ values were associated with the provided key. The collection
+ <i>may</i> be modifiable, but updating it will have no effect on the
+ multimap.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="replaceValues(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="replaceValues(K, java.lang.Iterable)"><!-- --></A><H3>
+replaceValues</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt; <B>replaceValues</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&nbsp;values)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the multimap unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
+<DT><B>Returns:</B><DD>the collection of replaced values, or an empty collection if no
+ values were previously associated with the key. The collection
+ <i>may</i> be modifiable, but updating it will have no effect on the
+ multimap.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clear()"><!-- --></A><H3>
+clear</H3>
+<PRE>
+public void <B>clear</B>()</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the multimap unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(java.lang.Object)"><!-- --></A><A NAME="get(K)"><!-- --></A><H3>
+get</H3>
+<PRE>
+public abstract <A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt; <B>get</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&nbsp;key)</PRE>
+<DL>
+<DD>Returns an immutable collection of the values for the given key. If no
+ mappings in the multimap have the provided key, an empty immutable
+ collection is returned. The values are in the same order as the parameters
+ used to build this multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap
+<DT><B>Returns:</B><DD>the collection of values that the key maps to</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
+put</H3>
+<PRE>
+public boolean <B>put</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&nbsp;value)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the multimap unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>value</CODE> - value to store in the multimap
+<DT><B>Returns:</B><DD><code>true</code> if the method increased the size of the multimap, or
+ <code>false</code> if the multimap already contained the key-value pair and
+ doesn't allow duplicates
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="putAll(K, java.lang.Iterable)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public boolean <B>putAll</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&nbsp;values)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the multimap unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
+<DT><B>Returns:</B><DD><code>true</code> if the multimap changed
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(com.google.common.collect.Multimap)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public boolean <B>putAll</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&nbsp;multimap)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the multimap unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - mappings to store in this multimap
+<DT><B>Returns:</B><DD><code>true</code> if the multimap changed
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public boolean <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the multimap unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entry to remove from the multimap<DD><CODE>value</CODE> - value of entry to remove the multimap
+<DT><B>Returns:</B><DD><code>true</code> if the multimap changed
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsEntry(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
+containsEntry</H3>
+<PRE>
+public boolean <B>containsEntry</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains the specified key-value pair.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap<DD><CODE>value</CODE> - value to search for in multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsKey(java.lang.Object)"><!-- --></A><H3>
+containsKey</H3>
+<PRE>
+public boolean <B>containsKey</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains any values for the specified
+ key.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
+containsValue</H3>
+<PRE>
+public boolean <B>containsValue</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains the specified value for any
+ key.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>value</CODE> - value to search for in multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isEmpty()"><!-- --></A><H3>
+isEmpty</H3>
+<PRE>
+public boolean <B>isEmpty</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains no key-value pairs.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="size()"><!-- --></A><H3>
+size</H3>
+<PRE>
+public int <B>size</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">Multimap</A></CODE></B></DD>
+<DD>Returns the number of key-value pairs in the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Indicates whether some other object is "equal to" this one.
+ <p>
+ The <code>equals</code> method implements an equivalence relation
+ on non-null object references:
+ <ul>
+ <li>It is <i>reflexive</i>: for any non-null reference value
+ <code>x</code>, <code>x.equals(x)</code> should return
+ <code>true</code>.
+ <li>It is <i>symmetric</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, <code>x.equals(y)</code>
+ should return <code>true</code> if and only if
+ <code>y.equals(x)</code> returns <code>true</code>.
+ <li>It is <i>transitive</i>: for any non-null reference values
+ <code>x</code>, <code>y</code>, and <code>z</code>, if
+ <code>x.equals(y)</code> returns <code>true</code> and
+ <code>y.equals(z)</code> returns <code>true</code>, then
+ <code>x.equals(z)</code> should return <code>true</code>.
+ <li>It is <i>consistent</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, multiple invocations of
+ <tt>x.equals(y)</tt> consistently return <code>true</code>
+ or consistently return <code>false</code>, provided no
+ information used in <code>equals</code> comparisons on the
+ objects is modified.
+ <li>For any non-null reference value <code>x</code>,
+ <code>x.equals(null)</code> should return <code>false</code>.
+ </ul>
+ <p>
+ The <tt>equals</tt> method for class <code>Object</code> implements
+ the most discriminating possible equivalence relation on objects;
+ that is, for any non-null reference values <code>x</code> and
+ <code>y</code>, this method returns <code>true</code> if and only
+ if <code>x</code> and <code>y</code> refer to the same object
+ (<code>x == y</code> has the value <code>true</code>).
+ <p>
+ Note that it is generally necessary to override the <tt>hashCode</tt>
+ method whenever this method is overridden, so as to maintain the
+ general contract for the <tt>hashCode</tt> method, which states
+ that equal objects must have equal hash codes.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+public int <B>hashCode</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Returns a hash code value for the object. This method is
+ supported for the benefit of hashtables such as those provided by
+ <code>java.util.Hashtable</code>.
+ <p>
+ The general contract of <code>hashCode</code> is:
+ <ul>
+ <li>Whenever it is invoked on the same object more than once during
+ an execution of a Java application, the <tt>hashCode</tt> method
+ must consistently return the same integer, provided no information
+ used in <tt>equals</tt> comparisons on the object is modified.
+ This integer need not remain consistent from one execution of an
+ application to another execution of the same application.
+ <li>If two objects are equal according to the <tt>equals(Object)</tt>
+ method, then calling the <code>hashCode</code> method on each of
+ the two objects must produce the same integer result.
+ <li>It is <em>not</em> required that if two objects are unequal
+ according to the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>
+ method, then calling the <tt>hashCode</tt> method on each of the
+ two objects must produce distinct integer results. However, the
+ programmer should be aware that producing distinct integer results
+ for unequal objects may improve the performance of hashtables.
+ </ul>
+ <p>
+ As much as is reasonably practical, the hashCode method defined by
+ class <tt>Object</tt> does return distinct integers for distinct
+ objects. (This is typically implemented by converting the internal
+ address of the object into an integer, but this implementation
+ technique is not required by the
+ Java<font size="-2"><sup>TM</sup></font> programming language.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Returns a string representation of the object. In general, the
+ <code>toString</code> method returns a string that
+ "textually represents" this object. The result should
+ be a concise but informative representation that is easy for a
+ person to read.
+ It is recommended that all subclasses override this method.
+ <p>
+ The <code>toString</code> method for class <code>Object</code>
+ returns a string consisting of the name of the class of which the
+ object is an instance, the at-sign character `<code>@</code>', and
+ the unsigned hexadecimal representation of the hash code of the
+ object. In other words, this method returns a string equal to the
+ value of:
+ <blockquote>
+ <pre>
+ getClass().getName() + '@' + Integer.toHexString(hashCode())
+ </pre></blockquote>
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a string representation of the object.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keySet()"><!-- --></A><H3>
+keySet</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&gt; <B>keySet</B>()</PRE>
+<DL>
+<DD>Returns an immutable set of the distinct keys in this multimap. These keys
+ are ordered according to when they first appeared during the construction
+ of this multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the collection of distinct keys</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="asMap()"><!-- --></A><H3>
+asMap</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&gt; <B>asMap</B>()</PRE>
+<DL>
+<DD>Returns an immutable map that associates each key with its corresponding
+ values in the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a map view from a key to its collection of values</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entries()"><!-- --></A><H3>
+entries</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&gt; <B>entries</B>()</PRE>
+<DL>
+<DD>Returns an immutable collection of all key-value pairs in the multimap. Its
+ iterator traverses the values for the first key, the values for the second
+ key, and so on.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#entries()">entries</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>collection of map entries consisting of key-value pairs</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keys()"><!-- --></A><H3>
+keys</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&gt; <B>keys</B>()</PRE>
+<DL>
+<DD>Returns a collection, which may contain duplicates, of all keys. The number
+ of times a key appears in the returned multiset equals the number of
+ mappings the key has in the multimap. Duplicate keys appear consecutively
+ in the multiset's iteration order.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a multiset with keys corresponding to the distinct keys of the
+ multimap and frequencies corresponding to the number of values that
+ each key maps to</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="values()"><!-- --></A><H3>
+values</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt; <B>values</B>()</PRE>
+<DL>
+<DD>Returns an immutable collection of the values in this multimap. Its
+ iterator traverses the values for the first key, the values for the second
+ key, and so on.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>collection of values, which may include the same value multiple
+ times if it occurs in multiple mappings</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableMultiset.Builder.html b/javadoc/com/google/common/collect/ImmutableMultiset.Builder.html
new file mode 100644
index 0000000..b2c140e
--- /dev/null
+++ b/javadoc/com/google/common/collect/ImmutableMultiset.Builder.html
@@ -0,0 +1,453 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+ImmutableMultiset.Builder (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImmutableMultiset.Builder (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableMultiset.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableMultiset.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableMultiset.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ImmutableMultiset.Builder&lt;E&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableMultiset.Builder&lt;E&gt;</B>
+</PRE>
+<DL>
+<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public static final class <B>ImmutableMultiset.Builder&lt;E&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+A builder for creating immutable multiset instances, especially
+ <code>public static final</code> multisets ("constant multisets").
+
+ <p>Example:
+ <pre> <code>public static final ImmutableMultiset&lt;Bean&gt; BEANS
+ = new ImmutableMultiset.Builder&lt;Bean&gt;()
+ .addCopies(Bean.COCOA, 4)
+ .addCopies(Bean.GARDEN, 6)
+ .addCopies(Bean.RED, 8)
+ .addCopies(Bean.BLACK_EYED, 10)
+ .build();</code></pre>
+
+ <p>Builder instances can be reused - it is safe to call <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html#build()"><CODE>build()</CODE></A>
+ multiple times to build multiple multisets in series. Each multiset
+ is a superset of the multiset created before it.
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html#ImmutableMultiset.Builder()">ImmutableMultiset.Builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new builder.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html#add(E...)">add</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>...&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html#add(E)">add</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds <code>element</code> to the <code>ImmutableMultiset</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html#addAll(java.lang.Iterable)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html#addAll(java.util.Iterator)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html#addCopies(E, int)">addCopies</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&nbsp;element,
+ int&nbsp;occurrences)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a number of occurrences of an element to this <code>ImmutableMultiset</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html#build()">build</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created <code>ImmutableMultiset</code> based on the contents
+ of the <code>Builder</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html#setCount(E, int)">setCount</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&nbsp;element,
+ int&nbsp;count)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds or removes the necessary occurrences of an element such that the
+ element attains the desired count.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ImmutableMultiset.Builder()"><!-- --></A><H3>
+ImmutableMultiset.Builder</H3>
+<PRE>
+public <B>ImmutableMultiset.Builder</B>()</PRE>
+<DL>
+<DD>Creates a new builder. The returned builder is equivalent to the builder
+ generated by <A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#builder()"><CODE>ImmutableMultiset.builder()</CODE></A>.
+<P>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="add(java.lang.Object)"><!-- --></A><A NAME="add(E)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt; <B>add</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&nbsp;element)</PRE>
+<DL>
+<DD>Adds <code>element</code> to the <code>ImmutableMultiset</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add
+<DT><B>Returns:</B><DD>this <code>Builder</code> object
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>element</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addCopies(java.lang.Object,int)"><!-- --></A><A NAME="addCopies(E, int)"><!-- --></A><H3>
+addCopies</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt; <B>addCopies</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&nbsp;element,
+ int&nbsp;occurrences)</PRE>
+<DL>
+<DD>Adds a number of occurrences of an element to this <code>ImmutableMultiset</code>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add<DD><CODE>occurrences</CODE> - the number of occurrences of the element to add. May
+ be zero, in which case no change will be made.
+<DT><B>Returns:</B><DD>this <code>Builder</code> object
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>element</code> is null
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>occurrences</code> is negative, or
+ if this operation would result in more than <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Integer.MAX_VALUE</CODE></A>
+ occurrences of the element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setCount(java.lang.Object,int)"><!-- --></A><A NAME="setCount(E, int)"><!-- --></A><H3>
+setCount</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt; <B>setCount</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&nbsp;element,
+ int&nbsp;count)</PRE>
+<DL>
+<DD>Adds or removes the necessary occurrences of an element such that the
+ element attains the desired count.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add or remove occurrences of<DD><CODE>count</CODE> - the desired count of the element in this multiset
+<DT><B>Returns:</B><DD>this <code>Builder</code> object
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>element</code> is null
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>count</code> is negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="add(java.lang.Object[])"><!-- --></A><A NAME="add(E...)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt; <B>add</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>...&nbsp;elements)</PRE>
+<DL>
+<DD>Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements to add
+<DT><B>Returns:</B><DD>this <code>Builder</code> object
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>elements</code> is null or contains a
+ null element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addAll(java.lang.Iterable)"><!-- --></A><H3>
+addAll</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt; <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the <code>Iterable</code> to add to the <code>ImmutableMultiset</code>
+<DT><B>Returns:</B><DD>this <code>Builder</code> object
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>elements</code> is null or contains a
+ null element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addAll(java.util.Iterator)"><!-- --></A><H3>
+addAll</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt; <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements to add to the <code>ImmutableMultiset</code>
+<DT><B>Returns:</B><DD>this <code>Builder</code> object
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>elements</code> is null or contains a
+ null element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="build()"><!-- --></A><H3>
+build</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt; <B>build</B>()</PRE>
+<DL>
+<DD>Returns a newly-created <code>ImmutableMultiset</code> based on the contents
+ of the <code>Builder</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableMultiset.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableMultiset.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableMultiset.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableMultiset.html b/javadoc/com/google/common/collect/ImmutableMultiset.html
new file mode 100644
index 0000000..59add00
--- /dev/null
+++ b/javadoc/com/google/common/collect/ImmutableMultiset.html
@@ -0,0 +1,943 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+ImmutableMultiset (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImmutableMultiset (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ImmutableMultiset&lt;E&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableCollection</A>&lt;E&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableMultiset&lt;E&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public class <B>ImmutableMultiset&lt;E&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;E&gt;<DT>implements <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</DL>
+</PRE>
+
+<P>
+An immutable hash-based multiset. Does not permit null elements.
+
+ <p>Its iterator orders elements according to the first appearance of the
+ element among the items passed to the factory method or builder. When the
+ multiset contains multiple instances of an element, those instances are
+ consecutive in the iteration order.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Jared Levy</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.ImmutableMultiset">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable multiset instances, especially
+ <code>public static final</code> multisets ("constant multisets").</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="nested_classes_inherited_from_class_com.google.common.collect.Multiset"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="type parameter in Multiset.Entry">E</A>&gt;</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#add(E, int)">add</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&nbsp;element,
+ int&nbsp;occurrences)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the collection unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#builder()">builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#contains(java.lang.Object)">contains</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this collection contains the specified element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#copyOf(java.lang.Iterable)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multiset containing the given elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#copyOf(java.util.Iterator)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multiset containing the given elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#count(java.lang.Object)">count</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of occurrences of an element in this multiset (the
+ <i>count</i> of the element).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#elementSet()">elementSet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of distinct elements contained in this multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#entrySet()">entrySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
+ the count of that element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indicates whether some other object is "equal to" this one.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code value for the object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#iterator()">iterator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable iterator across the elements in this collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#of()">of</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty immutable multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#of(E...)">of</A></B>(E...&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multiset containing the given elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#remove(java.lang.Object, int)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
+ int&nbsp;occurrences)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the collection unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#setCount(E, int)">setCount</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&nbsp;element,
+ int&nbsp;count)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the collection unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#setCount(E, int, int)">setCount</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&nbsp;element,
+ int&nbsp;oldCount,
+ int&nbsp;newCount)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the collection unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#size()">size</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of elements in this collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string representation of the object.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ImmutableCollection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#add(E)">add</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toArray()">toArray</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toArray(T[])">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.Multiset"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E)">add</A>, <A HREF="../../../../com/google/common/collect/Multiset.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/Multiset.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/google/common/collect/Multiset.html#retainAll(java.util.Collection)">retainAll</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Collection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="of()"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;E&gt; <B>of</B>()</PRE>
+<DL>
+<DD>Returns the empty immutable multiset.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object[])"><!-- --></A><A NAME="of(E...)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;E&gt; <B>of</B>(E...&nbsp;elements)</PRE>
+<DL>
+<DD>Returns an immutable multiset containing the given elements.
+
+ <p>The multiset is ordered by the first occurrence of each element. For
+ example, <code>ImmutableMultiset.of(2, 3, 1, 3)</code> yields a multiset with
+ elements in the order <code>2, 3, 3, 1</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="copyOf(java.lang.Iterable)"><!-- --></A><H3>
+copyOf</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;E&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Returns an immutable multiset containing the given elements.
+
+ <p>The multiset is ordered by the first occurrence of each element. For
+ example, <code>ImmutableMultiset.copyOf(Arrays.asList(2, 3, 1, 3))</code> yields
+ a multiset with elements in the order <code>2, 3, 3, 1</code>.
+
+ <p>Note that if <code>c</code> is a <code>Collection&lt;String&gt;</code>, then <code>ImmutableMultiset.copyOf(c)</code> returns an <code>ImmutableMultiset&lt;String&gt;</code>
+ containing each of the strings in <code>c</code>, while
+ <code>ImmutableMultiset.of(c)</code> returns an
+ <code>ImmutableMultiset&lt;Collection&lt;String&gt;&gt;</code> containing one element (the
+ given collection itself).
+
+ <p><b>Note:</b> Despite what the method name suggests, if <code>elements</code>
+ is an <code>ImmutableMultiset</code>, no copy will actually be performed, and
+ the given multiset itself will be returned.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="copyOf(java.util.Iterator)"><!-- --></A><H3>
+copyOf</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;E&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Returns an immutable multiset containing the given elements.
+
+ <p>The multiset is ordered by the first occurrence of each element. For
+ example,
+ <code>ImmutableMultiset.copyOf(Arrays.asList(2, 3, 1, 3).iterator())</code>
+ yields a multiset with elements in the order <code>2, 3, 3, 1</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="count(java.lang.Object)"><!-- --></A><H3>
+count</H3>
+<PRE>
+public int <B>count</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">Multiset</A></CODE></B></DD>
+<DD>Returns the number of occurrences of an element in this multiset (the
+ <i>count</i> of the element). Note that for an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>-based
+ multiset, this gives the same result as <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#frequency(java.util.Collection, java.lang.Object)" title="class or interface in java.util"><CODE>Collections.frequency(java.util.Collection<?>, java.lang.Object)</CODE></A>
+ (which would presumably perform more poorly).
+
+ <p><b>Note:</b> the utility method <A HREF="../../../../com/google/common/collect/Iterables.html#frequency(java.lang.Iterable, java.lang.Object)"><CODE>Iterables.frequency(java.lang.Iterable<?>, java.lang.Object)</CODE></A> generalizes
+ this operation; it correctly delegates to this method when dealing with a
+ multiset, but it can also accept any other iterable type.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">count</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to count occurrences of
+<DT><B>Returns:</B><DD>the number of occurrences of the element in this multiset; possibly
+ zero but never negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="iterator()"><!-- --></A><H3>
+iterator</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt; <B>iterator</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#iterator()">ImmutableCollection</A></CODE></B></DD>
+<DD>Returns an unmodifiable iterator across the elements in this collection.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#iterator()">iterator</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true#iterator()" title="class or interface in java.lang">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#iterator()">iterator</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>an <tt>Iterator</tt> over the elements in this collection</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="size()"><!-- --></A><H3>
+size</H3>
+<PRE>
+public int <B>size</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">java.util.Collection</A></CODE></B></DD>
+<DD>Returns the number of elements in this collection. If this collection
+ contains more than <tt>Integer.MAX_VALUE</tt> elements, returns
+ <tt>Integer.MAX_VALUE</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the number of elements in this collection</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="contains(java.lang.Object)"><!-- --></A><H3>
+contains</H3>
+<PRE>
+public boolean <B>contains</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">java.util.Collection</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this collection contains the specified element.
+ More formally, returns <tt>true</tt> if and only if this collection
+ contains at least one element <tt>e</tt> such that
+ <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#contains(java.lang.Object)">contains</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#contains(java.lang.Object)">contains</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - element whose presence in this collection is to be tested
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection contains the specified
+ element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="add(java.lang.Object,int)"><!-- --></A><A NAME="add(E, int)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public int <B>add</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&nbsp;element,
+ int&nbsp;occurrences)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the collection unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E, int)">add</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add occurrences of; may be <code>null</code> only
+ if explicitly allowed by the implementation<DD><CODE>occurrences</CODE> - the number of occurrences of the element to add. May be
+ zero, in which case no change will be made.
+<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object, int)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public int <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
+ int&nbsp;occurrences)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the collection unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object, int)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally remove occurrences of<DD><CODE>occurrences</CODE> - the number of occurrences of the element to remove. May
+ be zero, in which case no change will be made.
+<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setCount(java.lang.Object,int)"><!-- --></A><A NAME="setCount(E, int)"><!-- --></A><H3>
+setCount</H3>
+<PRE>
+public int <B>setCount</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&nbsp;element,
+ int&nbsp;count)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the collection unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add or remove occurrences of; may be null
+ only if explicitly allowed by the implementation<DD><CODE>count</CODE> - the desired count of the element in this multiset
+<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setCount(java.lang.Object,int,int)"><!-- --></A><A NAME="setCount(E, int, int)"><!-- --></A><H3>
+setCount</H3>
+<PRE>
+public boolean <B>setCount</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&nbsp;element,
+ int&nbsp;oldCount,
+ int&nbsp;newCount)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the collection unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally set the count of; may be null
+ only if explicitly allowed by the implementation<DD><CODE>oldCount</CODE> - the expected present count of the element in this multiset<DD><CODE>newCount</CODE> - the desired count of the element in this multiset
+<DT><B>Returns:</B><DD><code>true</code> if the condition for modification was met. This
+ implies that the multiset was indeed modified, unless
+ <code>oldCount == newCount</code>.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Indicates whether some other object is "equal to" this one.
+ <p>
+ The <code>equals</code> method implements an equivalence relation
+ on non-null object references:
+ <ul>
+ <li>It is <i>reflexive</i>: for any non-null reference value
+ <code>x</code>, <code>x.equals(x)</code> should return
+ <code>true</code>.
+ <li>It is <i>symmetric</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, <code>x.equals(y)</code>
+ should return <code>true</code> if and only if
+ <code>y.equals(x)</code> returns <code>true</code>.
+ <li>It is <i>transitive</i>: for any non-null reference values
+ <code>x</code>, <code>y</code>, and <code>z</code>, if
+ <code>x.equals(y)</code> returns <code>true</code> and
+ <code>y.equals(z)</code> returns <code>true</code>, then
+ <code>x.equals(z)</code> should return <code>true</code>.
+ <li>It is <i>consistent</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, multiple invocations of
+ <tt>x.equals(y)</tt> consistently return <code>true</code>
+ or consistently return <code>false</code>, provided no
+ information used in <code>equals</code> comparisons on the
+ objects is modified.
+ <li>For any non-null reference value <code>x</code>,
+ <code>x.equals(null)</code> should return <code>false</code>.
+ </ul>
+ <p>
+ The <tt>equals</tt> method for class <code>Object</code> implements
+ the most discriminating possible equivalence relation on objects;
+ that is, for any non-null reference values <code>x</code> and
+ <code>y</code>, this method returns <code>true</code> if and only
+ if <code>x</code> and <code>y</code> refer to the same object
+ (<code>x == y</code> has the value <code>true</code>).
+ <p>
+ Note that it is generally necessary to override the <tt>hashCode</tt>
+ method whenever this method is overridden, so as to maintain the
+ general contract for the <tt>hashCode</tt> method, which states
+ that equal objects must have equal hash codes.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+public int <B>hashCode</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Returns a hash code value for the object. This method is
+ supported for the benefit of hashtables such as those provided by
+ <code>java.util.Hashtable</code>.
+ <p>
+ The general contract of <code>hashCode</code> is:
+ <ul>
+ <li>Whenever it is invoked on the same object more than once during
+ an execution of a Java application, the <tt>hashCode</tt> method
+ must consistently return the same integer, provided no information
+ used in <tt>equals</tt> comparisons on the object is modified.
+ This integer need not remain consistent from one execution of an
+ application to another execution of the same application.
+ <li>If two objects are equal according to the <tt>equals(Object)</tt>
+ method, then calling the <code>hashCode</code> method on each of
+ the two objects must produce the same integer result.
+ <li>It is <em>not</em> required that if two objects are unequal
+ according to the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>
+ method, then calling the <tt>hashCode</tt> method on each of the
+ two objects must produce distinct integer results. However, the
+ programmer should be aware that producing distinct integer results
+ for unequal objects may improve the performance of hashtables.
+ </ul>
+ <p>
+ As much as is reasonably practical, the hashCode method defined by
+ class <tt>Object</tt> does return distinct integers for distinct
+ objects. (This is typically implemented by converting the internal
+ address of the object into an integer, but this implementation
+ technique is not required by the
+ Java<font size="-2"><sup>TM</sup></font> programming language.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Returns a string representation of the object. In general, the
+ <code>toString</code> method returns a string that
+ "textually represents" this object. The result should
+ be a concise but informative representation that is easy for a
+ person to read.
+ It is recommended that all subclasses override this method.
+ <p>
+ The <code>toString</code> method for class <code>Object</code>
+ returns a string consisting of the name of the class of which the
+ object is an instance, the at-sign character `<code>@</code>', and
+ the unsigned hexadecimal representation of the hash code of the
+ object. In other words, this method returns a string equal to the
+ value of:
+ <blockquote>
+ <pre>
+ getClass().getName() + '@' + Integer.toHexString(hashCode())
+ </pre></blockquote>
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#toString()">toString</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toString()">toString</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a string representation of the object.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="elementSet()"><!-- --></A><H3>
+elementSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt; <B>elementSet</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">Multiset</A></CODE></B></DD>
+<DD>Returns the set of distinct elements contained in this multiset. The
+ element set is backed by the same data as the multiset, so any change to
+ either is immediately reflected in the other. The order of the elements in
+ the element set is unspecified.
+
+ <p>If the element set supports any removal operations, these necessarily
+ cause <b>all</b> occurrences of the removed element(s) to be removed from
+ the multiset. Implementations are not expected to support the add
+ operations, although this is possible.
+
+ <p>A common use for the element set is to find the number of distinct
+ elements in the multiset: <code>elementSet().size()</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">elementSet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a view of the set of distinct elements in this multiset</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entrySet()"><!-- --></A><H3>
+entrySet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;&gt; <B>entrySet</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()">Multiset</A></CODE></B></DD>
+<DD>Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
+ the count of that element. This set contains exactly one entry for each
+ distinct element in the multiset (thus it always has the same size as the
+ <A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()"><CODE>Multiset.elementSet()</CODE></A>). The order of the elements in the element set is
+ unspecified.
+
+ <p>The entry set is backed by the same data as the multiset, so any change
+ to either is immediately reflected in the other. However, multiset changes
+ may or may not be reflected in any <code>Entry</code> instances already
+ retrieved from the entry set (this is implementation-dependent).
+ Furthermore, implementations are not required to support modifications to
+ the entry set at all, and the <code>Entry</code> instances themselves don't
+ even have methods for modification. See the specific implementation class
+ for more details on how its entry set handles modifications.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()">entrySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a set of entries representing the data of this multiset</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="builder()"><!-- --></A><H3>
+builder</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;E&gt; <B>builder</B>()</PRE>
+<DL>
+<DD>Returns a new builder. The generated builder is equivalent to the builder
+ created by the <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableMultiset.Builder</CODE></A> constructor.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableSet.Builder.html b/javadoc/com/google/common/collect/ImmutableSet.Builder.html
new file mode 100644
index 0000000..5c151ee
--- /dev/null
+++ b/javadoc/com/google/common/collect/ImmutableSet.Builder.html
@@ -0,0 +1,402 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+ImmutableSet.Builder (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImmutableSet.Builder (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableSet.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableSet.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSet.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ImmutableSet.Builder&lt;E&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableSet.Builder&lt;E&gt;</B>
+</PRE>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A></DD>
+</DL>
+<DL>
+<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public static class <B>ImmutableSet.Builder&lt;E&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+A builder for creating immutable set instances, especially
+ <code>public static final</code> sets ("constant sets").
+
+ <p>Example:
+ <pre><code>public static final ImmutableSet&lt;Color&gt; GOOGLE_COLORS
+ = new ImmutableSet.Builder&lt;Color&gt;()
+ .addAll(WEBSAFE_COLORS)
+ .add(new Color(0, 191, 255))
+ .build();</code></pre>
+
+ <p>Builder instances can be reused - it is safe to call <A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html#build()"><CODE>build()</CODE></A>
+ multiple times to build multiple sets in series. Each set
+ is a superset of the set created before it.
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html#ImmutableSet.Builder()">ImmutableSet.Builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new builder.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html#add(E...)">add</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>...&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableSet</code>,
+ ignoring duplicate elements (only the first duplicate element is added).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html#add(E)">add</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds <code>element</code> to the <code>ImmutableSet</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html#addAll(java.lang.Iterable)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableSet</code>,
+ ignoring duplicate elements (only the first duplicate element is added).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html#addAll(java.util.Iterator)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableSet</code>,
+ ignoring duplicate elements (only the first duplicate element is added).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html#build()">build</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created <code>ImmutableSet</code> based on the contents of
+ the <code>Builder</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ImmutableSet.Builder()"><!-- --></A><H3>
+ImmutableSet.Builder</H3>
+<PRE>
+public <B>ImmutableSet.Builder</B>()</PRE>
+<DL>
+<DD>Creates a new builder. The returned builder is equivalent to the builder
+ generated by <A HREF="../../../../com/google/common/collect/ImmutableSet.html#builder()"><CODE>ImmutableSet.builder()</CODE></A>.
+<P>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="add(java.lang.Object)"><!-- --></A><A NAME="add(E)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt; <B>add</B>(<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&nbsp;element)</PRE>
+<DL>
+<DD>Adds <code>element</code> to the <code>ImmutableSet</code>. If the <code>ImmutableSet</code> already contains <code>element</code>, then <code>add</code> has no
+ effect (only the previously added element is retained).
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add
+<DT><B>Returns:</B><DD>this <code>Builder</code> object
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>element</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="add(java.lang.Object[])"><!-- --></A><A NAME="add(E...)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt; <B>add</B>(<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>...&nbsp;elements)</PRE>
+<DL>
+<DD>Adds each element of <code>elements</code> to the <code>ImmutableSet</code>,
+ ignoring duplicate elements (only the first duplicate element is added).
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements to add
+<DT><B>Returns:</B><DD>this <code>Builder</code> object
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>elements</code> is null or contains a
+ null element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addAll(java.lang.Iterable)"><!-- --></A><H3>
+addAll</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt; <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Adds each element of <code>elements</code> to the <code>ImmutableSet</code>,
+ ignoring duplicate elements (only the first duplicate element is added).
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the <code>Iterable</code> to add to the <code>ImmutableSet</code>
+<DT><B>Returns:</B><DD>this <code>Builder</code> object
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>elements</code> is null or contains a
+ null element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addAll(java.util.Iterator)"><!-- --></A><H3>
+addAll</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt; <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Adds each element of <code>elements</code> to the <code>ImmutableSet</code>,
+ ignoring duplicate elements (only the first duplicate element is added).
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements to add to the <code>ImmutableSet</code>
+<DT><B>Returns:</B><DD>this <code>Builder</code> object
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>elements</code> is null or contains a
+ null element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="build()"><!-- --></A><H3>
+build</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt; <B>build</B>()</PRE>
+<DL>
+<DD>Returns a newly-created <code>ImmutableSet</code> based on the contents of
+ the <code>Builder</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableSet.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableSet.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSet.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableSet.html b/javadoc/com/google/common/collect/ImmutableSet.html
new file mode 100644
index 0000000..d4fe344
--- /dev/null
+++ b/javadoc/com/google/common/collect/ImmutableSet.html
@@ -0,0 +1,797 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+ImmutableSet (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImmutableSet (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableSet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableSet.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ImmutableSet&lt;E&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableCollection</A>&lt;E&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableSet&lt;E&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;</DD>
+</DL>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>ImmutableSet&lt;E&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;E&gt;<DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;</DL>
+</PRE>
+
+<P>
+A high-performance, immutable <code>Set</code> with reliable, user-specified
+ iteration order. Does not permit null elements.
+
+ <p>Unlike <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#unmodifiableSet(java.util.Set)" title="class or interface in java.util"><CODE>Collections.unmodifiableSet(java.util.Set<? extends T>)</CODE></A>, which is a <i>view</i> of a
+ separate collection that can still change, an instance of this class contains
+ its own private data and will <i>never</i> change. This class is convenient
+ for <code>public static final</code> sets ("constant sets") and also lets you
+ easily make a "defensive copy" of a set provided to your class by a caller.
+
+ <p><b>Warning:</b> Like most sets, an <code>ImmutableSet</code> will not function
+ correctly if an element is modified after being placed in the set. For this
+ reason, and to avoid general confusion, it is strongly recommended to place
+ only immutable objects into this collection.
+
+ <p>This class has been observed to perform significantly better than <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html?is-external=true" title="class or interface in java.util"><CODE>HashSet</CODE></A> for objects with very fast <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A> implementations
+ (as a well-behaved immutable object should). While this class's factory
+ methods create hash-based instances, the <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect"><CODE>ImmutableSortedSet</CODE></A> subclass
+ performs binary searches instead.
+
+ <p><b>Note</b>: Although this class is not final, it cannot be subclassed
+ outside its package as it has no public or protected constructors. Thus,
+ instances of this type are guaranteed to be immutable.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion, Nick Kralevich</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect"><CODE>ImmutableList</CODE></A>,
+<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><CODE>ImmutableMap</CODE></A>,
+<A HREF="../../../../serialized-form.html#com.google.common.collect.ImmutableSet">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;</B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable set instances, especially
+ <code>public static final</code> sets ("constant sets").</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html#builder()">builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html#copyOf(java.lang.Iterable)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html#copyOf(java.util.Iterator)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indicates whether some other object is "equal to" this one.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code value for the object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html#iterator()">iterator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable iterator across the elements in this collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html#of()">of</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty immutable set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html#of(E...)">of</A></B>(E...&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html#of(E)">of</A></B>(E&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing a single element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html#of(E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html#of(E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html#of(E, E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html#of(E, E, E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ImmutableCollection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#add(E)">add</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#contains(java.lang.Object)">contains</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toArray()">toArray</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toArray(T[])">toArray</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Set"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#add(E)" title="class or interface in java.util">add</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="of()"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt; <B>of</B>()</PRE>
+<DL>
+<DD>Returns the empty immutable set. This set behaves and performs comparably
+ to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#emptySet()" title="class or interface in java.util"><CODE>Collections.emptySet()</CODE></A>, and is preferable mainly for consistency
+ and maintainability of your code.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object)"><!-- --></A><A NAME="of(E)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt; <B>of</B>(E&nbsp;element)</PRE>
+<DL>
+<DD>Returns an immutable set containing a single element. This set behaves and
+ performs comparably to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#singleton(T)" title="class or interface in java.util"><CODE>Collections.singleton(T)</CODE></A>, but will not accept
+ a null element. It is preferable mainly for consistency and
+ maintainability of your code.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
+ E&nbsp;e2)</PRE>
+<DL>
+<DD>Returns an immutable set containing the given elements, in order. Repeated
+ occurrences of an element (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>) after the
+ first are ignored.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E, E)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3)</PRE>
+<DL>
+<DD>Returns an immutable set containing the given elements, in order. Repeated
+ occurrences of an element (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>) after the
+ first are ignored.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E, E, E)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4)</PRE>
+<DL>
+<DD>Returns an immutable set containing the given elements, in order. Repeated
+ occurrences of an element (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>) after the
+ first are ignored.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E, E, E, E)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5)</PRE>
+<DL>
+<DD>Returns an immutable set containing the given elements, in order. Repeated
+ occurrences of an element (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>) after the
+ first are ignored.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object[])"><!-- --></A><A NAME="of(E...)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt; <B>of</B>(E...&nbsp;elements)</PRE>
+<DL>
+<DD>Returns an immutable set containing the given elements, in order. Repeated
+ occurrences of an element (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>) after the
+ first are ignored (but too many of these may result in the set being
+ sized inappropriately).
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="copyOf(java.lang.Iterable)"><!-- --></A><H3>
+copyOf</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Returns an immutable set containing the given elements, in order. Repeated
+ occurrences of an element (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>) after the
+ first are ignored (but too many of these may result in the set being
+ sized inappropriately). This method iterates over <code>elements</code> at most
+ once.
+
+ <p>Note that if <code>s</code> is a <code>Set&lt;String&gt;</code>, then <code>ImmutableSet.copyOf(s)</code> returns an <code>ImmutableSet&lt;String&gt;</code> containing
+ each of the strings in <code>s</code>, while <code>ImmutableSet.of(s)</code> returns
+ a <code>ImmutableSet&lt;Set&lt;String&gt;&gt;</code> containing one element (the given set
+ itself).
+
+ <p><b>Note:</b> Despite what the method name suggests, if <code>elements</code>
+ is an <code>ImmutableSet</code> (but not an <code>ImmutableSortedSet</code>), no copy
+ will actually be performed, and the given set itself will be returned.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="copyOf(java.util.Iterator)"><!-- --></A><H3>
+copyOf</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Returns an immutable set containing the given elements, in order. Repeated
+ occurrences of an element (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>) after the
+ first are ignored.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Indicates whether some other object is "equal to" this one.
+ <p>
+ The <code>equals</code> method implements an equivalence relation
+ on non-null object references:
+ <ul>
+ <li>It is <i>reflexive</i>: for any non-null reference value
+ <code>x</code>, <code>x.equals(x)</code> should return
+ <code>true</code>.
+ <li>It is <i>symmetric</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, <code>x.equals(y)</code>
+ should return <code>true</code> if and only if
+ <code>y.equals(x)</code> returns <code>true</code>.
+ <li>It is <i>transitive</i>: for any non-null reference values
+ <code>x</code>, <code>y</code>, and <code>z</code>, if
+ <code>x.equals(y)</code> returns <code>true</code> and
+ <code>y.equals(z)</code> returns <code>true</code>, then
+ <code>x.equals(z)</code> should return <code>true</code>.
+ <li>It is <i>consistent</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, multiple invocations of
+ <tt>x.equals(y)</tt> consistently return <code>true</code>
+ or consistently return <code>false</code>, provided no
+ information used in <code>equals</code> comparisons on the
+ objects is modified.
+ <li>For any non-null reference value <code>x</code>,
+ <code>x.equals(null)</code> should return <code>false</code>.
+ </ul>
+ <p>
+ The <tt>equals</tt> method for class <code>Object</code> implements
+ the most discriminating possible equivalence relation on objects;
+ that is, for any non-null reference values <code>x</code> and
+ <code>y</code>, this method returns <code>true</code> if and only
+ if <code>x</code> and <code>y</code> refer to the same object
+ (<code>x == y</code> has the value <code>true</code>).
+ <p>
+ Note that it is generally necessary to override the <tt>hashCode</tt>
+ method whenever this method is overridden, so as to maintain the
+ general contract for the <tt>hashCode</tt> method, which states
+ that equal objects must have equal hash codes.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+public int <B>hashCode</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">java.lang.Object</A></CODE></B></DD>
+<DD>Returns a hash code value for the object. This method is
+ supported for the benefit of hashtables such as those provided by
+ <code>java.util.Hashtable</code>.
+ <p>
+ The general contract of <code>hashCode</code> is:
+ <ul>
+ <li>Whenever it is invoked on the same object more than once during
+ an execution of a Java application, the <tt>hashCode</tt> method
+ must consistently return the same integer, provided no information
+ used in <tt>equals</tt> comparisons on the object is modified.
+ This integer need not remain consistent from one execution of an
+ application to another execution of the same application.
+ <li>If two objects are equal according to the <tt>equals(Object)</tt>
+ method, then calling the <code>hashCode</code> method on each of
+ the two objects must produce the same integer result.
+ <li>It is <em>not</em> required that if two objects are unequal
+ according to the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>
+ method, then calling the <tt>hashCode</tt> method on each of the
+ two objects must produce distinct integer results. However, the
+ programmer should be aware that producing distinct integer results
+ for unequal objects may improve the performance of hashtables.
+ </ul>
+ <p>
+ As much as is reasonably practical, the hashCode method defined by
+ class <tt>Object</tt> does return distinct integers for distinct
+ objects. (This is typically implemented by converting the internal
+ address of the object into an integer, but this implementation
+ technique is not required by the
+ Java<font size="-2"><sup>TM</sup></font> programming language.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="iterator()"><!-- --></A><H3>
+iterator</H3>
+<PRE>
+public abstract <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt; <B>iterator</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#iterator()">ImmutableCollection</A></CODE></B></DD>
+<DD>Returns an unmodifiable iterator across the elements in this collection.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true#iterator()" title="class or interface in java.lang">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#iterator()">iterator</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>an <tt>Iterator</tt> over the elements in this collection</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="builder()"><!-- --></A><H3>
+builder</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;E&gt; <B>builder</B>()</PRE>
+<DL>
+<DD>Returns a new builder. The generated builder is equivalent to the builder
+ created by the <A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableSet.Builder</CODE></A> constructor.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableSet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableSet.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableSetMultimap.Builder.html b/javadoc/com/google/common/collect/ImmutableSetMultimap.Builder.html
new file mode 100644
index 0000000..c150b44
--- /dev/null
+++ b/javadoc/com/google/common/collect/ImmutableSetMultimap.Builder.html
@@ -0,0 +1,396 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+ImmutableSetMultimap.Builder (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImmutableSetMultimap.Builder (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableSetMultimap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableSetMultimap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSetMultimap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ImmutableSetMultimap.Builder&lt;K,V&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableMultimap.Builder</A>&lt;K,V&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableSetMultimap.Builder&lt;K,V&gt;</B>
+</PRE>
+<DL>
+<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public static final class <B>ImmutableSetMultimap.Builder&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;K,V&gt;</DL>
+</PRE>
+
+<P>
+A builder for creating immutable <code>SetMultimap</code> instances, especially
+ <code>public static final</code> multimaps ("constant multimaps"). Example:
+ <pre> <code>static final Multimap&lt;String, Integer&gt; STRING_TO_INTEGER_MULTIMAP =
+ new ImmutableSetMultimap.Builder&lt;String, Integer&gt;()
+ .put("one", 1)
+ .putAll("several", 1, 2, 3)
+ .putAll("many", 1, 2, 3, 4, 5)
+ .build();</code></pre>
+
+ <p>Builder instances can be reused - it is safe to call <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html#build()"><CODE>build()</CODE></A>
+ multiple times to build multiple multimaps in series. Each multimap
+ contains the key-value mappings in the previously created multimaps.
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html#ImmutableSetMultimap.Builder()">ImmutableSetMultimap.Builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new builder.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html#build()">build</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created immutable set multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a key-value mapping to the built multimap if it is not already
+ present.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html#putAll(K, java.lang.Iterable)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key in the built multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html#putAll(K, V...)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>...&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores an array of values with the same key in the built multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores another multimap's entries in the built multimap.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ImmutableSetMultimap.Builder()"><!-- --></A><H3>
+ImmutableSetMultimap.Builder</H3>
+<PRE>
+public <B>ImmutableSetMultimap.Builder</B>()</PRE>
+<DL>
+<DD>Creates a new builder. The returned builder is equivalent to the builder
+ generated by <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html#builder()"><CODE>ImmutableSetMultimap.builder()</CODE></A>.
+<P>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
+put</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt; <B>put</B>(<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&nbsp;value)</PRE>
+<DL>
+<DD>Adds a key-value mapping to the built multimap if it is not already
+ present.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#put(K, V)">put</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="putAll(K, java.lang.Iterable)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt; <B>putAll</B>(<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;&nbsp;values)</PRE>
+<DL>
+<DD>Stores a collection of values with the same key in the built multimap.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#putAll(K, java.lang.Iterable)">putAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>key</code>, <code>values</code>, or any
+ element in <code>values</code> is null. The builder is left in an invalid
+ state.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(java.lang.Object,java.lang.Object[])"><!-- --></A><A NAME="putAll(K, V...)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt; <B>putAll</B>(<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>...&nbsp;values)</PRE>
+<DL>
+<DD>Stores an array of values with the same key in the built multimap.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#putAll(K, V...)">putAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if the key or any value is null. The
+ builder is left in an invalid state.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(com.google.common.collect.Multimap)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt; <B>putAll</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;&nbsp;multimap)</PRE>
+<DL>
+<DD>Stores another multimap's entries in the built multimap. The generated
+ multimap's key and value orderings correspond to the iteration ordering
+ of the <code>multimap.asMap()</code> view, with new keys and values following
+ any existing keys and values.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#putAll(com.google.common.collect.Multimap)">putAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>multimap</code> is
+ null. The builder is left in an invalid state.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="build()"><!-- --></A><H3>
+build</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt; <B>build</B>()</PRE>
+<DL>
+<DD>Returns a newly-created immutable set multimap.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#build()">build</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableSetMultimap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableSetMultimap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSetMultimap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableSetMultimap.html b/javadoc/com/google/common/collect/ImmutableSetMultimap.html
new file mode 100644
index 0000000..ce8a4c5
--- /dev/null
+++ b/javadoc/com/google/common/collect/ImmutableSetMultimap.html
@@ -0,0 +1,706 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+ImmutableSetMultimap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImmutableSetMultimap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableSetMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableSetMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSetMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ImmutableSetMultimap&lt;K,V&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableMultimap</A>&lt;K,V&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableSetMultimap&lt;K,V&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;, <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public class <B>ImmutableSetMultimap&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;<DT>implements <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</DL>
+</PRE>
+
+<P>
+An immutable <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A> with reliable user-specified key and value
+ iteration order. Does not permit null keys or values.
+
+ <p>Unlike <A HREF="../../../../com/google/common/collect/Multimaps.html#unmodifiableSetMultimap(com.google.common.collect.SetMultimap)"><CODE>Multimaps.unmodifiableSetMultimap(SetMultimap)</CODE></A>, which is
+ a <i>view</i> of a separate multimap which can still change, an instance of
+ <code>ImmutableSetMultimap</code> contains its own data and will <i>never</i>
+ change. <code>ImmutableSetMultimap</code> is convenient for
+ <code>public static final</code> multimaps ("constant multimaps") and also lets
+ you easily make a "defensive copy" of a multimap provided to your class by
+ a caller.
+
+ <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
+ it has no public or protected constructors. Thus, instances of this class
+ are guaranteed to be immutable.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Mike Ward</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.ImmutableSetMultimap">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable <code>SetMultimap</code> instances, especially
+ <code>public static final</code> multimaps ("constant multimaps").</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html#builder()">builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableSetMultimap.Builder</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html#copyOf(com.google.common.collect.Multimap)">copyOf</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set multimap containing the same mappings as
+ <code>multimap</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html#entries()">entries</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable collection of all key-value pairs in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html#get(K)">get</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the values for the given key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html#of()">of</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html#of(K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing a single entry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html#of(K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html#of(K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html#of(K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html#of(K, V, K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4,
+ K&nbsp;k5,
+ V&nbsp;v5)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ImmutableMultimap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#asMap()">asMap</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#keys()">keys</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#putAll(K, java.lang.Iterable)">putAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#putAll(com.google.common.collect.Multimap)">putAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#remove(java.lang.Object, java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#toString()">toString</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#values()">values</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.SetMultimap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#asMap()">asMap</A>, <A HREF="../../../../com/google/common/collect/SetMultimap.html#equals(java.lang.Object)">equals</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.Multimap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="of()"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt; <B>of</B>()</PRE>
+<DL>
+<DD>Returns the empty multimap.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1)</PRE>
+<DL>
+<DD>Returns an immutable multimap containing a single entry.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2)</PRE>
+<DL>
+<DD>Returns an immutable multimap containing the given entries, in order.
+ Repeated occurrences of an entry (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>) after
+ the first are ignored.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3)</PRE>
+<DL>
+<DD>Returns an immutable multimap containing the given entries, in order.
+ Repeated occurrences of an entry (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>) after
+ the first are ignored.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V, K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4)</PRE>
+<DL>
+<DD>Returns an immutable multimap containing the given entries, in order.
+ Repeated occurrences of an entry (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>) after
+ the first are ignored.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V, K, V, K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4,
+ K&nbsp;k5,
+ V&nbsp;v5)</PRE>
+<DL>
+<DD>Returns an immutable multimap containing the given entries, in order.
+ Repeated occurrences of an entry (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>) after
+ the first are ignored.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="builder()"><!-- --></A><H3>
+builder</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;K,V&gt; <B>builder</B>()</PRE>
+<DL>
+<DD>Returns a new <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableSetMultimap.Builder</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="copyOf(com.google.common.collect.Multimap)"><!-- --></A><H3>
+copyOf</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt; <B>copyOf</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</PRE>
+<DL>
+<DD>Returns an immutable set multimap containing the same mappings as
+ <code>multimap</code>. The generated multimap's key and value orderings
+ correspond to the iteration ordering of the <code>multimap.asMap()</code> view.
+ Repeated occurrences of an entry in the multimap after the first are
+ ignored.
+
+ <p><b>Note:</b> Despite what the method name suggests, if
+ <code>multimap</code> is an <code>ImmutableSetMultimap</code>, no copy will actually
+ be performed, and the given multimap itself will be returned.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>multimap</code> is
+ null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(java.lang.Object)"><!-- --></A><A NAME="get(K)"><!-- --></A><H3>
+get</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt; <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>&nbsp;key)</PRE>
+<DL>
+<DD>Returns an immutable set of the values for the given key. If no mappings
+ in the multimap have the provided key, an empty immutable set is returned.
+ The values are in the same order as the parameters used to build this
+ multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#get(K)">get</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap
+<DT><B>Returns:</B><DD>the collection of values that the key maps to</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
+removeAll</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt; <B>removeAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the multimap unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entries to remove from the multimap
+<DT><B>Returns:</B><DD>the collection of removed values, or an empty collection if no
+ values were associated with the provided key. The collection
+ <i>may</i> be modifiable, but updating it will have no effect on the
+ multimap.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="replaceValues(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="replaceValues(K, java.lang.Iterable)"><!-- --></A><H3>
+replaceValues</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt; <B>replaceValues</B>(<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;&nbsp;values)</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the multimap unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
+<DT><B>Returns:</B><DD>the collection of replaced values, or an empty collection if no
+ values were previously associated with the key. The collection
+ <i>may</i> be modifiable, but updating it will have no effect on the
+ multimap.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entries()"><!-- --></A><H3>
+entries</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;&gt; <B>entries</B>()</PRE>
+<DL>
+<DD>Returns an immutable collection of all key-value pairs in the multimap.
+ Its iterator traverses the values for the first key, the values for the
+ second key, and so on.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#entries()">entries</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#entries()">entries</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#entries()">entries</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>collection of map entries consisting of key-value pairs</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableSetMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableSetMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSetMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableSortedMap.Builder.html b/javadoc/com/google/common/collect/ImmutableSortedMap.Builder.html
new file mode 100644
index 0000000..0604e55
--- /dev/null
+++ b/javadoc/com/google/common/collect/ImmutableSortedMap.Builder.html
@@ -0,0 +1,339 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+ImmutableSortedMap.Builder (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImmutableSortedMap.Builder (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableSortedMap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableSortedMap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSortedMap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ImmutableSortedMap.Builder&lt;K,V&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableMap.Builder</A>&lt;K,V&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableSortedMap.Builder&lt;K,V&gt;</B>
+</PRE>
+<DL>
+<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public static final class <B>ImmutableSortedMap.Builder&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;K,V&gt;</DL>
+</PRE>
+
+<P>
+A builder for creating immutable sorted map instances, especially <code>public static final</code> maps ("constant maps"). Example: <pre> <code>static final ImmutableSortedMap&lt;Integer, String&gt; INT_TO_WORD =
+ new ImmutableSortedMap.Builder&lt;Integer, String&gt;(Ordering.natural())
+ .put(1, "one")
+ .put(2, "two")
+ .put(3, "three")
+ .build();</code></pre>
+
+ For <i>small</i> immutable sorted maps, the <code>ImmutableSortedMap.of()</code>
+ methods are even more convenient.
+
+ <p>Builder instances can be reused - it is safe to call <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html#build()"><CODE>build()</CODE></A>
+ multiple times to build multiple maps in series. Each map is a superset of
+ the maps created before it.
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html#ImmutableSortedMap.Builder(java.util.Comparator)">ImmutableSortedMap.Builder</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>&gt;&nbsp;comparator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new builder.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html#build()">build</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created immutable sorted map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates <code>key</code> with <code>value</code> in the built map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates all of the given map's keys and values in the built map.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ImmutableSortedMap.Builder(java.util.Comparator)"><!-- --></A><H3>
+ImmutableSortedMap.Builder</H3>
+<PRE>
+public <B>ImmutableSortedMap.Builder</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>&gt;&nbsp;comparator)</PRE>
+<DL>
+<DD>Creates a new builder. The returned builder is equivalent to the builder
+ generated by <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#orderedBy(java.util.Comparator)"><CODE>ImmutableSortedMap.orderedBy(java.util.Comparator<K>)</CODE></A>.
+<P>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
+put</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt; <B>put</B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&nbsp;value)</PRE>
+<DL>
+<DD>Associates <code>key</code> with <code>value</code> in the built map. Duplicate
+ keys, according to the comparator (which might be the keys' natural
+ order), are not allowed, and will cause <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html#build()"><CODE>build()</CODE></A> to fail.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html#put(K, V)">put</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(java.util.Map)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt; <B>putAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt;&nbsp;map)</PRE>
+<DL>
+<DD>Associates all of the given map's keys and values in the built map.
+ Duplicate keys, according to the comparator (which might be the keys'
+ natural order), are not allowed, and will cause <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html#build()"><CODE>build()</CODE></A> to fail.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html#putAll(java.util.Map)">putAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>map</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="build()"><!-- --></A><H3>
+build</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt; <B>build</B>()</PRE>
+<DL>
+<DD>Returns a newly-created immutable sorted map.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html#build()">build</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if any two keys are equal according to
+ the comparator (which might be the keys' natural order)</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableSortedMap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableSortedMap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSortedMap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableSortedMap.html b/javadoc/com/google/common/collect/ImmutableSortedMap.html
new file mode 100644
index 0000000..7276281
--- /dev/null
+++ b/javadoc/com/google/common/collect/ImmutableSortedMap.html
@@ -0,0 +1,1178 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+ImmutableSortedMap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImmutableSortedMap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableSortedMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableSortedMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSortedMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ImmutableSortedMap&lt;K,V&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableMap</A>&lt;K,V&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableSortedMap&lt;K,V&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;K,V&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public class <B>ImmutableSortedMap&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;<DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;K,V&gt;</DL>
+</PRE>
+
+<P>
+An immutable <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util"><CODE>SortedMap</CODE></A>. Does not permit null keys or values.
+
+ <p>Unlike <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#unmodifiableSortedMap(java.util.SortedMap)" title="class or interface in java.util"><CODE>Collections.unmodifiableSortedMap(java.util.SortedMap<K, ? extends V>)</CODE></A>, which is a <i>view</i>
+ of a separate map which can still change, an instance of <code>ImmutableSortedMap</code> contains its own data and will <i>never</i> change.
+ <code>ImmutableSortedMap</code> is convenient for <code>public static final</code> maps
+ ("constant maps") and also lets you easily make a "defensive copy" of a map
+ provided to your class by a caller.
+
+ <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
+ it has no public or protected constructors. Thus, instances of this class are
+ guaranteed to be immutable.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Jared Levy</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.ImmutableSortedMap">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt;</B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable sorted map instances, especially <code>public static final</code> maps ("constant maps").</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">V</A>&gt;</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#builder()">builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Use <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#naturalOrder()"><CODE>naturalOrder()</CODE></A>, which offers
+ better type-safety.</I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#comparator()">comparator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the comparator that orders the keys, which is
+ <A HREF="../../../../com/google/common/collect/Ordering.html#natural()"><CODE>Ordering.natural()</CODE></A> when the natural ordering of the keys is used.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this map maps one or more keys to the
+ specified value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#copyOf(java.util.Map)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the same entries as <code>map</code>, sorted
+ by the natural ordering of the keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#copyOf(java.util.Map, java.util.Comparator)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super K&gt;&nbsp;comparator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the same entries as <code>map</code>, with
+ keys sorted by the provided comparator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#copyOfSorted(java.util.SortedMap)">copyOfSorted</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;K,? extends V&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the same entries as the provided sorted
+ map, with the same ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#entrySet()">entrySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the mappings in this map, sorted by the key
+ ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#firstKey()">firstKey</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the first (lowest) key currently in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#get(java.lang.Object)">get</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value to which the specified key is mapped,
+ or <code>null</code> if this map contains no mapping for the key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#headMap(K)">headMap</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&nbsp;toKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method returns a <code>ImmutableSortedMap</code>, consisting of the entries
+ whose keys are less than <code>toKey</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#keySet()">keySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set of the keys in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#lastKey()">lastKey</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the last (highest) key currently in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;K&gt;,V&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#naturalOrder()">naturalOrder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a builder that creates immutable sorted maps whose keys are
+ ordered by their natural ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#of()">of</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty sorted map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#of(K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing a single entry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#of(K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted map containing the given entries, sorted by the
+ natural ordering of their keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#of(K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted map containing the given entries, sorted by the
+ natural ordering of their keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#of(K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted map containing the given entries, sorted by the
+ natural ordering of their keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#of(K, V, K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4,
+ K&nbsp;k5,
+ V&nbsp;v5)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted map containing the given entries, sorted by the
+ natural ordering of their keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#orderedBy(java.util.Comparator)">orderedBy</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;K&gt;&nbsp;comparator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a builder that creates immutable sorted maps with an explicit
+ comparator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;K&gt;,V&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#reverseOrder()">reverseOrder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a builder that creates immutable sorted maps whose keys are
+ ordered by the reverse of their natural ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#size()">size</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of key-value mappings in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#subMap(K, K)">subMap</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&nbsp;fromKey,
+ <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&nbsp;toKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method returns a <code>ImmutableSortedMap</code>, consisting of the entries
+ whose keys ranges from <code>fromKey</code>, inclusive, to <code>toKey</code>,
+ exclusive.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#tailMap(K)">tailMap</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&nbsp;fromKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method returns a <code>ImmutableSortedMap</code>, consisting of the entries
+ whose keys are greater than or equals to <code>fromKey</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#values()">values</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable collection of the values in this map, sorted by the
+ ordering of the corresponding keys.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ImmutableMap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ImmutableMap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/ImmutableMap.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/google/common/collect/ImmutableMap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/ImmutableMap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ImmutableMap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/ImmutableMap.html#putAll(java.util.Map)">putAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableMap.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ImmutableMap.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">put</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="of()"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt; <B>of</B>()</PRE>
+<DL>
+<DD>Returns the empty sorted map.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Comparable,java.lang.Object)"><!-- --></A><A NAME="of(K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1)</PRE>
+<DL>
+<DD>Returns an immutable map containing a single entry.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Comparable,java.lang.Object,java.lang.Comparable,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2)</PRE>
+<DL>
+<DD>Returns an immutable sorted map containing the given entries, sorted by the
+ natural ordering of their keys.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the two keys are equal according to
+ their natural ordering</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Comparable,java.lang.Object,java.lang.Comparable,java.lang.Object,java.lang.Comparable,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3)</PRE>
+<DL>
+<DD>Returns an immutable sorted map containing the given entries, sorted by the
+ natural ordering of their keys.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if any two keys are equal according to
+ their natural ordering</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Comparable,java.lang.Object,java.lang.Comparable,java.lang.Object,java.lang.Comparable,java.lang.Object,java.lang.Comparable,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V, K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4)</PRE>
+<DL>
+<DD>Returns an immutable sorted map containing the given entries, sorted by the
+ natural ordering of their keys.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if any two keys are equal according to
+ their natural ordering</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Comparable,java.lang.Object,java.lang.Comparable,java.lang.Object,java.lang.Comparable,java.lang.Object,java.lang.Comparable,java.lang.Object,java.lang.Comparable,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V, K, V, K, V)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4,
+ K&nbsp;k5,
+ V&nbsp;v5)</PRE>
+<DL>
+<DD>Returns an immutable sorted map containing the given entries, sorted by the
+ natural ordering of their keys.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if any two keys are equal according to
+ their natural ordering</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="copyOf(java.util.Map)"><!-- --></A><H3>
+copyOf</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</PRE>
+<DL>
+<DD>Returns an immutable map containing the same entries as <code>map</code>, sorted
+ by the natural ordering of the keys.
+
+ <p><b>Note:</b> Despite what the method name suggests, if <code>map</code> is an
+ <code>ImmutableSortedMap</code>, it may be returned instead of a copy.
+
+ <p>This method is not type-safe, as it may be called on a map with keys
+ that are not mutually comparable.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang">ClassCastException</A></CODE> - if the keys in <code>map</code> are not mutually
+ comparable
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>map</code> is null
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if any two keys are equal according to
+ their natural ordering</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="copyOf(java.util.Map, java.util.Comparator)"><!-- --></A><H3>
+copyOf</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super K&gt;&nbsp;comparator)</PRE>
+<DL>
+<DD>Returns an immutable map containing the same entries as <code>map</code>, with
+ keys sorted by the provided comparator.
+
+ <p><b>Note:</b> Despite what the method name suggests, if <code>map</code> is an
+ <code>ImmutableSortedMap</code>, it may be returned instead of a copy.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>map</code> is null
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if any two keys are equal according to
+ the comparator</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="copyOfSorted(java.util.SortedMap)"><!-- --></A><H3>
+copyOfSorted</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt; <B>copyOfSorted</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;K,? extends V&gt;&nbsp;map)</PRE>
+<DL>
+<DD>Returns an immutable map containing the same entries as the provided sorted
+ map, with the same ordering.
+
+ <p><b>Note:</b> Despite what the method name suggests, if <code>map</code> is an
+ <code>ImmutableSortedMap</code>, it may be returned instead of a copy.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>map</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="naturalOrder()"><!-- --></A><H3>
+naturalOrder</H3>
+<PRE>
+public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;K&gt;,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;K,V&gt; <B>naturalOrder</B>()</PRE>
+<DL>
+<DD>Returns a builder that creates immutable sorted maps whose keys are
+ ordered by their natural ordering. The sorted maps use <A HREF="../../../../com/google/common/collect/Ordering.html#natural()"><CODE>Ordering.natural()</CODE></A> as the comparator.
+
+ <p>Note: the type parameter <code>K</code> extends <code>Comparable&lt;K&gt;</code> rather
+ than <code>Comparable&lt;? super K&gt;</code> as a workaround for javac <a
+ href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6468354">bug
+ 6468354</a>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="orderedBy(java.util.Comparator)"><!-- --></A><H3>
+orderedBy</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;K,V&gt; <B>orderedBy</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;K&gt;&nbsp;comparator)</PRE>
+<DL>
+<DD>Returns a builder that creates immutable sorted maps with an explicit
+ comparator. If the comparator has a more general type than the map's keys,
+ such as creating a <code>SortedMap&lt;Integer, String&gt;</code> with a <code>Comparator&lt;Number&gt;</code>, use the <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableSortedMap.Builder</CODE></A> constructor instead.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>comparator</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="reverseOrder()"><!-- --></A><H3>
+reverseOrder</H3>
+<PRE>
+public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;K&gt;,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;K,V&gt; <B>reverseOrder</B>()</PRE>
+<DL>
+<DD>Returns a builder that creates immutable sorted maps whose keys are
+ ordered by the reverse of their natural ordering.
+
+ <p>Note: the type parameter <code>K</code> extends <code>Comparable&lt;K&gt;</code> rather
+ than <code>Comparable&lt;? super K&gt;</code> as a workaround for javac <a
+ href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6468354">bug
+ 6468354</a>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="size()"><!-- --></A><H3>
+size</H3>
+<PRE>
+public int <B>size</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns the number of key-value mappings in this map. If the
+ map contains more than <tt>Integer.MAX_VALUE</tt> elements, returns
+ <tt>Integer.MAX_VALUE</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the number of key-value mappings in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(java.lang.Object)"><!-- --></A><H3>
+get</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A> <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns the value to which the specified key is mapped,
+ or <code>null</code> if this map contains no mapping for the key.
+
+ <p>More formally, if this map contains a mapping from a key
+ <code>k</code> to a value <code>v</code> such that <code>(key==null ? k==null :
+ key.equals(k))</code>, then this method returns <code>v</code>; otherwise
+ it returns <code>null</code>. (There can be at most one such mapping.)
+
+ <p>If this map permits null values, then a return value of
+ <code>null</code> does not <i>necessarily</i> indicate that the map
+ contains no mapping for the key; it's also possible that the map
+ explicitly maps the key to <code>null</code>. The <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util"><CODE>containsKey</CODE></A> operation may be used to distinguish these two cases.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#get(java.lang.Object)">get</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - the key whose associated value is to be returned
+<DT><B>Returns:</B><DD>the value to which the specified key is mapped, or
+ <code>null</code> if this map contains no mapping for the key</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
+containsValue</H3>
+<PRE>
+public boolean <B>containsValue</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this map maps one or more keys to the
+ specified value. More formally, returns <tt>true</tt> if and only if
+ this map contains at least one mapping to a value <tt>v</tt> such that
+ <tt>(value==null ? v==null : value.equals(v))</tt>. This operation
+ will probably require time linear in the map size for most
+ implementations of the <tt>Map</tt> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#containsValue(java.lang.Object)">containsValue</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>value</CODE> - value whose presence in this map is to be tested
+<DT><B>Returns:</B><DD><tt>true</tt> if this map maps one or more keys to the
+ specified value</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entrySet()"><!-- --></A><H3>
+entrySet</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;&gt; <B>entrySet</B>()</PRE>
+<DL>
+<DD>Returns an immutable set of the mappings in this map, sorted by the key
+ ordering.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#entrySet()">entrySet</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a set view of the mappings contained in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keySet()"><!-- --></A><H3>
+keySet</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&gt; <B>keySet</B>()</PRE>
+<DL>
+<DD>Returns an immutable sorted set of the keys in this map.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#keySet()">keySet</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a set view of the keys contained in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="values()"><!-- --></A><H3>
+values</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt; <B>values</B>()</PRE>
+<DL>
+<DD>Returns an immutable collection of the values in this map, sorted by the
+ ordering of the corresponding keys.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#values()">values</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a collection view of the values contained in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="comparator()"><!-- --></A><H3>
+comparator</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&gt; <B>comparator</B>()</PRE>
+<DL>
+<DD>Returns the comparator that orders the keys, which is
+ <A HREF="../../../../com/google/common/collect/Ordering.html#natural()"><CODE>Ordering.natural()</CODE></A> when the natural ordering of the keys is used.
+ Note that its behavior is not consistent with <A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#comparator()" title="class or interface in java.util"><CODE>TreeMap.comparator()</CODE></A>,
+ which returns <code>null</code> to indicate natural ordering.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#comparator()" title="class or interface in java.util">comparator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the comparator used to order the keys in this map,
+ or <tt>null</tt> if this map uses the natural ordering
+ of its keys</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="firstKey()"><!-- --></A><H3>
+firstKey</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A> <B>firstKey</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#firstKey()" title="class or interface in java.util">java.util.SortedMap</A></CODE></B></DD>
+<DD>Returns the first (lowest) key currently in this map.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#firstKey()" title="class or interface in java.util">firstKey</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the first (lowest) key currently in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="lastKey()"><!-- --></A><H3>
+lastKey</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A> <B>lastKey</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#lastKey()" title="class or interface in java.util">java.util.SortedMap</A></CODE></B></DD>
+<DD>Returns the last (highest) key currently in this map.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#lastKey()" title="class or interface in java.util">lastKey</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the last (highest) key currently in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="headMap(java.lang.Object)"><!-- --></A><A NAME="headMap(K)"><!-- --></A><H3>
+headMap</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt; <B>headMap</B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&nbsp;toKey)</PRE>
+<DL>
+<DD>This method returns a <code>ImmutableSortedMap</code>, consisting of the entries
+ whose keys are less than <code>toKey</code>.
+
+ <p>The <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#headMap(K)" title="class or interface in java.util"><CODE>SortedMap.headMap(K)</CODE></A> documentation states that a submap of a
+ submap throws an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> if passed a <code>toKey</code>
+ greater than an earlier <code>toKey</code>. However, this method doesn't throw
+ an exception in that situation, but instead keeps the original <code>toKey</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#headMap(K)" title="class or interface in java.util">headMap</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>toKey</CODE> - high endpoint (exclusive) of the keys in the returned map
+<DT><B>Returns:</B><DD>a view of the portion of this map whose keys are strictly
+ less than <tt>toKey</tt></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="subMap(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="subMap(K, K)"><!-- --></A><H3>
+subMap</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt; <B>subMap</B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&nbsp;fromKey,
+ <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&nbsp;toKey)</PRE>
+<DL>
+<DD>This method returns a <code>ImmutableSortedMap</code>, consisting of the entries
+ whose keys ranges from <code>fromKey</code>, inclusive, to <code>toKey</code>,
+ exclusive.
+
+ <p>The <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#subMap(K, K)" title="class or interface in java.util"><CODE>SortedMap.subMap(K, K)</CODE></A> documentation states that a submap of a
+ submap throws an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> if passed a <code>fromKey</code> less than an earlier <code>fromKey</code>. However, this method doesn't
+ throw an exception in that situation, but instead keeps the original <code>fromKey</code>. Similarly, this method keeps the original <code>toKey</code>, instead
+ of throwing an exception, if passed a <code>toKey</code> greater than an earlier
+ <code>toKey</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#subMap(K, K)" title="class or interface in java.util">subMap</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fromKey</CODE> - low endpoint (inclusive) of the keys in the returned map<DD><CODE>toKey</CODE> - high endpoint (exclusive) of the keys in the returned map
+<DT><B>Returns:</B><DD>a view of the portion of this map whose keys range from
+ <tt>fromKey</tt>, inclusive, to <tt>toKey</tt>, exclusive</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="tailMap(java.lang.Object)"><!-- --></A><A NAME="tailMap(K)"><!-- --></A><H3>
+tailMap</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt; <B>tailMap</B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&nbsp;fromKey)</PRE>
+<DL>
+<DD>This method returns a <code>ImmutableSortedMap</code>, consisting of the entries
+ whose keys are greater than or equals to <code>fromKey</code>.
+
+ <p>The <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#tailMap(K)" title="class or interface in java.util"><CODE>SortedMap.tailMap(K)</CODE></A> documentation states that a submap of a
+ submap throws an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> if passed a <code>fromKey</code> less than an earlier <code>fromKey</code>. However, this method doesn't
+ throw an exception in that situation, but instead keeps the original <code>fromKey</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#tailMap(K)" title="class or interface in java.util">tailMap</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fromKey</CODE> - low endpoint (inclusive) of the keys in the returned map
+<DT><B>Returns:</B><DD>a view of the portion of this map whose keys are greater
+ than or equal to <tt>fromKey</tt></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="builder()"><!-- --></A><H3>
+builder</H3>
+<PRE>
+<FONT SIZE="-1"><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</A>
+</FONT>public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;K,V&gt; <B>builder</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>Use <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#naturalOrder()"><CODE>naturalOrder()</CODE></A>, which offers
+ better type-safety.</I>
+<P>
+<DD>Not supported. Use <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#naturalOrder()"><CODE>naturalOrder()</CODE></A>, which offers
+ better type-safety, instead. This method exists only to hide
+ <A HREF="../../../../com/google/common/collect/ImmutableMap.html#builder()"><CODE>ImmutableMap.builder()</CODE></A> from consumers of <code>ImmutableSortedMap</code>.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableSortedMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableSortedMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSortedMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableSortedSet.Builder.html b/javadoc/com/google/common/collect/ImmutableSortedSet.Builder.html
new file mode 100644
index 0000000..d0e4e50
--- /dev/null
+++ b/javadoc/com/google/common/collect/ImmutableSortedSet.Builder.html
@@ -0,0 +1,400 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+ImmutableSortedSet.Builder (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImmutableSortedSet.Builder (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableSortedSet.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/Iterables.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableSortedSet.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSortedSet.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ImmutableSortedSet.Builder&lt;E&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableSet.Builder</A>&lt;E&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableSortedSet.Builder&lt;E&gt;</B>
+</PRE>
+<DL>
+<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public static final class <B>ImmutableSortedSet.Builder&lt;E&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;E&gt;</DL>
+</PRE>
+
+<P>
+A builder for creating immutable sorted set instances, especially
+ <code>public static final</code> sets ("constant sets"), with a given
+ comparator.
+
+ <p>Example:
+ <pre><code>public static final ImmutableSortedSet&lt;Number&gt; LUCKY_NUMBERS
+ = new ImmutableSortedSet.Builder&lt;Number&gt;(ODDS_FIRST_COMPARATOR)
+ .addAll(SINGLE_DIGIT_PRIMES)
+ .add(42)
+ .build();</code></pre>
+
+ <p>Builder instances can be reused - it is safe to call <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html#build()"><CODE>build()</CODE></A>
+ multiple times to build multiple sets in series. Each set
+ is a superset of the set created before it.
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html#ImmutableSortedSet.Builder(java.util.Comparator)">ImmutableSortedSet.Builder</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;&nbsp;comparator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new builder.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html#add(E...)">add</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>...&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableSortedSet</code>,
+ ignoring duplicate elements (only the first duplicate element is added).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html#add(E)">add</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds <code>element</code> to the <code>ImmutableSortedSet</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html#addAll(java.lang.Iterable)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableSortedSet</code>,
+ ignoring duplicate elements (only the first duplicate element is added).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html#addAll(java.util.Iterator)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableSortedSet</code>,
+ ignoring duplicate elements (only the first duplicate element is added).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html#build()">build</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created <code>ImmutableSortedSet</code> based on the contents
+ of the <code>Builder</code> and its comparator.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ImmutableSortedSet.Builder(java.util.Comparator)"><!-- --></A><H3>
+ImmutableSortedSet.Builder</H3>
+<PRE>
+public <B>ImmutableSortedSet.Builder</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;&nbsp;comparator)</PRE>
+<DL>
+<DD>Creates a new builder. The returned builder is equivalent to the builder
+ generated by <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#orderedBy(java.util.Comparator)"><CODE>ImmutableSortedSet.orderedBy(java.util.Comparator<E>)</CODE></A>.
+<P>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="add(java.lang.Object)"><!-- --></A><A NAME="add(E)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt; <B>add</B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&nbsp;element)</PRE>
+<DL>
+<DD>Adds <code>element</code> to the <code>ImmutableSortedSet</code>. If the
+ <code>ImmutableSortedSet</code> already contains <code>element</code>, then
+ <code>add</code> has no effect. (only the previously added element
+ is retained).
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html#add(E)">add</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add
+<DT><B>Returns:</B><DD>this <code>Builder</code> object
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>element</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="add(java.lang.Object[])"><!-- --></A><A NAME="add(E...)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt; <B>add</B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>...&nbsp;elements)</PRE>
+<DL>
+<DD>Adds each element of <code>elements</code> to the <code>ImmutableSortedSet</code>,
+ ignoring duplicate elements (only the first duplicate element is added).
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html#add(E...)">add</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements to add
+<DT><B>Returns:</B><DD>this <code>Builder</code> object
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>elements</code> contains a null element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addAll(java.lang.Iterable)"><!-- --></A><H3>
+addAll</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt; <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Adds each element of <code>elements</code> to the <code>ImmutableSortedSet</code>,
+ ignoring duplicate elements (only the first duplicate element is added).
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html#addAll(java.lang.Iterable)">addAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements to add to the <code>ImmutableSortedSet</code>
+<DT><B>Returns:</B><DD>this <code>Builder</code> object
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>elements</code> contains a null element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addAll(java.util.Iterator)"><!-- --></A><H3>
+addAll</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt; <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Adds each element of <code>elements</code> to the <code>ImmutableSortedSet</code>,
+ ignoring duplicate elements (only the first duplicate element is added).
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html#addAll(java.util.Iterator)">addAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements to add to the <code>ImmutableSortedSet</code>
+<DT><B>Returns:</B><DD>this <code>Builder</code> object
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>elements</code> contains a null element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="build()"><!-- --></A><H3>
+build</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt; <B>build</B>()</PRE>
+<DL>
+<DD>Returns a newly-created <code>ImmutableSortedSet</code> based on the contents
+ of the <code>Builder</code> and its comparator.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html#build()">build</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableSortedSet.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/Iterables.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableSortedSet.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSortedSet.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableSortedSet.html b/javadoc/com/google/common/collect/ImmutableSortedSet.html
new file mode 100644
index 0000000..83a5e97
--- /dev/null
+++ b/javadoc/com/google/common/collect/ImmutableSortedSet.html
@@ -0,0 +1,1116 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+ImmutableSortedSet (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImmutableSortedSet (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableSortedSet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableSortedSet.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSortedSet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ImmutableSortedSet&lt;E&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableCollection</A>&lt;E&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableSet</A>&lt;E&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableSortedSet&lt;E&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;E&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>ImmutableSortedSet&lt;E&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;<DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;E&gt;</DL>
+</PRE>
+
+<P>
+An immutable <code>SortedSet</code> that stores its elements in a sorted array.
+ Some instances are ordered by an explicit comparator, while others follow the
+ natural sort ordering of their elements. Either way, null elements are not
+ supported.
+
+ <p>Unlike <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#unmodifiableSortedSet(java.util.SortedSet)" title="class or interface in java.util"><CODE>Collections.unmodifiableSortedSet(java.util.SortedSet<T>)</CODE></A>, which is a <i>view</i>
+ of a separate collection that can still change, an instance of <code>ImmutableSortedSet</code> contains its own private data and will <i>never</i>
+ change. This class is convenient for <code>public static final</code> sets
+ ("constant sets") and also lets you easily make a "defensive copy" of a set
+ provided to your class by a caller.
+
+ <p>The sets returned by <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#headSet(E)"><CODE>headSet(E)</CODE></A>, <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#tailSet(E)"><CODE>tailSet(E)</CODE></A>, and
+ <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#subSet(E, E)"><CODE>subSet(E, E)</CODE></A> methods share the same array as the original set, preventing
+ that array from being garbage collected. If this is a concern, the data may
+ be copied into a correctly-sized array by calling <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#copyOfSorted(java.util.SortedSet)"><CODE>copyOfSorted(java.util.SortedSet<E>)</CODE></A>.
+
+ <p><b>Note on element equivalence:</b> The <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#contains(java.lang.Object)"><CODE>ImmutableCollection.contains(Object)</CODE></A>,
+ <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#containsAll(java.util.Collection)"><CODE>ImmutableCollection.containsAll(Collection)</CODE></A>, and <A HREF="../../../../com/google/common/collect/ImmutableSet.html#equals(java.lang.Object)"><CODE>ImmutableSet.equals(Object)</CODE></A>
+ implementations must check whether a provided object is equivalent to an
+ element in the collection. Unlike most collections, an
+ <code>ImmutableSortedSet</code> doesn't use <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A> to determine if
+ two elements are equivalent. Instead, with an explicit comparator, the
+ following relation determines whether elements <code>x</code> and <code>y</code> are
+ equivalent: <pre> <code>{(x, y) | comparator.compare(x, y) == 0}</code></pre>
+
+ With natural ordering of elements, the following relation determines whether
+ two elements are equivalent: <pre> <code>{(x, y) | x.compareTo(y) == 0}</code></pre>
+
+ <b>Warning:</b> Like most sets, an <code>ImmutableSortedSet</code> will not
+ function correctly if an element is modified after being placed in the set.
+ For this reason, and to avoid general confusion, it is strongly recommended
+ to place only immutable objects into this collection.
+
+ <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
+ it has no public or protected constructors. Thus, instances of this type are
+ guaranteed to be immutable.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Jared Levy</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect"><CODE>ImmutableSet</CODE></A>,
+<A HREF="../../../../serialized-form.html#com.google.common.collect.ImmutableSortedSet">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable sorted set instances, especially
+ <code>public static final</code> sets ("constant sets"), with a given
+ comparator.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#builder()">builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Use <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#naturalOrder()"><CODE>naturalOrder()</CODE></A>, which offers
+ better type-safety.</I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#comparator()">comparator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the comparator that orders the elements, which is
+ <A HREF="../../../../com/google/common/collect/Ordering.html#natural()"><CODE>Ordering.natural()</CODE></A> when the natural ordering of the
+ elements is used.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#copyOf(java.util.Comparator, java.lang.Iterable)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super E&gt;&nbsp;comparator,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
+ the given <code>Comparator</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#copyOf(java.util.Comparator, java.util.Iterator)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super E&gt;&nbsp;comparator,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
+ the given <code>Comparator</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#copyOf(java.lang.Iterable)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#copyOf(java.util.Iterator)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#copyOfSorted(java.util.SortedSet)">copyOfSorted</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;E&gt;&nbsp;sortedSet)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the elements of a sorted set,
+ sorted by the same <code>Comparator</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#headSet(E)">headSet</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&nbsp;toElement)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this set whose elements are
+ strictly less than <tt>toElement</tt>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;E&gt;&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#naturalOrder()">naturalOrder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a builder that creates immutable sorted sets whose elements are
+ ordered by their natural ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#of()">of</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty immutable sorted set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#of(E...)">of</A></B>(E...&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#of(E)">of</A></B>(E&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing a single element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#of(E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#of(E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#of(E, E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#of(E, E, E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#orderedBy(java.util.Comparator)">orderedBy</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;E&gt;&nbsp;comparator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a builder that creates immutable sorted sets with an explicit
+ comparator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;E&gt;&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#reverseOrder()">reverseOrder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a builder that creates immutable sorted sets whose elements are
+ ordered by the reverse of their natural ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#subSet(E, E)">subSet</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&nbsp;fromElement,
+ <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&nbsp;toElement)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this set whose elements range
+ from <tt>fromElement</tt>, inclusive, to <tt>toElement</tt>,
+ exclusive.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#tailSet(E)">tailSet</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&nbsp;fromElement)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this set whose elements are
+ greater than or equal to <tt>fromElement</tt>.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ImmutableSet"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ImmutableSet.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/google/common/collect/ImmutableSet.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/ImmutableSet.html#iterator()">iterator</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ImmutableCollection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#add(E)">add</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#contains(java.lang.Object)">contains</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toArray()">toArray</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toArray(T[])">toArray</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.SortedSet"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#first()" title="class or interface in java.util">first</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#last()" title="class or interface in java.util">last</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Set"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#add(E)" title="class or interface in java.util">add</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="of()"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt; <B>of</B>()</PRE>
+<DL>
+<DD>Returns the empty immutable sorted set.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Comparable)"><!-- --></A><A NAME="of(E)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt; <B>of</B>(E&nbsp;element)</PRE>
+<DL>
+<DD>Returns an immutable sorted set containing a single element.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Comparable,java.lang.Comparable)"><!-- --></A><A NAME="of(E, E)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
+ E&nbsp;e2)</PRE>
+<DL>
+<DD>Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering. When multiple elements are equivalent according to
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true#compareTo(T)" title="class or interface in java.lang"><CODE>Comparable.compareTo(T)</CODE></A>, only the first one specified is included.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Comparable,java.lang.Comparable,java.lang.Comparable)"><!-- --></A><A NAME="of(E, E, E)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3)</PRE>
+<DL>
+<DD>Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering. When multiple elements are equivalent according to
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true#compareTo(T)" title="class or interface in java.lang"><CODE>Comparable.compareTo(T)</CODE></A>, only the first one specified is included.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Comparable,java.lang.Comparable,java.lang.Comparable,java.lang.Comparable)"><!-- --></A><A NAME="of(E, E, E, E)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4)</PRE>
+<DL>
+<DD>Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering. When multiple elements are equivalent according to
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true#compareTo(T)" title="class or interface in java.lang"><CODE>Comparable.compareTo(T)</CODE></A>, only the first one specified is included.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Comparable,java.lang.Comparable,java.lang.Comparable,java.lang.Comparable,java.lang.Comparable)"><!-- --></A><A NAME="of(E, E, E, E, E)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5)</PRE>
+<DL>
+<DD>Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering. When multiple elements are equivalent according to
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true#compareTo(T)" title="class or interface in java.lang"><CODE>Comparable.compareTo(T)</CODE></A>, only the first one specified is included.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="of(java.lang.Comparable[])"><!-- --></A><A NAME="of(E...)"><!-- --></A><H3>
+of</H3>
+<PRE>
+public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt; <B>of</B>(E...&nbsp;elements)</PRE>
+<DL>
+<DD>Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering. When multiple elements are equivalent according to
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true#compareTo(T)" title="class or interface in java.lang"><CODE>Comparable.compareTo(T)</CODE></A>, only the first one specified is included.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="copyOf(java.lang.Iterable)"><!-- --></A><H3>
+copyOf</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering. When multiple elements are equivalent according to
+ <code>compareTo()</code>, only the first one specified is included. To create a
+ copy of a <code>SortedSet</code> that preserves the comparator, call
+ <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#copyOfSorted(java.util.SortedSet)"><CODE>copyOfSorted(java.util.SortedSet<E>)</CODE></A> instead. This method iterates over <code>elements</code>
+ at most once.
+
+ <p>Note that if <code>s</code> is a <code>Set&lt;String&gt;</code>, then
+ <code>ImmutableSortedSet.copyOf(s)</code> returns an
+ <code>ImmutableSortedSet&lt;String&gt;</code> containing each of the strings in
+ <code>s</code>, while <code>ImmutableSortedSet.of(s)</code> returns an
+ <code>ImmutableSortedSet&lt;Set&lt;String&gt;&gt;</code> containing one element (the given
+ set itself).
+
+ <p><b>Note:</b> Despite what the method name suggests, if <code>elements</code>
+ is an <code>ImmutableSortedSet</code>, it may be returned instead of a copy.
+
+ <p>This method is not type-safe, as it may be called on elements that are
+ not mutually comparable.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang">ClassCastException</A></CODE> - if the elements are not mutually comparable
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="copyOf(java.util.Iterator)"><!-- --></A><H3>
+copyOf</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering. When multiple elements are equivalent according to
+ <code>compareTo()</code>, only the first one specified is included.
+
+ <p>This method is not type-safe, as it may be called on elements that are
+ not mutually comparable.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang">ClassCastException</A></CODE> - if the elements are not mutually comparable
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="copyOf(java.util.Comparator, java.lang.Iterable)"><!-- --></A><H3>
+copyOf</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super E&gt;&nbsp;comparator,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Returns an immutable sorted set containing the given elements sorted by
+ the given <code>Comparator</code>. When multiple elements are equivalent
+ according to <code>compare()</code>, only the first one specified is
+ included. This method iterates over <code>elements</code> at most once.
+
+ <p><b>Note:</b> Despite what the method name suggests, if <code>elements</code>
+ is an <code>ImmutableSortedSet</code>, it may be returned instead of a copy.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>comparator</code> or any of
+ <code>elements</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="copyOf(java.util.Comparator, java.util.Iterator)"><!-- --></A><H3>
+copyOf</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super E&gt;&nbsp;comparator,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Returns an immutable sorted set containing the given elements sorted by
+ the given <code>Comparator</code>. When multiple elements are equivalent
+ according to <code>compareTo()</code>, only the first one specified is
+ included.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>comparator</code> or any of
+ <code>elements</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="copyOfSorted(java.util.SortedSet)"><!-- --></A><H3>
+copyOfSorted</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt; <B>copyOfSorted</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;E&gt;&nbsp;sortedSet)</PRE>
+<DL>
+<DD>Returns an immutable sorted set containing the elements of a sorted set,
+ sorted by the same <code>Comparator</code>. That behavior differs from
+ <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#copyOf(java.lang.Iterable)"><CODE>copyOf(Iterable)</CODE></A>, which always uses the natural ordering of the
+ elements.
+
+ <p><b>Note:</b> Despite what the method name suggests, if <code>sortedSet</code>
+ is an <code>ImmutableSortedSet</code>, it may be returned instead of a copy.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="orderedBy(java.util.Comparator)"><!-- --></A><H3>
+orderedBy</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;E&gt; <B>orderedBy</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;E&gt;&nbsp;comparator)</PRE>
+<DL>
+<DD>Returns a builder that creates immutable sorted sets with an explicit
+ comparator. If the comparator has a more general type than the set being
+ generated, such as creating a <code>SortedSet&lt;Integer&gt;</code> with a
+ <code>Comparator&lt;Number&gt;</code>, use the <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableSortedSet.Builder</CODE></A> constructor instead.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>comparator</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="reverseOrder()"><!-- --></A><H3>
+reverseOrder</H3>
+<PRE>
+public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;E&gt;&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;E&gt; <B>reverseOrder</B>()</PRE>
+<DL>
+<DD>Returns a builder that creates immutable sorted sets whose elements are
+ ordered by the reverse of their natural ordering.
+
+ <p>Note: the type parameter <code>E</code> extends <code>Comparable&lt;E&gt;</code> rather
+ than <code>Comparable&lt;? super E&gt;</code> as a workaround for javac <a
+ href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6468354">bug
+ 6468354</a>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="naturalOrder()"><!-- --></A><H3>
+naturalOrder</H3>
+<PRE>
+public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;E&gt;&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;E&gt; <B>naturalOrder</B>()</PRE>
+<DL>
+<DD>Returns a builder that creates immutable sorted sets whose elements are
+ ordered by their natural ordering. The sorted sets use <A HREF="../../../../com/google/common/collect/Ordering.html#natural()"><CODE>Ordering.natural()</CODE></A> as the comparator. This method provides more
+ type-safety than <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#builder()"><CODE>builder()</CODE></A>, as it can be called only for classes
+ that implement <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang"><CODE>Comparable</CODE></A>.
+
+ <p>Note: the type parameter <code>E</code> extends <code>Comparable&lt;E&gt;</code> rather
+ than <code>Comparable&lt;? super E&gt;</code> as a workaround for javac <a
+ href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6468354">bug
+ 6468354</a>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="comparator()"><!-- --></A><H3>
+comparator</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt; <B>comparator</B>()</PRE>
+<DL>
+<DD>Returns the comparator that orders the elements, which is
+ <A HREF="../../../../com/google/common/collect/Ordering.html#natural()"><CODE>Ordering.natural()</CODE></A> when the natural ordering of the
+ elements is used. Note that its behavior is not consistent with
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#comparator()" title="class or interface in java.util"><CODE>SortedSet.comparator()</CODE></A>, which returns <code>null</code> to indicate
+ natural ordering.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#comparator()" title="class or interface in java.util">comparator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the comparator used to order the elements in this set,
+ or <tt>null</tt> if this set uses the natural ordering
+ of its elements</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="headSet(java.lang.Object)"><!-- --></A><A NAME="headSet(E)"><!-- --></A><H3>
+headSet</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt; <B>headSet</B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&nbsp;toElement)</PRE>
+<DL>
+<DD>Returns a view of the portion of this set whose elements are
+ strictly less than <tt>toElement</tt>. The returned set is
+ backed by this set, so changes in the returned set are
+ reflected in this set, and vice-versa. The returned set
+ supports all optional set operations that this set supports.
+
+ <p>The returned set will throw an <tt>IllegalArgumentException</tt>
+ on an attempt to insert an element outside its range.
+
+ <p>This method returns a serializable <code>ImmutableSortedSet</code>.
+
+ <p>The <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#headSet(E)" title="class or interface in java.util"><CODE>SortedSet.headSet(E)</CODE></A> documentation states that a subset of a
+ subset throws an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> if passed a
+ <code>toElement</code> greater than an earlier <code>toElement</code>. However, this
+ method doesn't throw an exception in that situation, but instead keeps the
+ original <code>toElement</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#headSet(E)" title="class or interface in java.util">headSet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>toElement</CODE> - high endpoint (exclusive) of the returned set
+<DT><B>Returns:</B><DD>a view of the portion of this set whose elements are strictly
+ less than <tt>toElement</tt></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="subSet(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="subSet(E, E)"><!-- --></A><H3>
+subSet</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt; <B>subSet</B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&nbsp;fromElement,
+ <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&nbsp;toElement)</PRE>
+<DL>
+<DD>Returns a view of the portion of this set whose elements range
+ from <tt>fromElement</tt>, inclusive, to <tt>toElement</tt>,
+ exclusive. (If <tt>fromElement</tt> and <tt>toElement</tt> are
+ equal, the returned set is empty.) The returned set is backed
+ by this set, so changes in the returned set are reflected in
+ this set, and vice-versa. The returned set supports all
+ optional set operations that this set supports.
+
+ <p>The returned set will throw an <tt>IllegalArgumentException</tt>
+ on an attempt to insert an element outside its range.
+
+ <p>This method returns a serializable <code>ImmutableSortedSet</code>.
+
+ <p>The <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#subSet(E, E)" title="class or interface in java.util"><CODE>SortedSet.subSet(E, E)</CODE></A> documentation states that a subset of a
+ subset throws an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> if passed a
+ <code>fromElement</code> smaller than an earlier <code>fromElement</code>. However,
+ this method doesn't throw an exception in that situation, but instead keeps
+ the original <code>fromElement</code>. Similarly, this method keeps the
+ original <code>toElement</code>, instead of throwing an exception, if passed a
+ <code>toElement</code> greater than an earlier <code>toElement</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#subSet(E, E)" title="class or interface in java.util">subSet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fromElement</CODE> - low endpoint (inclusive) of the returned set<DD><CODE>toElement</CODE> - high endpoint (exclusive) of the returned set
+<DT><B>Returns:</B><DD>a view of the portion of this set whose elements range from
+ <tt>fromElement</tt>, inclusive, to <tt>toElement</tt>, exclusive</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="tailSet(java.lang.Object)"><!-- --></A><A NAME="tailSet(E)"><!-- --></A><H3>
+tailSet</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt; <B>tailSet</B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&nbsp;fromElement)</PRE>
+<DL>
+<DD>Returns a view of the portion of this set whose elements are
+ greater than or equal to <tt>fromElement</tt>. The returned
+ set is backed by this set, so changes in the returned set are
+ reflected in this set, and vice-versa. The returned set
+ supports all optional set operations that this set supports.
+
+ <p>The returned set will throw an <tt>IllegalArgumentException</tt>
+ on an attempt to insert an element outside its range.
+
+ <p>This method returns a serializable <code>ImmutableSortedSet</code>.
+
+ <p>The <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#tailSet(E)" title="class or interface in java.util"><CODE>SortedSet.tailSet(E)</CODE></A> documentation states that a subset of a
+ subset throws an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> if passed a
+ <code>fromElement</code> smaller than an earlier <code>fromElement</code>. However,
+ this method doesn't throw an exception in that situation, but instead keeps
+ the original <code>fromElement</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#tailSet(E)" title="class or interface in java.util">tailSet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fromElement</CODE> - low endpoint (inclusive) of the returned set
+<DT><B>Returns:</B><DD>a view of the portion of this set whose elements are greater
+ than or equal to <tt>fromElement</tt></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="builder()"><!-- --></A><H3>
+builder</H3>
+<PRE>
+<FONT SIZE="-1"><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</A>
+</FONT>public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;E&gt; <B>builder</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>Use <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#naturalOrder()"><CODE>naturalOrder()</CODE></A>, which offers
+ better type-safety.</I>
+<P>
+<DD>Not supported. Use <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#naturalOrder()"><CODE>naturalOrder()</CODE></A>, which offers
+ better type-safety, instead. This method exists only to hide
+ <A HREF="../../../../com/google/common/collect/ImmutableSet.html#builder()"><CODE>ImmutableSet.builder()</CODE></A> from consumers of <code>ImmutableSortedSet</code>.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ImmutableSortedSet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ImmutableSortedSet.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSortedSet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/Iterables.html b/javadoc/com/google/common/collect/Iterables.html
new file mode 100644
index 0000000..02fbf98
--- /dev/null
+++ b/javadoc/com/google/common/collect/Iterables.html
@@ -0,0 +1,1235 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+Iterables (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Iterables (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Iterables.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/Iterators.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/Iterables.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Iterables.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class Iterables</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.Iterables</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public final class <B>Iterables</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+This class contains static utility methods that operate on or return objects
+ of type <code>Iterable</code>. Except as noted, each method has a corresponding
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util"><CODE>Iterator</CODE></A>-based method in the <A HREF="../../../../com/google/common/collect/Iterators.html" title="class in com.google.common.collect"><CODE>Iterators</CODE></A> class.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion, Jared Levy</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; boolean</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#addAll(java.util.Collection, java.lang.Iterable)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;T&gt;&nbsp;addTo,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;elementsToAdd)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds all elements in <code>iterable</code> to <code>collection</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; boolean</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#all(java.lang.Iterable, com.google.common.base.Predicate)">all</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if every element in <code>iterable</code> satisfies the
+ predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; boolean</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#any(java.lang.Iterable, com.google.common.base.Predicate)">any</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if one or more elements in <code>iterable</code> satisfy
+ the predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#concat(java.lang.Iterable)">concat</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&gt;&nbsp;inputs)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Combines multiple iterables into a single iterable.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#concat(java.lang.Iterable...)">concat</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;...&nbsp;inputs)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Combines multiple iterables into a single iterable.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#concat(java.lang.Iterable, java.lang.Iterable)">concat</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;a,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;b)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Combines two iterables into a single iterable.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#concat(java.lang.Iterable, java.lang.Iterable, java.lang.Iterable)">concat</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;a,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;b,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;c)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Combines three iterables into a single iterable.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#concat(java.lang.Iterable, java.lang.Iterable, java.lang.Iterable, java.lang.Iterable)">concat</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;a,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;b,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;c,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;d)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Combines four iterables into a single iterable.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#contains(java.lang.Iterable, java.lang.Object)">contains</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;iterable,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if <code>iterable</code> contains <code>element</code>; that is,
+ any object for while <code>equals(element)</code> is true.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#cycle(java.lang.Iterable)">cycle</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterable whose iterators cycle indefinitely over the elements of
+ <code>iterable</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#cycle(T...)">cycle</A></B>(T...&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterable whose iterators cycle indefinitely over the provided
+ elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#elementsEqual(java.lang.Iterable, java.lang.Iterable)">elementsEqual</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;iterable1,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;iterable2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether two iterables contain equal elements in the same order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#filter(java.lang.Iterable, java.lang.Class)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;unfiltered,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns all instances of class <code>type</code> in <code>unfiltered</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#filter(java.lang.Iterable, com.google.common.base.Predicate)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;unfiltered,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the elements of <code>unfiltered</code> that satisfy a predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#find(java.lang.Iterable, com.google.common.base.Predicate)">find</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the first element in <code>iterable</code> that satisfies the given
+ predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#frequency(java.lang.Iterable, java.lang.Object)">frequency</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;iterable,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of elements in the specified iterable that equal the
+ specified object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#get(java.lang.Iterable, int)">get</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
+ int&nbsp;position)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the element at the specified position in an iterable.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#getLast(java.lang.Iterable)">getLast</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the last element of <code>iterable</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#getOnlyElement(java.lang.Iterable)">getOnlyElement</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the single element contained in <code>iterable</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#getOnlyElement(java.lang.Iterable, T)">getOnlyElement</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
+ T&nbsp;defaultValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the single element contained in <code>iterable</code>, or <code>defaultValue</code> if the iterable is empty.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; boolean</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#isEmpty(java.lang.Iterable)">isEmpty</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines if the given iterable contains no elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#paddedPartition(java.lang.Iterable, int)">paddedPartition</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
+ int&nbsp;size)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Divides an iterable into unmodifiable sublists of the given size, padding
+ the final iterable with null values if necessary.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#partition(java.lang.Iterable, int)">partition</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
+ int&nbsp;size)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Divides an iterable into unmodifiable sublists of the given size (the final
+ iterable may be smaller).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#removeAll(java.lang.Iterable, java.util.Collection)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;removeFrom,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes, from an iterable, every element that belongs to the provided
+ collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#retainAll(java.lang.Iterable, java.util.Collection)">retainAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;removeFrom,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes, from an iterable, every element that does not belong to the
+ provided collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#reverse(java.util.List)">reverse</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&nbsp;list)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adapts a list to an iterable with reversed iteration order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#size(java.lang.Iterable)">size</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;iterable)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of elements in <code>iterable</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#toArray(java.lang.Iterable, java.lang.Class)">toArray</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;iterable,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies an iterable's elements into an array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#toString(java.lang.Iterable)">toString</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;iterable)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string representation of <code>iterable</code>, with the format
+ <code>[e1, e2, ..., en]</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;F,T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#transform(java.lang.Iterable, com.google.common.base.Function)">transform</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;F&gt;&nbsp;fromIterable,
+ <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,? extends T&gt;&nbsp;function)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterable that applies <code>function</code> to each element of <code>fromIterable</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#unmodifiableIterable(java.lang.Iterable)">unmodifiableIterable</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of <code>iterable</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="unmodifiableIterable(java.lang.Iterable)"><!-- --></A><H3>
+unmodifiableIterable</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt; <B>unmodifiableIterable</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable)</PRE>
+<DL>
+<DD>Returns an unmodifiable view of <code>iterable</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="size(java.lang.Iterable)"><!-- --></A><H3>
+size</H3>
+<PRE>
+public static int <B>size</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;iterable)</PRE>
+<DL>
+<DD>Returns the number of elements in <code>iterable</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="contains(java.lang.Iterable, java.lang.Object)"><!-- --></A><H3>
+contains</H3>
+<PRE>
+public static boolean <B>contains</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;iterable,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD>Returns <code>true</code> if <code>iterable</code> contains <code>element</code>; that is,
+ any object for while <code>equals(element)</code> is true.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="removeAll(java.lang.Iterable, java.util.Collection)"><!-- --></A><H3>
+removeAll</H3>
+<PRE>
+public static boolean <B>removeAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;removeFrom,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</PRE>
+<DL>
+<DD>Removes, from an iterable, every element that belongs to the provided
+ collection.
+
+ <p>This method calls <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util"><CODE>Collection.removeAll(java.util.Collection<?>)</CODE></A> if <code>iterable</code> is a
+ collection, and <A HREF="../../../../com/google/common/collect/Iterators.html#removeAll(java.util.Iterator, java.util.Collection)"><CODE>Iterators.removeAll(java.util.Iterator<?>, java.util.Collection<?>)</CODE></A> otherwise.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>removeFrom</CODE> - the iterable to (potentially) remove elements from<DD><CODE>elementsToRemove</CODE> - the elements to remove
+<DT><B>Returns:</B><DD><code>true</code> if any elements are removed from <code>iterable</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="retainAll(java.lang.Iterable, java.util.Collection)"><!-- --></A><H3>
+retainAll</H3>
+<PRE>
+public static boolean <B>retainAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;removeFrom,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</PRE>
+<DL>
+<DD>Removes, from an iterable, every element that does not belong to the
+ provided collection.
+
+ <p>This method calls <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util"><CODE>Collection.retainAll(java.util.Collection<?>)</CODE></A> if <code>iterable</code> is a
+ collection, and <A HREF="../../../../com/google/common/collect/Iterators.html#retainAll(java.util.Iterator, java.util.Collection)"><CODE>Iterators.retainAll(java.util.Iterator<?>, java.util.Collection<?>)</CODE></A> otherwise.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>removeFrom</CODE> - the iterable to (potentially) remove elements from<DD><CODE>elementsToRetain</CODE> - the elements to retain
+<DT><B>Returns:</B><DD><code>true</code> if any elements are removed from <code>iterable</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="elementsEqual(java.lang.Iterable, java.lang.Iterable)"><!-- --></A><H3>
+elementsEqual</H3>
+<PRE>
+public static boolean <B>elementsEqual</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;iterable1,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;iterable2)</PRE>
+<DL>
+<DD>Determines whether two iterables contain equal elements in the same order.
+ More specifically, this method returns <code>true</code> if <code>iterable1</code>
+ and <code>iterable2</code> contain the same number of elements and every element
+ of <code>iterable1</code> is equal to the corresponding element of
+ <code>iterable2</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString(java.lang.Iterable)"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public static <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;iterable)</PRE>
+<DL>
+<DD>Returns a string representation of <code>iterable</code>, with the format
+ <code>[e1, e2, ..., en]</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getOnlyElement(java.lang.Iterable)"><!-- --></A><H3>
+getOnlyElement</H3>
+<PRE>
+public static &lt;T&gt; T <B>getOnlyElement</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable)</PRE>
+<DL>
+<DD>Returns the single element contained in <code>iterable</code>.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/NoSuchElementException.html?is-external=true" title="class or interface in java.util">NoSuchElementException</A></CODE> - if the iterable is empty
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the iterable contains multiple
+ elements</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getOnlyElement(java.lang.Iterable,java.lang.Object)"><!-- --></A><A NAME="getOnlyElement(java.lang.Iterable, T)"><!-- --></A><H3>
+getOnlyElement</H3>
+<PRE>
+public static &lt;T&gt; T <B>getOnlyElement</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ T&nbsp;defaultValue)</PRE>
+<DL>
+<DD>Returns the single element contained in <code>iterable</code>, or <code>defaultValue</code> if the iterable is empty.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the iterator contains multiple
+ elements</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toArray(java.lang.Iterable, java.lang.Class)"><!-- --></A><H3>
+toArray</H3>
+<PRE>
+public static &lt;T&gt; T[] <B>toArray</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;iterable,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</PRE>
+<DL>
+<DD>Copies an iterable's elements into an array.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>iterable</CODE> - the iterable to copy<DD><CODE>type</CODE> - the type of the elements
+<DT><B>Returns:</B><DD>a newly-allocated array into which all the elements of the iterable
+ have been copied</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addAll(java.util.Collection, java.lang.Iterable)"><!-- --></A><H3>
+addAll</H3>
+<PRE>
+public static &lt;T&gt; boolean <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;T&gt;&nbsp;addTo,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;elementsToAdd)</PRE>
+<DL>
+<DD>Adds all elements in <code>iterable</code> to <code>collection</code>.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD><code>true</code> if <code>collection</code> was modified as a result of this
+ operation.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="frequency(java.lang.Iterable, java.lang.Object)"><!-- --></A><H3>
+frequency</H3>
+<PRE>
+public static int <B>frequency</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;iterable,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD>Returns the number of elements in the specified iterable that equal the
+ specified object.
+<P>
+<DD><DL>
+<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#frequency(java.util.Collection, java.lang.Object)" title="class or interface in java.util"><CODE>Collections.frequency(java.util.Collection<?>, java.lang.Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="cycle(java.lang.Iterable)"><!-- --></A><H3>
+cycle</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt; <B>cycle</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable)</PRE>
+<DL>
+<DD>Returns an iterable whose iterators cycle indefinitely over the elements of
+ <code>iterable</code>.
+
+ <p>That iterator supports <code>remove()</code> if <code>iterable.iterator()</code>
+ does. After <code>remove()</code> is called, subsequent cycles omit the removed
+ element, which is no longer in <code>iterable</code>. The iterator's
+ <code>hasNext()</code> method returns <code>true</code> until <code>iterable</code> is
+ empty.
+
+ <p><b>Warning:</b> Typical uses of the resulting iterator may produce an
+ infinite loop. You should use an explicit <code>break</code> or be certain that
+ you will eventually remove all the elements.
+
+ <p>To cycle over the iterable <code>n</code> times, use the following:
+ <code>Iterables.concat(Collections.nCopies(n, iterable))</code>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="cycle(java.lang.Object[])"><!-- --></A><A NAME="cycle(T...)"><!-- --></A><H3>
+cycle</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt; <B>cycle</B>(T...&nbsp;elements)</PRE>
+<DL>
+<DD>Returns an iterable whose iterators cycle indefinitely over the provided
+ elements.
+
+ <p>After <code>remove</code> is invoked on a generated iterator, the removed
+ element will no longer appear in either that iterator or any other iterator
+ created from the same source iterable. That is, this method behaves exactly
+ as <code>Iterables.cycle(Lists.newArrayList(elements))</code>. The iterator's
+ <code>hasNext</code> method returns <code>true</code> until all of the original
+ elements have been removed.
+
+ <p><b>Warning:</b> Typical uses of the resulting iterator may produce an
+ infinite loop. You should use an explicit <code>break</code> or be certain that
+ you will eventually remove all the elements.
+
+ <p>To cycle over the elements <code>n</code> times, use the following:
+ <code>Iterables.concat(Collections.nCopies(n, Arrays.asList(elements)))</code>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="concat(java.lang.Iterable, java.lang.Iterable)"><!-- --></A><H3>
+concat</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt; <B>concat</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;a,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;b)</PRE>
+<DL>
+<DD>Combines two iterables into a single iterable. The returned iterable has an
+ iterator that traverses the elements in <code>a</code>, followed by the elements
+ in <code>b</code>. The source iterators are not polled until necessary.
+
+ <p>The returned iterable's iterator supports <code>remove()</code> when the
+ corresponding input iterator supports it.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="concat(java.lang.Iterable, java.lang.Iterable, java.lang.Iterable)"><!-- --></A><H3>
+concat</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt; <B>concat</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;a,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;b,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;c)</PRE>
+<DL>
+<DD>Combines three iterables into a single iterable. The returned iterable has
+ an iterator that traverses the elements in <code>a</code>, followed by the
+ elements in <code>b</code>, followed by the elements in <code>c</code>. The source
+ iterators are not polled until necessary.
+
+ <p>The returned iterable's iterator supports <code>remove()</code> when the
+ corresponding input iterator supports it.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="concat(java.lang.Iterable, java.lang.Iterable, java.lang.Iterable, java.lang.Iterable)"><!-- --></A><H3>
+concat</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt; <B>concat</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;a,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;b,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;c,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;d)</PRE>
+<DL>
+<DD>Combines four iterables into a single iterable. The returned iterable has
+ an iterator that traverses the elements in <code>a</code>, followed by the
+ elements in <code>b</code>, followed by the elements in <code>c</code>, followed by
+ the elements in <code>d</code>. The source iterators are not polled until
+ necessary.
+
+ <p>The returned iterable's iterator supports <code>remove()</code> when the
+ corresponding input iterator supports it.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="concat(java.lang.Iterable...)"><!-- --></A><H3>
+concat</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt; <B>concat</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;...&nbsp;inputs)</PRE>
+<DL>
+<DD>Combines multiple iterables into a single iterable. The returned iterable
+ has an iterator that traverses the elements of each iterable in
+ <code>inputs</code>. The input iterators are not polled until necessary.
+
+ <p>The returned iterable's iterator supports <code>remove()</code> when the
+ corresponding input iterator supports it.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of the provided iterables is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="concat(java.lang.Iterable)"><!-- --></A><H3>
+concat</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt; <B>concat</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&gt;&nbsp;inputs)</PRE>
+<DL>
+<DD>Combines multiple iterables into a single iterable. The returned iterable
+ has an iterator that traverses the elements of each iterable in
+ <code>inputs</code>. The input iterators are not polled until necessary.
+
+ <p>The returned iterable's iterator supports <code>remove()</code> when the
+ corresponding input iterator supports it. The methods of the returned
+ iterable may throw <code>NullPointerException</code> if any of the input
+ iterators are null.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="partition(java.lang.Iterable, int)"><!-- --></A><H3>
+partition</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&gt; <B>partition</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
+ int&nbsp;size)</PRE>
+<DL>
+<DD>Divides an iterable into unmodifiable sublists of the given size (the final
+ iterable may be smaller). For example, partitioning an iterable containing
+ <code>[a, b, c, d, e]</code> with a partition size of 3 yields <code>[[a, b, c], [d, e]]</code> -- an outer iterable containing two inner lists of
+ three and two elements, all in the original order.
+
+ <p>Iterators returned by the returned iterable do not support the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#remove()" title="class or interface in java.util"><CODE>Iterator.remove()</CODE></A> method. The returned lists implement <A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util"><CODE>RandomAccess</CODE></A>, whether or not the input list does.
+
+ <p><b>Note:</b> if <code>iterable</code> is a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>, use <A HREF="../../../../com/google/common/collect/Lists.html#partition(java.util.List, int)"><CODE>Lists.partition(List, int)</CODE></A> instead.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>iterable</CODE> - the iterable to return a partitioned view of<DD><CODE>size</CODE> - the desired size of each partition (the last may be smaller)
+<DT><B>Returns:</B><DD>an iterable of unmodifiable lists containing the elements of <code>iterable</code> divided into partitions
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>size</code> is nonpositive</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="paddedPartition(java.lang.Iterable, int)"><!-- --></A><H3>
+paddedPartition</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&gt; <B>paddedPartition</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
+ int&nbsp;size)</PRE>
+<DL>
+<DD>Divides an iterable into unmodifiable sublists of the given size, padding
+ the final iterable with null values if necessary. For example, partitioning
+ an iterable containing <code>[a, b, c, d, e]</code> with a partition size of 3
+ yields <code>[[a, b, c], [d, e, null]]</code> -- an outer iterable containing
+ two inner lists of three elements each, all in the original order.
+
+ <p>Iterators returned by the returned iterable do not support the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#remove()" title="class or interface in java.util"><CODE>Iterator.remove()</CODE></A> method.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>iterable</CODE> - the iterable to return a partitioned view of<DD><CODE>size</CODE> - the desired size of each partition
+<DT><B>Returns:</B><DD>an iterable of unmodifiable lists containing the elements of <code>iterable</code> divided into partitions (the final iterable may have
+ trailing null elements)
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>size</code> is nonpositive</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="filter(java.lang.Iterable, com.google.common.base.Predicate)"><!-- --></A><H3>
+filter</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt; <B>filter</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;unfiltered,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</PRE>
+<DL>
+<DD>Returns the elements of <code>unfiltered</code> that satisfy a predicate. The
+ resulting iterable's iterator does not support <code>remove()</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="filter(java.lang.Iterable, java.lang.Class)"><!-- --></A><H3>
+filter</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt; <B>filter</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;unfiltered,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</PRE>
+<DL>
+<DD>Returns all instances of class <code>type</code> in <code>unfiltered</code>. The
+ returned iterable has elements whose class is <code>type</code> or a subclass of
+ <code>type</code>. The returned iterable's iterator does not support
+ <code>remove()</code>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>unfiltered</CODE> - an iterable containing objects of any type<DD><CODE>type</CODE> - the type of elements desired
+<DT><B>Returns:</B><DD>an unmodifiable iterable containing all elements of the original
+ iterable that were of the requested type</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="any(java.lang.Iterable, com.google.common.base.Predicate)"><!-- --></A><H3>
+any</H3>
+<PRE>
+public static &lt;T&gt; boolean <B>any</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</PRE>
+<DL>
+<DD>Returns <code>true</code> if one or more elements in <code>iterable</code> satisfy
+ the predicate.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="all(java.lang.Iterable, com.google.common.base.Predicate)"><!-- --></A><H3>
+all</H3>
+<PRE>
+public static &lt;T&gt; boolean <B>all</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</PRE>
+<DL>
+<DD>Returns <code>true</code> if every element in <code>iterable</code> satisfies the
+ predicate. If <code>iterable</code> is empty, <code>true</code> is returned.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="find(java.lang.Iterable, com.google.common.base.Predicate)"><!-- --></A><H3>
+find</H3>
+<PRE>
+public static &lt;T&gt; T <B>find</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</PRE>
+<DL>
+<DD>Returns the first element in <code>iterable</code> that satisfies the given
+ predicate.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/NoSuchElementException.html?is-external=true" title="class or interface in java.util">NoSuchElementException</A></CODE> - if no element in <code>iterable</code> matches
+ the given predicate</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="transform(java.lang.Iterable, com.google.common.base.Function)"><!-- --></A><H3>
+transform</H3>
+<PRE>
+public static &lt;F,T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt; <B>transform</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;F&gt;&nbsp;fromIterable,
+ <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,? extends T&gt;&nbsp;function)</PRE>
+<DL>
+<DD>Returns an iterable that applies <code>function</code> to each element of <code>fromIterable</code>.
+
+ <p>The returned iterable's iterator supports <code>remove()</code> if the
+ provided iterator does. After a successful <code>remove()</code> call,
+ <code>fromIterable</code> no longer contains the corresponding element.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(java.lang.Iterable, int)"><!-- --></A><H3>
+get</H3>
+<PRE>
+public static &lt;T&gt; T <B>get</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
+ int&nbsp;position)</PRE>
+<DL>
+<DD>Returns the element at the specified position in an iterable.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>position</CODE> - position of the element to return
+<DT><B>Returns:</B><DD>the element at the specified position in <code>iterable</code>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang">IndexOutOfBoundsException</A></CODE> - if <code>position</code> is negative or
+ greater than or equal to the size of <code>iterable</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getLast(java.lang.Iterable)"><!-- --></A><H3>
+getLast</H3>
+<PRE>
+public static &lt;T&gt; T <B>getLast</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable)</PRE>
+<DL>
+<DD>Returns the last element of <code>iterable</code>.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the last element of <code>iterable</code>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/NoSuchElementException.html?is-external=true" title="class or interface in java.util">NoSuchElementException</A></CODE> - if the iterable has no elements</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="reverse(java.util.List)"><!-- --></A><H3>
+reverse</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt; <B>reverse</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&nbsp;list)</PRE>
+<DL>
+<DD>Adapts a list to an iterable with reversed iteration order. It is
+ especially useful in foreach-style loops: <pre class="code"> <code>List&lt;String&gt; mylist = ...
+ for (String str : Iterables.reverse(mylist)) {
+ ...
+ }</code></pre>
+
+ There is no corresponding method in <A HREF="../../../../com/google/common/collect/Iterators.html" title="class in com.google.common.collect"><CODE>Iterators</CODE></A>, since <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true#iterator()" title="class or interface in java.lang"><CODE>Iterable.iterator()</CODE></A> can simply be invoked on the result of calling this
+ method.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>an iterable with the same elements as the list, in reverse</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isEmpty(java.lang.Iterable)"><!-- --></A><H3>
+isEmpty</H3>
+<PRE>
+public static &lt;T&gt; boolean <B>isEmpty</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable)</PRE>
+<DL>
+<DD>Determines if the given iterable contains no elements.
+
+ <p>There is no precise <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util"><CODE>Iterator</CODE></A> equivalent to this method, since
+ one can only ask an iterator whether it has any elements <i>remaining</i>
+ (which one does using <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#hasNext()" title="class or interface in java.util"><CODE>Iterator.hasNext()</CODE></A>).
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD><code>true</code> if the iterable contains no elements</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Iterables.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/Iterators.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/Iterables.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Iterables.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/Iterators.html b/javadoc/com/google/common/collect/Iterators.html
new file mode 100644
index 0000000..14efd79
--- /dev/null
+++ b/javadoc/com/google/common/collect/Iterators.html
@@ -0,0 +1,1379 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+Iterators (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Iterators (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Iterators.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/Iterables.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/Iterators.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Iterators.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class Iterators</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.Iterators</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public final class <B>Iterators</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+This class contains static utility methods that operate on or return objects
+ of type <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util"><CODE>Iterator</CODE></A>. Except as noted, each method has a corresponding
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang"><CODE>Iterable</CODE></A>-based method in the <A HREF="../../../../com/google/common/collect/Iterables.html" title="class in com.google.common.collect"><CODE>Iterables</CODE></A> class.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion, Jared Levy</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; boolean</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#addAll(java.util.Collection, java.util.Iterator)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;T&gt;&nbsp;addTo,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;iterator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds all elements in <code>iterator</code> to <code>collection</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; boolean</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#all(java.util.Iterator, com.google.common.base.Predicate)">all</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if every element returned by <code>iterator</code>
+ satisfies the given predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; boolean</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#any(java.util.Iterator, com.google.common.base.Predicate)">any</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if one or more elements returned by <code>iterator</code>
+ satisfy the given predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Enumeration.html?is-external=true" title="class or interface in java.util">Enumeration</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#asEnumeration(java.util.Iterator)">asEnumeration</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adapts an <code>Iterator</code> to the <code>Enumeration</code> interface.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#concat(java.util.Iterator)">concat</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&gt;&nbsp;inputs)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Combines multiple iterators into a single iterator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#concat(java.util.Iterator...)">concat</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;...&nbsp;inputs)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Combines multiple iterators into a single iterator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#concat(java.util.Iterator, java.util.Iterator)">concat</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;a,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;b)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Combines two iterators into a single iterator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#concat(java.util.Iterator, java.util.Iterator, java.util.Iterator)">concat</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;a,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;b,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;c)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Combines three iterators into a single iterator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#concat(java.util.Iterator, java.util.Iterator, java.util.Iterator, java.util.Iterator)">concat</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;a,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;b,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;c,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;d)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Combines four iterators into a single iterator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#contains(java.util.Iterator, java.lang.Object)">contains</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;iterator,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if <code>iterator</code> contains <code>element</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#cycle(java.lang.Iterable)">cycle</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator that cycles indefinitely over the elements of <code>iterable</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#cycle(T...)">cycle</A></B>(T...&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator that cycles indefinitely over the provided elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#elementsEqual(java.util.Iterator, java.util.Iterator)">elementsEqual</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;iterator1,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;iterator2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether two iterators contain equal elements in the same order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#emptyIterator()">emptyIterator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty iterator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#filter(java.util.Iterator, java.lang.Class)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;unfiltered,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns all instances of class <code>type</code> in <code>unfiltered</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#filter(java.util.Iterator, com.google.common.base.Predicate)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;unfiltered,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the elements of <code>unfiltered</code> that satisfy a predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#find(java.util.Iterator, com.google.common.base.Predicate)">find</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the first element in <code>iterator</code> that satisfies the given
+ predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#forArray(T...)">forArray</A></B>(T...&nbsp;array)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator containing the elements of <code>array</code> in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#forEnumeration(java.util.Enumeration)">forEnumeration</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Enumeration.html?is-external=true" title="class or interface in java.util">Enumeration</A>&lt;T&gt;&nbsp;enumeration)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adapts an <code>Enumeration</code> to the <code>Iterator</code> interface.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#frequency(java.util.Iterator, java.lang.Object)">frequency</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;iterator,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of elements in the specified iterator that equal the
+ specified object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#get(java.util.Iterator, int)">get</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
+ int&nbsp;position)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Advances <code>iterator</code> <code>position + 1</code> times, returning the element
+ at the <code>position</code>th position.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#getLast(java.util.Iterator)">getLast</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Advances <code>iterator</code> to the end, returning the last element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#getOnlyElement(java.util.Iterator)">getOnlyElement</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the single element contained in <code>iterator</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#getOnlyElement(java.util.Iterator, T)">getOnlyElement</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
+ T&nbsp;defaultValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the single element contained in <code>iterator</code>, or <code>defaultValue</code> if the iterator is empty.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#paddedPartition(java.util.Iterator, int)">paddedPartition</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
+ int&nbsp;size)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Divides an iterator into unmodifiable sublists of the given size, padding
+ the final iterator with null values if necessary.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#partition(java.util.Iterator, int)">partition</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
+ int&nbsp;size)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Divides an iterator into unmodifiable sublists of the given size (the final
+ list may be smaller).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect">PeekingIterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#peekingIterator(java.util.Iterator)">peekingIterator</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;iterator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <code>PeekingIterator</code> backed by the given iterator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#removeAll(java.util.Iterator, java.util.Collection)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;removeFrom,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Traverses an iterator and removes every element that belongs to the
+ provided collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#retainAll(java.util.Iterator, java.util.Collection)">retainAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;removeFrom,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Traverses an iterator and removes every element that does not belong to the
+ provided collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#singletonIterator(T)">singletonIterator</A></B>(T&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator containing only <code>value</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#size(java.util.Iterator)">size</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;iterator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of elements remaining in <code>iterator</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#toArray(java.util.Iterator, java.lang.Class)">toArray</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;iterator,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies an iterator's elements into an array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#toString(java.util.Iterator)">toString</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;iterator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string representation of <code>iterator</code>, with the format
+ <code>[e1, e2, ..., en]</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;F,T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#transform(java.util.Iterator, com.google.common.base.Function)">transform</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;F&gt;&nbsp;fromIterator,
+ <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,? extends T&gt;&nbsp;function)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator that applies <code>function</code> to each element of <code>fromIterator</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#unmodifiableIterator(java.util.Iterator)">unmodifiableIterator</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of <code>iterator</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="emptyIterator()"><!-- --></A><H3>
+emptyIterator</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt; <B>emptyIterator</B>()</PRE>
+<DL>
+<DD>Returns the empty iterator.
+
+ <p>The <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang"><CODE>Iterable</CODE></A> equivalent of this method is <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#emptySet()" title="class or interface in java.util"><CODE>Collections.emptySet()</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="unmodifiableIterator(java.util.Iterator)"><!-- --></A><H3>
+unmodifiableIterator</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt; <B>unmodifiableIterator</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator)</PRE>
+<DL>
+<DD>Returns an unmodifiable view of <code>iterator</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="size(java.util.Iterator)"><!-- --></A><H3>
+size</H3>
+<PRE>
+public static int <B>size</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;iterator)</PRE>
+<DL>
+<DD>Returns the number of elements remaining in <code>iterator</code>. The iterator
+ will be left exhausted: its <code>hasNext()</code> method will return
+ <code>false</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="contains(java.util.Iterator, java.lang.Object)"><!-- --></A><H3>
+contains</H3>
+<PRE>
+public static boolean <B>contains</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;iterator,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD>Returns <code>true</code> if <code>iterator</code> contains <code>element</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="removeAll(java.util.Iterator, java.util.Collection)"><!-- --></A><H3>
+removeAll</H3>
+<PRE>
+public static boolean <B>removeAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;removeFrom,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</PRE>
+<DL>
+<DD>Traverses an iterator and removes every element that belongs to the
+ provided collection. The iterator will be left exhausted: its
+ <code>hasNext()</code> method will return <code>false</code>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>removeFrom</CODE> - the iterator to (potentially) remove elements from<DD><CODE>elementsToRemove</CODE> - the elements to remove
+<DT><B>Returns:</B><DD><code>true</code> if any elements are removed from <code>iterator</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="retainAll(java.util.Iterator, java.util.Collection)"><!-- --></A><H3>
+retainAll</H3>
+<PRE>
+public static boolean <B>retainAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;removeFrom,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</PRE>
+<DL>
+<DD>Traverses an iterator and removes every element that does not belong to the
+ provided collection. The iterator will be left exhausted: its
+ <code>hasNext()</code> method will return <code>false</code>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>removeFrom</CODE> - the iterator to (potentially) remove elements from<DD><CODE>elementsToRetain</CODE> - the elements to retain
+<DT><B>Returns:</B><DD><code>true</code> if any elements are removed from <code>iterator</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="elementsEqual(java.util.Iterator, java.util.Iterator)"><!-- --></A><H3>
+elementsEqual</H3>
+<PRE>
+public static boolean <B>elementsEqual</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;iterator1,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;iterator2)</PRE>
+<DL>
+<DD>Determines whether two iterators contain equal elements in the same order.
+ More specifically, this method returns <code>true</code> if <code>iterator1</code>
+ and <code>iterator2</code> contain the same number of elements and every element
+ of <code>iterator1</code> is equal to the corresponding element of
+ <code>iterator2</code>.
+
+ <p>Note that this will modify the supplied iterators, since they will have
+ been advanced some number of elements forward.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString(java.util.Iterator)"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public static <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;iterator)</PRE>
+<DL>
+<DD>Returns a string representation of <code>iterator</code>, with the format
+ <code>[e1, e2, ..., en]</code>. The iterator will be left exhausted: its
+ <code>hasNext()</code> method will return <code>false</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getOnlyElement(java.util.Iterator)"><!-- --></A><H3>
+getOnlyElement</H3>
+<PRE>
+public static &lt;T&gt; T <B>getOnlyElement</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator)</PRE>
+<DL>
+<DD>Returns the single element contained in <code>iterator</code>.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/NoSuchElementException.html?is-external=true" title="class or interface in java.util">NoSuchElementException</A></CODE> - if the iterator is empty
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the iterator contains multiple
+ elements. The state of the iterator is unspecified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getOnlyElement(java.util.Iterator,java.lang.Object)"><!-- --></A><A NAME="getOnlyElement(java.util.Iterator, T)"><!-- --></A><H3>
+getOnlyElement</H3>
+<PRE>
+public static &lt;T&gt; T <B>getOnlyElement</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ T&nbsp;defaultValue)</PRE>
+<DL>
+<DD>Returns the single element contained in <code>iterator</code>, or <code>defaultValue</code> if the iterator is empty.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the iterator contains multiple
+ elements. The state of the iterator is unspecified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toArray(java.util.Iterator, java.lang.Class)"><!-- --></A><H3>
+toArray</H3>
+<PRE>
+public static &lt;T&gt; T[] <B>toArray</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;iterator,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</PRE>
+<DL>
+<DD>Copies an iterator's elements into an array. The iterator will be left
+ exhausted: its <code>hasNext()</code> method will return <code>false</code>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>iterator</CODE> - the iterator to copy<DD><CODE>type</CODE> - the type of the elements
+<DT><B>Returns:</B><DD>a newly-allocated array into which all the elements of the iterator
+ have been copied</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addAll(java.util.Collection, java.util.Iterator)"><!-- --></A><H3>
+addAll</H3>
+<PRE>
+public static &lt;T&gt; boolean <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;T&gt;&nbsp;addTo,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;iterator)</PRE>
+<DL>
+<DD>Adds all elements in <code>iterator</code> to <code>collection</code>. The iterator
+ will be left exhausted: its <code>hasNext()</code> method will return
+ <code>false</code>.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD><code>true</code> if <code>collection</code> was modified as a result of this
+ operation</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="frequency(java.util.Iterator, java.lang.Object)"><!-- --></A><H3>
+frequency</H3>
+<PRE>
+public static int <B>frequency</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;iterator,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD>Returns the number of elements in the specified iterator that equal the
+ specified object. The iterator will be left exhausted: its
+ <code>hasNext()</code> method will return <code>false</code>.
+<P>
+<DD><DL>
+<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#frequency(java.util.Collection, java.lang.Object)" title="class or interface in java.util"><CODE>Collections.frequency(java.util.Collection<?>, java.lang.Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="cycle(java.lang.Iterable)"><!-- --></A><H3>
+cycle</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt; <B>cycle</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable)</PRE>
+<DL>
+<DD>Returns an iterator that cycles indefinitely over the elements of <code>iterable</code>.
+
+ <p>The returned iterator supports <code>remove()</code> if the provided iterator
+ does. After <code>remove()</code> is called, subsequent cycles omit the removed
+ element, which is no longer in <code>iterable</code>. The iterator's
+ <code>hasNext()</code> method returns <code>true</code> until <code>iterable</code> is
+ empty.
+
+ <p><b>Warning:</b> Typical uses of the resulting iterator may produce an
+ infinite loop. You should use an explicit <code>break</code> or be certain that
+ you will eventually remove all the elements.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="cycle(java.lang.Object[])"><!-- --></A><A NAME="cycle(T...)"><!-- --></A><H3>
+cycle</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt; <B>cycle</B>(T...&nbsp;elements)</PRE>
+<DL>
+<DD>Returns an iterator that cycles indefinitely over the provided elements.
+
+ <p>The returned iterator supports <code>remove()</code> if the provided iterator
+ does. After <code>remove()</code> is called, subsequent cycles omit the removed
+ element, but <code>elements</code> does not change. The iterator's
+ <code>hasNext()</code> method returns <code>true</code> until all of the original
+ elements have been removed.
+
+ <p><b>Warning:</b> Typical uses of the resulting iterator may produce an
+ infinite loop. You should use an explicit <code>break</code> or be certain that
+ you will eventually remove all the elements.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="concat(java.util.Iterator, java.util.Iterator)"><!-- --></A><H3>
+concat</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt; <B>concat</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;a,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;b)</PRE>
+<DL>
+<DD>Combines two iterators into a single iterator. The returned iterator
+ iterates across the elements in <code>a</code>, followed by the elements in
+ <code>b</code>. The source iterators are not polled until necessary.
+
+ <p>The returned iterator supports <code>remove()</code> when the corresponding
+ input iterator supports it.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="concat(java.util.Iterator, java.util.Iterator, java.util.Iterator)"><!-- --></A><H3>
+concat</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt; <B>concat</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;a,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;b,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;c)</PRE>
+<DL>
+<DD>Combines three iterators into a single iterator. The returned iterator
+ iterates across the elements in <code>a</code>, followed by the elements in
+ <code>b</code>, followed by the elements in <code>c</code>. The source iterators
+ are not polled until necessary.
+
+ <p>The returned iterator supports <code>remove()</code> when the corresponding
+ input iterator supports it.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="concat(java.util.Iterator, java.util.Iterator, java.util.Iterator, java.util.Iterator)"><!-- --></A><H3>
+concat</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt; <B>concat</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;a,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;b,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;c,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;d)</PRE>
+<DL>
+<DD>Combines four iterators into a single iterator. The returned iterator
+ iterates across the elements in <code>a</code>, followed by the elements in
+ <code>b</code>, followed by the elements in <code>c</code>, followed by the elements
+ in <code>d</code>. The source iterators are not polled until necessary.
+
+ <p>The returned iterator supports <code>remove()</code> when the corresponding
+ input iterator supports it.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="concat(java.util.Iterator...)"><!-- --></A><H3>
+concat</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt; <B>concat</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;...&nbsp;inputs)</PRE>
+<DL>
+<DD>Combines multiple iterators into a single iterator. The returned iterator
+ iterates across the elements of each iterator in <code>inputs</code>. The input
+ iterators are not polled until necessary.
+
+ <p>The returned iterator supports <code>remove()</code> when the corresponding
+ input iterator supports it.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of the provided iterators is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="concat(java.util.Iterator)"><!-- --></A><H3>
+concat</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt; <B>concat</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&gt;&nbsp;inputs)</PRE>
+<DL>
+<DD>Combines multiple iterators into a single iterator. The returned iterator
+ iterates across the elements of each iterator in <code>inputs</code>. The input
+ iterators are not polled until necessary.
+
+ <p>The returned iterator supports <code>remove()</code> when the corresponding
+ input iterator supports it. The methods of the returned iterator may throw
+ <code>NullPointerException</code> if any of the input iterators are null.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="partition(java.util.Iterator, int)"><!-- --></A><H3>
+partition</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&gt; <B>partition</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
+ int&nbsp;size)</PRE>
+<DL>
+<DD>Divides an iterator into unmodifiable sublists of the given size (the final
+ list may be smaller). For example, partitioning an iterator containing
+ <code>[a, b, c, d, e]</code> with a partition size of 3 yields <code>[[a, b, c], [d, e]]</code> -- an outer iterator containing two inner lists of
+ three and two elements, all in the original order.
+
+ <p>The returned lists implement <A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util"><CODE>RandomAccess</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>iterator</CODE> - the iterator to return a partitioned view of<DD><CODE>size</CODE> - the desired size of each partition (the last may be smaller)
+<DT><B>Returns:</B><DD>an iterator of immutable lists containing the elements of <code>iterator</code> divided into partitions
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>size</code> is nonpositive</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="paddedPartition(java.util.Iterator, int)"><!-- --></A><H3>
+paddedPartition</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&gt; <B>paddedPartition</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
+ int&nbsp;size)</PRE>
+<DL>
+<DD>Divides an iterator into unmodifiable sublists of the given size, padding
+ the final iterator with null values if necessary. For example, partitioning
+ an iterator containing <code>[a, b, c, d, e]</code> with a partition size of 3
+ yields <code>[[a, b, c], [d, e, null]]</code> -- an outer iterator containing
+ two inner lists of three elements each, all in the original order.
+
+ <p>The returned lists implement <A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util"><CODE>RandomAccess</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>iterator</CODE> - the iterator to return a partitioned view of<DD><CODE>size</CODE> - the desired size of each partition
+<DT><B>Returns:</B><DD>an iterator of immutable lists containing the elements of <code>iterator</code> divided into partitions (the final iterable may have
+ trailing null elements)
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>size</code> is nonpositive</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="filter(java.util.Iterator, com.google.common.base.Predicate)"><!-- --></A><H3>
+filter</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt; <B>filter</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;unfiltered,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</PRE>
+<DL>
+<DD>Returns the elements of <code>unfiltered</code> that satisfy a predicate.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="filter(java.util.Iterator, java.lang.Class)"><!-- --></A><H3>
+filter</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt; <B>filter</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;unfiltered,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</PRE>
+<DL>
+<DD>Returns all instances of class <code>type</code> in <code>unfiltered</code>. The
+ returned iterator has elements whose class is <code>type</code> or a subclass of
+ <code>type</code>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>unfiltered</CODE> - an iterator containing objects of any type<DD><CODE>type</CODE> - the type of elements desired
+<DT><B>Returns:</B><DD>an unmodifiable iterator containing all elements of the original
+ iterator that were of the requested type</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="any(java.util.Iterator, com.google.common.base.Predicate)"><!-- --></A><H3>
+any</H3>
+<PRE>
+public static &lt;T&gt; boolean <B>any</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</PRE>
+<DL>
+<DD>Returns <code>true</code> if one or more elements returned by <code>iterator</code>
+ satisfy the given predicate.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="all(java.util.Iterator, com.google.common.base.Predicate)"><!-- --></A><H3>
+all</H3>
+<PRE>
+public static &lt;T&gt; boolean <B>all</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</PRE>
+<DL>
+<DD>Returns <code>true</code> if every element returned by <code>iterator</code>
+ satisfies the given predicate. If <code>iterator</code> is empty, <code>true</code>
+ is returned.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="find(java.util.Iterator, com.google.common.base.Predicate)"><!-- --></A><H3>
+find</H3>
+<PRE>
+public static &lt;T&gt; T <B>find</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</PRE>
+<DL>
+<DD>Returns the first element in <code>iterator</code> that satisfies the given
+ predicate. If a matching element is found, the iterator will be left in a
+ state such that calling <code>iterator.remove()</code> will remove the found
+ item. If no such element is found, the iterator will be left exhausted: its
+ <code>hasNext()</code> method will return <code>false</code>.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the first matching element in <code>iterator</code>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/NoSuchElementException.html?is-external=true" title="class or interface in java.util">NoSuchElementException</A></CODE> - if no element in <code>iterator</code> matches
+ the given predicate</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="transform(java.util.Iterator, com.google.common.base.Function)"><!-- --></A><H3>
+transform</H3>
+<PRE>
+public static &lt;F,T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt; <B>transform</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;F&gt;&nbsp;fromIterator,
+ <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,? extends T&gt;&nbsp;function)</PRE>
+<DL>
+<DD>Returns an iterator that applies <code>function</code> to each element of <code>fromIterator</code>.
+
+ <p>The returned iterator supports <code>remove()</code> if the provided iterator
+ does. After a successful <code>remove()</code> call, <code>fromIterator</code> no
+ longer contains the corresponding element.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(java.util.Iterator, int)"><!-- --></A><H3>
+get</H3>
+<PRE>
+public static &lt;T&gt; T <B>get</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
+ int&nbsp;position)</PRE>
+<DL>
+<DD>Advances <code>iterator</code> <code>position + 1</code> times, returning the element
+ at the <code>position</code>th position.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>position</CODE> - position of the element to return
+<DT><B>Returns:</B><DD>the element at the specified position in <code>iterator</code>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang">IndexOutOfBoundsException</A></CODE> - if <code>position</code> is negative or
+ greater than or equal to the number of elements remaining in
+ <code>iterator</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getLast(java.util.Iterator)"><!-- --></A><H3>
+getLast</H3>
+<PRE>
+public static &lt;T&gt; T <B>getLast</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator)</PRE>
+<DL>
+<DD>Advances <code>iterator</code> to the end, returning the last element.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the last element of <code>iterator</code>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/NoSuchElementException.html?is-external=true" title="class or interface in java.util">NoSuchElementException</A></CODE> - if the iterator has no remaining elements</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="forArray(java.lang.Object[])"><!-- --></A><A NAME="forArray(T...)"><!-- --></A><H3>
+forArray</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt; <B>forArray</B>(T...&nbsp;array)</PRE>
+<DL>
+<DD>Returns an iterator containing the elements of <code>array</code> in order. The
+ returned iterator is a view of the array; subsequent changes to the array
+ will be reflected in the iterator.
+
+ <p><b>Note:</b> It is often preferable to represent your data using a
+ collection type, for example using <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>, making
+ this method unnecessary.
+
+ <p>The <code>Iterable</code> equivalent of this method is either <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A> or <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>ImmutableList.of(Object[])</CODE></A>}.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="singletonIterator(java.lang.Object)"><!-- --></A><A NAME="singletonIterator(T)"><!-- --></A><H3>
+singletonIterator</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt; <B>singletonIterator</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ T&nbsp;value)</PRE>
+<DL>
+<DD>Returns an iterator containing only <code>value</code>.
+
+ <p>The <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang"><CODE>Iterable</CODE></A> equivalent of this method is <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#singleton(T)" title="class or interface in java.util"><CODE>Collections.singleton(T)</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="forEnumeration(java.util.Enumeration)"><!-- --></A><H3>
+forEnumeration</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt; <B>forEnumeration</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Enumeration.html?is-external=true" title="class or interface in java.util">Enumeration</A>&lt;T&gt;&nbsp;enumeration)</PRE>
+<DL>
+<DD>Adapts an <code>Enumeration</code> to the <code>Iterator</code> interface.
+
+ <p>This method has no equivalent in <A HREF="../../../../com/google/common/collect/Iterables.html" title="class in com.google.common.collect"><CODE>Iterables</CODE></A> because viewing an
+ <code>Enumeration</code> as an <code>Iterable</code> is impossible. However, the
+ contents can be <i>copied</i> into a collection using <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#list(java.util.Enumeration)" title="class or interface in java.util"><CODE>Collections.list(java.util.Enumeration<T>)</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="asEnumeration(java.util.Iterator)"><!-- --></A><H3>
+asEnumeration</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Enumeration.html?is-external=true" title="class or interface in java.util">Enumeration</A>&lt;T&gt; <B>asEnumeration</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator)</PRE>
+<DL>
+<DD>Adapts an <code>Iterator</code> to the <code>Enumeration</code> interface.
+
+ <p>The <code>Iterable</code> equivalent of this method is either <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#enumeration(java.util.Collection)" title="class or interface in java.util"><CODE>Collections.enumeration(java.util.Collection<T>)</CODE></A> (if you have a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A>), or
+ <code>Iterators.asEnumeration(collection.iterator())</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="peekingIterator(java.util.Iterator)"><!-- --></A><H3>
+peekingIterator</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect">PeekingIterator</A>&lt;T&gt; <B>peekingIterator</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;iterator)</PRE>
+<DL>
+<DD>Returns a <code>PeekingIterator</code> backed by the given iterator.
+
+ <p>Calls to the <code>peek</code> method with no intervening calls to <code>next</code> do not affect the iteration, and hence return the same object each
+ time. A subsequent call to <code>next</code> is guaranteed to return the same
+ object again. For example: <pre> <code>PeekingIterator&lt;String&gt; peekingIterator =
+ Iterators.peekingIterator(Iterators.forArray("a", "b"));
+ String a1 = peekingIterator.peek(); // returns "a"
+ String a2 = peekingIterator.peek(); // also returns "a"
+ String a3 = peekingIterator.next(); // also returns "a"</code></pre>
+
+ Any structural changes to the underlying iteration (aside from those
+ performed by the iterator's own <A HREF="../../../../com/google/common/collect/PeekingIterator.html#remove()"><CODE>PeekingIterator.remove()</CODE></A> method)
+ will leave the iterator in an undefined state.
+
+ <p>The returned iterator does not support removal after peeking, as
+ explained by <A HREF="../../../../com/google/common/collect/PeekingIterator.html#remove()"><CODE>PeekingIterator.remove()</CODE></A>.
+
+ <p>Note: If the given iterator is already a <code>PeekingIterator</code>,
+ it <i>might</i> be returned to the caller, although this is neither
+ guaranteed to occur nor required to be consistent. For example, this
+ method <i>might</i> choose to pass through recognized implementations of
+ <code>PeekingIterator</code> when the behavior of the implementation is
+ known to meet the contract guaranteed by this method.
+
+ <p>There is no <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang"><CODE>Iterable</CODE></A> equivalent to this method, so use this
+ method to wrap each individual iterator as it is generated.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>iterator</CODE> - the backing iterator. The <A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect"><CODE>PeekingIterator</CODE></A> assumes
+ ownership of this iterator, so users should cease making direct calls
+ to it after calling this method.
+<DT><B>Returns:</B><DD>a peeking iterator backed by that iterator. Apart from the
+ additional <A HREF="../../../../com/google/common/collect/PeekingIterator.html#peek()"><CODE>PeekingIterator.peek()</CODE></A> method, this iterator behaves
+ exactly the same as <code>iterator</code>.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Iterators.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/Iterables.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/Iterators.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Iterators.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/LinkedHashMultimap.html b/javadoc/com/google/common/collect/LinkedHashMultimap.html
new file mode 100644
index 0000000..bb7c649
--- /dev/null
+++ b/javadoc/com/google/common/collect/LinkedHashMultimap.html
@@ -0,0 +1,975 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+LinkedHashMultimap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="LinkedHashMultimap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/LinkedHashMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/Iterators.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/LinkedHashMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="LinkedHashMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class LinkedHashMultimap&lt;K,V&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.LinkedHashMultimap&lt;K,V&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;, <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public final class <B>LinkedHashMultimap&lt;K,V&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+Implementation of <code>Multimap</code> that does not allow duplicate key-value
+ entries and that returns collections whose iterators follow the ordering in
+ which the data was added to the multimap.
+
+ <p>The collections returned by <code>keySet</code>, <code>keys</code>, and <code>asMap</code> iterate through the keys in the order they were first added to the
+ multimap. Similarly, <code>get</code>, <code>removeAll</code>, and <code>replaceValues</code> return collections that iterate through the values in the
+ order they were added. The collections generated by <code>entries</code> and
+ <code>values</code> iterate across the key-value mappings in the order they were
+ added to the multimap.
+
+ <p>The iteration ordering of the collections generated by <code>keySet</code>,
+ <code>keys</code>, and <code>asMap</code> has a few subtleties. As long as the set of
+ keys remains unchanged, adding or removing mappings does not affect the key
+ iteration order. However, if you remove all values associated with a key and
+ then add the key back to the multimap, that key will come last in the key
+ iteration order.
+
+ <p>The multimap does not store duplicate key-value pairs. Adding a new
+ key-value pair equal to an existing key-value pair has no effect.
+
+ <p>Keys and values may be null. All optional multimap methods are supported,
+ and all returned views are modifiable.
+
+ <p>This class is not threadsafe when any concurrent operations update the
+ multimap. Concurrent read operations will work correctly. To allow concurrent
+ update operations, wrap your multimap with a call to <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedSetMultimap(com.google.common.collect.SetMultimap)"><CODE>Multimaps.synchronizedSetMultimap(com.google.common.collect.SetMultimap<K, V>)</CODE></A>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Jared Levy</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.LinkedHashMultimap">Serialized Form</A></DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#asMap()">asMap</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map view that associates each key with the corresponding values
+ in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#clear()">clear</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all key-value pairs from the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified key-value pair.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#containsKey(java.lang.Object)">containsKey</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains any values for the specified
+ key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified value for any
+ key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#create()">create</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>LinkedHashMultimap</code> with the default initial
+ capacities.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#create(int, int)">create</A></B>(int&nbsp;expectedKeys,
+ int&nbsp;expectedValuesPerKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an empty <code>LinkedHashMultimap</code> with enough capacity to hold
+ the specified numbers of keys and values without rehashing.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a <code>LinkedHashMultimap</code> with the same mappings as the
+ specified multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#entries()">entries</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a set of all key-value pairs.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object to this multimap for equality.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#get(K)">get</A></B>(K&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection view of all values associated with a key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the hash code for this multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#isEmpty()">isEmpty</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains no key-value pairs.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;K&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#keys()">keys</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection, which may contain duplicates, of all keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;K&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#keySet()">keySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of all keys, each appearing once in the returned set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#put(K, V)">put</A></B>(K&nbsp;key,
+ V&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a key-value pair in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#putAll(K, java.lang.Iterable)">putAll</A></B>(K&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all of another multimap's key-value pairs into this multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a key-value pair from the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all values associated with a given key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key, replacing any existing
+ values for that key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#size()">size</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of key-value pairs in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string representation of the multimap, generated by calling
+ <code>toString</code> on the map returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#values()">values</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all values in the multimap.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.SetMultimap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#asMap()">asMap</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.Multimap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="create()"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>&lt;K,V&gt; <B>create</B>()</PRE>
+<DL>
+<DD>Creates a new, empty <code>LinkedHashMultimap</code> with the default initial
+ capacities.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="create(int, int)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>&lt;K,V&gt; <B>create</B>(int&nbsp;expectedKeys,
+ int&nbsp;expectedValuesPerKey)</PRE>
+<DL>
+<DD>Constructs an empty <code>LinkedHashMultimap</code> with enough capacity to hold
+ the specified numbers of keys and values without rehashing.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>expectedKeys</CODE> - the expected number of distinct keys<DD><CODE>expectedValuesPerKey</CODE> - the expected average number of values per key
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>expectedKeys</code> or <code>expectedValuesPerKey</code> is negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="create(com.google.common.collect.Multimap)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>&lt;K,V&gt; <B>create</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</PRE>
+<DL>
+<DD>Constructs a <code>LinkedHashMultimap</code> with the same mappings as the
+ specified multimap. If a key-value mapping appears multiple times in the
+ input multimap, it only appears once in the constructed multimap. The new
+ multimap has the same <A HREF="../../../../com/google/common/collect/Multimap.html#entries()"><CODE>Multimap.entries()</CODE></A> iteration order as the
+ input multimap, except for excluding duplicate mappings.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - the multimap whose contents are copied to this multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="replaceValues(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="replaceValues(K, java.lang.Iterable)"><!-- --></A><H3>
+replaceValues</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt; <B>replaceValues</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt;&nbsp;values)</PRE>
+<DL>
+<DD>Stores a collection of values with the same key, replacing any existing
+ values for that key.
+
+ <p>The returned collection is immutable.
+
+ <p>Any duplicates in <code>values</code> will be stored in the multimap once.
+
+ <p>If <code>values</code> is not empty and the multimap already contains a
+ mapping for <code>key</code>, the <code>keySet()</code> ordering is unchanged.
+ However, the provided values always come last in the <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#entries()"><CODE>entries()</CODE></A> and
+ <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#values()"><CODE>values()</CODE></A> iteration orderings.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
+<DT><B>Returns:</B><DD>the collection of replaced values, or an empty collection if no
+ values were previously associated with the key. The collection
+ <i>may</i> be modifiable, but updating it will have no effect on the
+ multimap.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entries()"><!-- --></A><H3>
+entries</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt;&gt; <B>entries</B>()</PRE>
+<DL>
+<DD>Returns a set of all key-value pairs. Changes to the returned set will
+ update the underlying multimap, and vice versa. The entries set does not
+ support the <code>add</code> or <code>addAll</code> operations.
+
+ <p>The iterator generated by the returned set traverses the entries in the
+ order they were added to the multimap.
+
+ <p>Each entry is an immutable snapshot of a key-value mapping in the
+ multimap, taken at the time the entry is returned by a method call to the
+ collection or its iterator.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#entries()">entries</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#entries()">entries</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>collection of map entries consisting of key-value pairs</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="values()"><!-- --></A><H3>
+values</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt; <B>values</B>()</PRE>
+<DL>
+<DD>Returns a collection of all values in the multimap. Changes to the returned
+ collection will update the underlying multimap, and vice versa.
+
+ <p>The iterator generated by the returned collection traverses the values
+ in the order they were added to the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>collection of values, which may include the same value multiple
+ times if it occurs in multiple mappings</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(java.lang.Object)"><!-- --></A><A NAME="get(K)"><!-- --></A><H3>
+get</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt; <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ K&nbsp;key)</PRE>
+<DL>
+<DD>Returns a collection view of all values associated with a key. If no
+ mappings in the multimap have the provided key, an empty collection is
+ returned.
+
+ <p>Changes to the returned collection will update the underlying multimap,
+ and vice versa.
+
+ <p>The returned collection is not serializable.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap
+<DT><B>Returns:</B><DD>the collection of values that the key maps to</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
+removeAll</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt; <B>removeAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD>Removes all values associated with a given key.
+
+ <p>The returned collection is immutable.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entries to remove from the multimap
+<DT><B>Returns:</B><DD>the collection of removed values, or an empty collection if no
+ values were associated with the provided key. The collection
+ <i>may</i> be modifiable, but updating it will have no effect on the
+ multimap.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
+put</H3>
+<PRE>
+public boolean <B>put</B>(K&nbsp;key,
+ V&nbsp;value)</PRE>
+<DL>
+<DD>Stores a key-value pair in the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>value</CODE> - value to store in the multimap
+<DT><B>Returns:</B><DD><code>true</code> if the method increased the size of the multimap, or
+ <code>false</code> if the multimap already contained the key-value pair</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD>Compares the specified object to this multimap for equality.
+
+ <p>Two <code>SetMultimap</code> instances are equal if, for each key, they
+ contain the same values. Equality does not depend on the ordering of keys
+ or values.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="size()"><!-- --></A><H3>
+size</H3>
+<PRE>
+public int <B>size</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">Multimap</A></CODE></B></DD>
+<DD>Returns the number of key-value pairs in the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isEmpty()"><!-- --></A><H3>
+isEmpty</H3>
+<PRE>
+public boolean <B>isEmpty</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains no key-value pairs.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsKey(java.lang.Object)"><!-- --></A><H3>
+containsKey</H3>
+<PRE>
+public boolean <B>containsKey</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains any values for the specified
+ key.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
+containsValue</H3>
+<PRE>
+public boolean <B>containsValue</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains the specified value for any
+ key.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>value</CODE> - value to search for in multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsEntry(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
+containsEntry</H3>
+<PRE>
+public boolean <B>containsEntry</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains the specified key-value pair.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap<DD><CODE>value</CODE> - value to search for in multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public boolean <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Removes a key-value pair from the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entry to remove from the multimap<DD><CODE>value</CODE> - value of entry to remove the multimap
+<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="putAll(K, java.lang.Iterable)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public boolean <B>putAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ K&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">Multimap</A></CODE></B></DD>
+<DD>Stores a collection of values with the same key.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
+<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(com.google.common.collect.Multimap)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public boolean <B>putAll</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">Multimap</A></CODE></B></DD>
+<DD>Copies all of another multimap's key-value pairs into this multimap. The
+ order in which the mappings are added is determined by
+ <code>multimap.entries()</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - mappings to store in this multimap
+<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clear()"><!-- --></A><H3>
+clear</H3>
+<PRE>
+public void <B>clear</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">Multimap</A></CODE></B></DD>
+<DD>Removes all key-value pairs from the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keySet()"><!-- --></A><H3>
+keySet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;K&gt; <B>keySet</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">Multimap</A></CODE></B></DD>
+<DD>Returns the set of all keys, each appearing once in the returned set.
+ Changes to the returned set will update the underlying multimap, and vice
+ versa.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the collection of distinct keys</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keys()"><!-- --></A><H3>
+keys</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;K&gt; <B>keys</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">Multimap</A></CODE></B></DD>
+<DD>Returns a collection, which may contain duplicates, of all keys. The number
+ of times of key appears in the returned multiset equals the number of
+ mappings the key has in the multimap. Changes to the returned multiset will
+ update the underlying multimap, and vice versa.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a multiset with keys corresponding to the distinct keys of the
+ multimap and frequencies corresponding to the number of values that
+ each key maps to</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="asMap()"><!-- --></A><H3>
+asMap</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt; <B>asMap</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">Multimap</A></CODE></B></DD>
+<DD>Returns a map view that associates each key with the corresponding values
+ in the multimap. Changes to the returned map, such as element removal,
+ will update the underlying multimap. The map does not support
+ <code>setValue()</code> on its entries, <code>put</code>, or <code>putAll</code>.
+
+ <p>The collections returned by <code>asMap().get(Object)</code> have the same
+ behavior as those returned by <A HREF="../../../../com/google/common/collect/Multimap.html#get(K)"><CODE>Multimap.get(K)</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a map view from a key to its collection of values</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+public int <B>hashCode</B>()</PRE>
+<DL>
+<DD>Returns the hash code for this multimap.
+
+ <p>The hash code of a multimap is defined as the hash code of the map view,
+ as returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util"><CODE>Map.hashCode()</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Returns a string representation of the multimap, generated by calling
+ <code>toString</code> on the map returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a string representation of the multimap</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/LinkedHashMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/Iterators.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/LinkedHashMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="LinkedHashMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/LinkedHashMultiset.html b/javadoc/com/google/common/collect/LinkedHashMultiset.html
new file mode 100644
index 0000000..b9fdd43
--- /dev/null
+++ b/javadoc/com/google/common/collect/LinkedHashMultiset.html
@@ -0,0 +1,1159 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+LinkedHashMultiset (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="LinkedHashMultiset (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/LinkedHashMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/LinkedHashMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="LinkedHashMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class LinkedHashMultiset&lt;E&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">java.util.AbstractCollection</A>&lt;E&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.LinkedHashMultiset&lt;E&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public final class <B>LinkedHashMultiset&lt;E&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</DL>
+</PRE>
+
+<P>
+A <code>Multiset</code> implementation with predictable iteration order. Its
+ iterator orders elements according to when the first occurrence of the
+ element was added. When the multiset contains multiple instances of an
+ element, those instances are consecutive in the iteration order. If all
+ occurrences of an element are removed, after which that element is added to
+ the multiset, the element will appear at the end of the iteration.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion, Jared Levy</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.LinkedHashMultiset">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="nested_classes_inherited_from_class_com.google.common.collect.Multiset"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="type parameter in Multiset.Entry">E</A>&gt;</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#add(E)">add</A></B>(E&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures that this collection contains the specified element (optional
+ operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#add(E, int)">add</A></B>(E&nbsp;element,
+ int&nbsp;occurrences)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a number of occurrences of an element to this multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#addAll(java.util.Collection)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends E&gt;&nbsp;elementsToAdd)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds all of the elements in the specified collection to this collection
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#clear()">clear</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all of the elements from this collection (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#contains(java.lang.Object)">contains</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this collection contains the specified element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#containsAll(java.util.Collection)">containsAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this collection contains all of the elements
+ in the specified collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#count(java.lang.Object)">count</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of occurrences of an element in this multiset (the
+ <i>count</i> of the element).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#create()">create</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>LinkedHashMultiset</code> using the default initial
+ capacity.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#create(int)">create</A></B>(int&nbsp;distinctElements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>LinkedHashMultiset</code> with the specified expected
+ number of distinct elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#create(java.lang.Iterable)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>LinkedHashMultiset</code> containing the specified elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#elementSet()">elementSet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of distinct elements contained in this multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;E&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#entrySet()">entrySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
+ the count of that element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indicates whether some other object is "equal to" this one.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code value for the object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#isEmpty()">isEmpty</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this collection contains no elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#iterator()">iterator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator over the elements contained in this collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a single instance of the specified element from this
+ collection, if it is present (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#remove(java.lang.Object, int)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
+ int&nbsp;occurrences)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a number of occurrences of the specified element from this
+ multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#removeAll(java.util.Collection)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all of this collection's elements that are also contained in the
+ specified collection (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#retainAll(java.util.Collection)">retainAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retains only the elements in this collection that are contained in the
+ specified collection (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#setCount(E, int)">setCount</A></B>(E&nbsp;element,
+ int&nbsp;count)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds or removes the necessary occurrences of an element such that the
+ element attains the desired count.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#setCount(E, int, int)">setCount</A></B>(E&nbsp;element,
+ int&nbsp;oldCount,
+ int&nbsp;newCount)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Conditionally sets the count of an element to a new value, as described in
+ <A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)"><CODE>Multiset.setCount(Object, int)</CODE></A>, provided that the element has the expected
+ current count.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#size()">size</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of elements in this collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string representation of this collection.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.AbstractCollection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Collection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="create()"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>&lt;E&gt; <B>create</B>()</PRE>
+<DL>
+<DD>Creates a new, empty <code>LinkedHashMultiset</code> using the default initial
+ capacity.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="create(int)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>&lt;E&gt; <B>create</B>(int&nbsp;distinctElements)</PRE>
+<DL>
+<DD>Creates a new, empty <code>LinkedHashMultiset</code> with the specified expected
+ number of distinct elements.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>distinctElements</CODE> - the expected number of distinct elements
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>distinctElements</code> is negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="create(java.lang.Iterable)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>&lt;E&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Creates a new <code>LinkedHashMultiset</code> containing the specified elements.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements that the multiset should contain</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entrySet()"><!-- --></A><H3>
+entrySet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;E&gt;&gt; <B>entrySet</B>()</PRE>
+<DL>
+<DD>Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
+ the count of that element. This set contains exactly one entry for each
+ distinct element in the multiset (thus it always has the same size as the
+ <A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()"><CODE>Multiset.elementSet()</CODE></A>). The order of the elements in the element set is
+ unspecified.
+
+ <p>The entry set is backed by the same data as the multiset, so any change
+ to either is immediately reflected in the other. However, multiset changes
+ may or may not be reflected in any <code>Entry</code> instances already
+ retrieved from the entry set (this is implementation-dependent).
+ Furthermore, implementations are not required to support modifications to
+ the entry set at all, and the <code>Entry</code> instances themselves don't
+ even have methods for modification. See the specific implementation class
+ for more details on how its entry set handles modifications.
+
+ <p>Invoking <A HREF="../../../../com/google/common/collect/Multiset.Entry.html#getCount()"><CODE>Multiset.Entry.getCount()</CODE></A> on an entry in the returned
+ set always returns the current count of that element in the multiset, as
+ opposed to the count at the time the entry was retrieved.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()">entrySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a set of entries representing the data of this multiset</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="size()"><!-- --></A><H3>
+size</H3>
+<PRE>
+public int <B>size</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">java.util.Collection</A></CODE></B></DD>
+<DD>Returns the number of elements in this collection. If this collection
+ contains more than <tt>Integer.MAX_VALUE</tt> elements, returns
+ <tt>Integer.MAX_VALUE</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the number of elements in this collection</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="iterator()"><!-- --></A><H3>
+iterator</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt; <B>iterator</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#iterator()" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Returns an iterator over the elements contained in this collection.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#iterator()">iterator</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true#iterator()" title="class or interface in java.lang">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>an iterator over the elements contained in this collection</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="count(java.lang.Object)"><!-- --></A><H3>
+count</H3>
+<PRE>
+public int <B>count</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">Multiset</A></CODE></B></DD>
+<DD>Returns the number of occurrences of an element in this multiset (the
+ <i>count</i> of the element). Note that for an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>-based
+ multiset, this gives the same result as <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#frequency(java.util.Collection, java.lang.Object)" title="class or interface in java.util"><CODE>Collections.frequency(java.util.Collection<?>, java.lang.Object)</CODE></A>
+ (which would presumably perform more poorly).
+
+ <p><b>Note:</b> the utility method <A HREF="../../../../com/google/common/collect/Iterables.html#frequency(java.lang.Iterable, java.lang.Object)"><CODE>Iterables.frequency(java.lang.Iterable<?>, java.lang.Object)</CODE></A> generalizes
+ this operation; it correctly delegates to this method when dealing with a
+ multiset, but it can also accept any other iterable type.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">count</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to count occurrences of
+<DT><B>Returns:</B><DD>the number of occurrences of the element in this multiset; possibly
+ zero but never negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="add(java.lang.Object,int)"><!-- --></A><A NAME="add(E, int)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public int <B>add</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ E&nbsp;element,
+ int&nbsp;occurrences)</PRE>
+<DL>
+<DD>Adds a number of occurrences of an element to this multiset. Note that if
+ <code>occurrences == 1</code>, this method has the identical effect to <A HREF="../../../../com/google/common/collect/Multiset.html#add(E)"><CODE>Multiset.add(Object)</CODE></A>. This method is functionally equivalent (except in the case
+ of overflow) to the call <code>addAll(Collections.nCopies(element,
+ occurrences))</code>, which would presumably perform much more poorly.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E, int)">add</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add occurrences of; may be <code>null</code> only
+ if explicitly allowed by the implementation<DD><CODE>occurrences</CODE> - the number of occurrences of the element to add. May be
+ zero, in which case no change will be made.
+<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the call would result in more than
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Integer.MAX_VALUE</CODE></A> occurrences of <code>element</code> in this
+ multiset.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object, int)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public int <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
+ int&nbsp;occurrences)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object, int)">Multiset</A></CODE></B></DD>
+<DD>Removes a number of occurrences of the specified element from this
+ multiset. If the multiset contains fewer than this number of occurrences to
+ begin with, all occurrences will be removed. Note that if
+ <code>occurrences == 1</code>, this is functionally equivalent to the call
+ <code>remove(element)</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object, int)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally remove occurrences of<DD><CODE>occurrences</CODE> - the number of occurrences of the element to remove. May
+ be zero, in which case no change will be made.
+<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setCount(java.lang.Object,int)"><!-- --></A><A NAME="setCount(E, int)"><!-- --></A><H3>
+setCount</H3>
+<PRE>
+public int <B>setCount</B>(E&nbsp;element,
+ int&nbsp;count)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)">Multiset</A></CODE></B></DD>
+<DD>Adds or removes the necessary occurrences of an element such that the
+ element attains the desired count.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add or remove occurrences of; may be null
+ only if explicitly allowed by the implementation<DD><CODE>count</CODE> - the desired count of the element in this multiset
+<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isEmpty()"><!-- --></A><H3>
+isEmpty</H3>
+<PRE>
+public boolean <B>isEmpty</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#isEmpty()" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this collection contains no elements.
+
+ <p>This implementation returns <tt>size() == 0</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection contains no elements</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="contains(java.lang.Object)"><!-- --></A><H3>
+contains</H3>
+<PRE>
+public boolean <B>contains</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this collection contains the specified element.
+ More formally, returns <tt>true</tt> if and only if this collection
+ contains at least one element <tt>e</tt> such that
+ <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>.
+
+ <p>This implementation iterates over the elements in the collection,
+ checking each element in turn for equality with the specified element.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#contains(java.lang.Object)">contains</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - element whose presence in this collection is to be tested
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection contains the specified
+ element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="add(java.lang.Object)"><!-- --></A><A NAME="add(E)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public boolean <B>add</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ E&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#add(E)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Ensures that this collection contains the specified element (optional
+ operation). Returns <tt>true</tt> if this collection changed as a
+ result of the call. (Returns <tt>false</tt> if this collection does
+ not permit duplicates and already contains the specified element.)<p>
+
+ Collections that support this operation may place limitations on what
+ elements may be added to this collection. In particular, some
+ collections will refuse to add <tt>null</tt> elements, and others will
+ impose restrictions on the type of elements that may be added.
+ Collection classes should clearly specify in their documentation any
+ restrictions on what elements may be added.<p>
+
+ If a collection refuses to add a particular element for any reason
+ other than that it already contains the element, it <i>must</i> throw
+ an exception (rather than returning <tt>false</tt>). This preserves
+ the invariant that a collection always contains the specified element
+ after this call returns.
+
+ <p>This implementation always throws an
+ <tt>UnsupportedOperationException</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E)">add</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - element whose presence in this collection is to be ensured
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the
+ call</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public boolean <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Removes a single instance of the specified element from this
+ collection, if it is present (optional operation). More formally,
+ removes an element <tt>e</tt> such that
+ <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>, if
+ this collection contains one or more such elements. Returns
+ <tt>true</tt> if this collection contained the specified element (or
+ equivalently, if this collection changed as a result of the call).
+
+ <p>This implementation iterates over the collection looking for the
+ specified element. If it finds the element, it removes the element
+ from the collection using the iterator's remove method.
+
+ <p>Note that this implementation throws an
+ <tt>UnsupportedOperationException</tt> if the iterator returned by this
+ collection's iterator method does not implement the <tt>remove</tt>
+ method and this collection contains the specified object.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - element to be removed from this collection, if present
+<DT><B>Returns:</B><DD><tt>true</tt> if an element was removed as a result of this call</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setCount(java.lang.Object,int,int)"><!-- --></A><A NAME="setCount(E, int, int)"><!-- --></A><H3>
+setCount</H3>
+<PRE>
+public boolean <B>setCount</B>(E&nbsp;element,
+ int&nbsp;oldCount,
+ int&nbsp;newCount)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int, int)">Multiset</A></CODE></B></DD>
+<DD>Conditionally sets the count of an element to a new value, as described in
+ <A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)"><CODE>Multiset.setCount(Object, int)</CODE></A>, provided that the element has the expected
+ current count. If the current count is not <code>oldCount</code>, no change is
+ made.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally set the count of; may be null
+ only if explicitly allowed by the implementation<DD><CODE>oldCount</CODE> - the expected present count of the element in this multiset<DD><CODE>newCount</CODE> - the desired count of the element in this multiset
+<DT><B>Returns:</B><DD><code>true</code> if the condition for modification was met. This
+ implies that the multiset was indeed modified, unless
+ <code>oldCount == newCount</code>.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsAll(java.util.Collection)"><!-- --></A><H3>
+containsAll</H3>
+<PRE>
+public boolean <B>containsAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elements)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this collection contains all of the elements
+ in the specified collection.
+
+ <p>This implementation iterates over the specified collection,
+ checking each element returned by the iterator in turn to see
+ if it's contained in this collection. If all elements are so
+ contained <tt>true</tt> is returned, otherwise <tt>false</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#containsAll(java.util.Collection)">containsAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - collection to be checked for containment in this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection contains all of the elements
+ in the specified collection<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>AbstractCollection.contains(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addAll(java.util.Collection)"><!-- --></A><H3>
+addAll</H3>
+<PRE>
+public boolean <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends E&gt;&nbsp;elementsToAdd)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Adds all of the elements in the specified collection to this collection
+ (optional operation). The behavior of this operation is undefined if
+ the specified collection is modified while the operation is in progress.
+ (This implies that the behavior of this call is undefined if the
+ specified collection is this collection, and this collection is
+ nonempty.)
+
+ <p>This implementation iterates over the specified collection, and adds
+ each object returned by the iterator to this collection, in turn.
+
+ <p>Note that this implementation will throw an
+ <tt>UnsupportedOperationException</tt> unless <tt>add</tt> is
+ overridden (assuming the specified collection is non-empty).
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elementsToAdd</CODE> - collection containing elements to be added to this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the call<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#add(E)" title="class or interface in java.util"><CODE>AbstractCollection.add(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="removeAll(java.util.Collection)"><!-- --></A><H3>
+removeAll</H3>
+<PRE>
+public boolean <B>removeAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Removes all of this collection's elements that are also contained in the
+ specified collection (optional operation). After this call returns,
+ this collection will contain no elements in common with the specified
+ collection.
+
+ <p>This implementation iterates over this collection, checking each
+ element returned by the iterator in turn to see if it's contained
+ in the specified collection. If it's so contained, it's removed from
+ this collection with the iterator's <tt>remove</tt> method.
+
+ <p>Note that this implementation will throw an
+ <tt>UnsupportedOperationException</tt> if the iterator returned by the
+ <tt>iterator</tt> method does not implement the <tt>remove</tt> method
+ and this collection contains one or more elements in common with the
+ specified collection.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#removeAll(java.util.Collection)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elementsToRemove</CODE> - collection containing elements to be removed from this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the
+ call<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util"><CODE>AbstractCollection.remove(Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>AbstractCollection.contains(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="retainAll(java.util.Collection)"><!-- --></A><H3>
+retainAll</H3>
+<PRE>
+public boolean <B>retainAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Retains only the elements in this collection that are contained in the
+ specified collection (optional operation). In other words, removes from
+ this collection all of its elements that are not contained in the
+ specified collection.
+
+ <p>This implementation iterates over this collection, checking each
+ element returned by the iterator in turn to see if it's contained
+ in the specified collection. If it's not so contained, it's removed
+ from this collection with the iterator's <tt>remove</tt> method.
+
+ <p>Note that this implementation will throw an
+ <tt>UnsupportedOperationException</tt> if the iterator returned by the
+ <tt>iterator</tt> method does not implement the <tt>remove</tt> method
+ and this collection contains one or more elements not present in the
+ specified collection.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#retainAll(java.util.Collection)">retainAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elementsToRetain</CODE> - collection containing elements to be retained in this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the call<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util"><CODE>AbstractCollection.remove(Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>AbstractCollection.contains(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clear()"><!-- --></A><H3>
+clear</H3>
+<PRE>
+public void <B>clear</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#clear()" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Removes all of the elements from this collection (optional operation).
+ The collection will be empty after this method returns.
+
+ <p>This implementation iterates over this collection, removing each
+ element using the <tt>Iterator.remove</tt> operation. Most
+ implementations will probably choose to override this method for
+ efficiency.
+
+ <p>Note that this implementation will throw an
+ <tt>UnsupportedOperationException</tt> if the iterator returned by this
+ collection's <tt>iterator</tt> method does not implement the
+ <tt>remove</tt> method and this collection is non-empty.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="elementSet()"><!-- --></A><H3>
+elementSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt; <B>elementSet</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">Multiset</A></CODE></B></DD>
+<DD>Returns the set of distinct elements contained in this multiset. The
+ element set is backed by the same data as the multiset, so any change to
+ either is immediately reflected in the other. The order of the elements in
+ the element set is unspecified.
+
+ <p>If the element set supports any removal operations, these necessarily
+ cause <b>all</b> occurrences of the removed element(s) to be removed from
+ the multiset. Implementations are not expected to support the add
+ operations, although this is possible.
+
+ <p>A common use for the element set is to find the number of distinct
+ elements in the multiset: <code>elementSet().size()</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">elementSet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a view of the set of distinct elements in this multiset</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD>Indicates whether some other object is "equal to" this one.
+ <p>
+ The <code>equals</code> method implements an equivalence relation
+ on non-null object references:
+ <ul>
+ <li>It is <i>reflexive</i>: for any non-null reference value
+ <code>x</code>, <code>x.equals(x)</code> should return
+ <code>true</code>.
+ <li>It is <i>symmetric</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, <code>x.equals(y)</code>
+ should return <code>true</code> if and only if
+ <code>y.equals(x)</code> returns <code>true</code>.
+ <li>It is <i>transitive</i>: for any non-null reference values
+ <code>x</code>, <code>y</code>, and <code>z</code>, if
+ <code>x.equals(y)</code> returns <code>true</code> and
+ <code>y.equals(z)</code> returns <code>true</code>, then
+ <code>x.equals(z)</code> should return <code>true</code>.
+ <li>It is <i>consistent</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, multiple invocations of
+ <tt>x.equals(y)</tt> consistently return <code>true</code>
+ or consistently return <code>false</code>, provided no
+ information used in <code>equals</code> comparisons on the
+ objects is modified.
+ <li>For any non-null reference value <code>x</code>,
+ <code>x.equals(null)</code> should return <code>false</code>.
+ </ul>
+ <p>
+ The <tt>equals</tt> method for class <code>Object</code> implements
+ the most discriminating possible equivalence relation on objects;
+ that is, for any non-null reference values <code>x</code> and
+ <code>y</code>, this method returns <code>true</code> if and only
+ if <code>x</code> and <code>y</code> refer to the same object
+ (<code>x == y</code> has the value <code>true</code>).
+ <p>
+ Note that it is generally necessary to override the <tt>hashCode</tt>
+ method whenever this method is overridden, so as to maintain the
+ general contract for the <tt>hashCode</tt> method, which states
+ that equal objects must have equal hash codes.
+
+ <p>This implementation returns <code>true</code> if <code>other</code> is a multiset
+ of the same size and if, for each element, the two multisets have the same
+ count.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+public int <B>hashCode</B>()</PRE>
+<DL>
+<DD>Returns a hash code value for the object. This method is
+ supported for the benefit of hashtables such as those provided by
+ <code>java.util.Hashtable</code>.
+ <p>
+ The general contract of <code>hashCode</code> is:
+ <ul>
+ <li>Whenever it is invoked on the same object more than once during
+ an execution of a Java application, the <tt>hashCode</tt> method
+ must consistently return the same integer, provided no information
+ used in <tt>equals</tt> comparisons on the object is modified.
+ This integer need not remain consistent from one execution of an
+ application to another execution of the same application.
+ <li>If two objects are equal according to the <tt>equals(Object)</tt>
+ method, then calling the <code>hashCode</code> method on each of
+ the two objects must produce the same integer result.
+ <li>It is <em>not</em> required that if two objects are unequal
+ according to the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>
+ method, then calling the <tt>hashCode</tt> method on each of the
+ two objects must produce distinct integer results. However, the
+ programmer should be aware that producing distinct integer results
+ for unequal objects may improve the performance of hashtables.
+ </ul>
+ <p>
+ As much as is reasonably practical, the hashCode method defined by
+ class <tt>Object</tt> does return distinct integers for distinct
+ objects. (This is typically implemented by converting the internal
+ address of the object into an integer, but this implementation
+ technique is not required by the
+ Java<font size="-2"><sup>TM</sup></font> programming language.)
+
+ <p>This implementation returns the hash code of <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Returns a string representation of this collection. The string
+ representation consists of a list of the collection's elements in the
+ order they are returned by its iterator, enclosed in square brackets
+ (<tt>"[]"</tt>). Adjacent elements are separated by the characters
+ <tt>", "</tt> (comma and space). Elements are converted to strings as
+ by <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true#valueOf(java.lang.Object)" title="class or interface in java.lang"><CODE>String.valueOf(Object)</CODE></A>.
+
+ <p>This implementation returns the result of invoking <code>toString</code> on
+ <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#toString()">toString</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toString()" title="class or interface in java.util">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a string representation of this collection</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/LinkedHashMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/LinkedHashMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="LinkedHashMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/LinkedListMultimap.html b/javadoc/com/google/common/collect/LinkedListMultimap.html
new file mode 100644
index 0000000..4e1a1fb
--- /dev/null
+++ b/javadoc/com/google/common/collect/LinkedListMultimap.html
@@ -0,0 +1,998 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+LinkedListMultimap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="LinkedListMultimap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/LinkedListMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/LinkedListMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="LinkedListMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class LinkedListMultimap&lt;K,V&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.LinkedListMultimap&lt;K,V&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;, <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public final class <B>LinkedListMultimap&lt;K,V&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DL>
+</PRE>
+
+<P>
+An implementation of <code>ListMultimap</code> that supports deterministic
+ iteration order for both keys and values. The iteration order is preserved
+ across non-distinct key values. For example, for the following multimap
+ definition: <pre> <code>Multimap&lt;K, V&gt; multimap = LinkedListMultimap.create();
+ multimap.put(key1, foo);
+ multimap.put(key2, bar);
+ multimap.put(key1, baz);</code></pre>
+
+ ... the iteration order for <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#keys()"><CODE>keys()</CODE></A> is <code>[key1, key2, key1]</code>,
+ and similarly for <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#entries()"><CODE>entries()</CODE></A>. Unlike <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect"><CODE>LinkedHashMultimap</CODE></A>, the
+ iteration order is kept consistent between keys, entries and values. For
+ example, calling: <pre> <code>map.remove(key1, foo);</code></pre>
+
+ changes the entries iteration order to <code>[key2=bar, key1=baz]</code> and the
+ key iteration order to <code>[key2, key1]</code>. The <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#entries()"><CODE>entries()</CODE></A> iterator
+ returns mutable map entries, and <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#replaceValues(K, java.lang.Iterable)"><CODE>replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> attempts to preserve
+ iteration order as much as possible.
+
+ <p>The collections returned by <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#keySet"><CODE>keySet</CODE></A> and <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#asMap()"><CODE>asMap()</CODE></A> iterate
+ through the keys in the order they were first added to the multimap.
+ Similarly, <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#get(K)"><CODE>get(K)</CODE></A>, <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#removeAll(java.lang.Object)"><CODE>removeAll(java.lang.Object)</CODE></A>, and <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#replaceValues(K, java.lang.Iterable)"><CODE>replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A>
+ return collections that iterate through the values in the order they were
+ added. The collections generated by <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#entries"><CODE>entries</CODE></A>, <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#keys"><CODE>keys</CODE></A>, and
+ <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#values()"><CODE>values()</CODE></A> iterate across the key-value mappings in the order they were
+ added to the multimap.
+
+ <p>Keys and values may be null. All optional multimap methods are supported,
+ and all returned views are modifiable.
+
+ <p>The methods <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#get(K)"><CODE>get(K)</CODE></A>, <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#keySet"><CODE>keySet</CODE></A>, <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#keys"><CODE>keys</CODE></A>, <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#values()"><CODE>values()</CODE></A>,
+ <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#entries"><CODE>entries</CODE></A>, and <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#asMap()"><CODE>asMap()</CODE></A> return collections that are views of the
+ multimap. If the multimap is modified while an iteration over any of those
+ collections is in progress, except through the iterator's own <code>remove</code>
+ operation, the results of the iteration are undefined.
+
+ <p>This class is not threadsafe when any concurrent operations update the
+ multimap. Concurrent read operations will work correctly. To allow concurrent
+ update operations, wrap your multimap with a call to <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedListMultimap(com.google.common.collect.ListMultimap)"><CODE>Multimaps.synchronizedListMultimap(com.google.common.collect.ListMultimap<K, V>)</CODE></A>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Mike Bostock</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.LinkedListMultimap">Serialized Form</A></DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#asMap()">asMap</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map view that associates each key with the corresponding values
+ in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#clear()">clear</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all key-value pairs from the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified key-value pair.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#containsKey(java.lang.Object)">containsKey</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains any values for the specified
+ key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified value for any
+ key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#create()">create</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>LinkedListMultimap</code> with the default initial
+ capacity.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#create(int)">create</A></B>(int&nbsp;expectedKeys)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an empty <code>LinkedListMultimap</code> with enough capacity to hold
+ the specified number of keys without rehashing.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a <code>LinkedListMultimap</code> with the same mappings as the
+ specified <code>Multimap</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#entries()">entries</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all key-value pairs.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;other)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object to this multimap for equality.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#get(K)">get</A></B>(<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection view of all values associated with a key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the hash code for this multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#isEmpty()">isEmpty</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains no key-value pairs.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#keys()">keys</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection, which may contain duplicates, of all keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#keySet()">keySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of all keys, each appearing once in the returned set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a key-value pair in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#putAll(K, java.lang.Iterable)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,? extends <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all of another multimap's key-value pairs into this multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a key-value pair from the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all values associated with a given key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key, replacing any existing
+ values for that key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#size()">size</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of key-value pairs in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string representation of the multimap, generated by calling
+ <code>toString</code> on the map returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#values()">values</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all values in the multimap.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="create()"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>&lt;K,V&gt; <B>create</B>()</PRE>
+<DL>
+<DD>Creates a new, empty <code>LinkedListMultimap</code> with the default initial
+ capacity.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="create(int)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>&lt;K,V&gt; <B>create</B>(int&nbsp;expectedKeys)</PRE>
+<DL>
+<DD>Constructs an empty <code>LinkedListMultimap</code> with enough capacity to hold
+ the specified number of keys without rehashing.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>expectedKeys</CODE> - the expected number of distinct keys
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>expectedKeys</code> is negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="create(com.google.common.collect.Multimap)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>&lt;K,V&gt; <B>create</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</PRE>
+<DL>
+<DD>Constructs a <code>LinkedListMultimap</code> with the same mappings as the
+ specified <code>Multimap</code>. The new multimap has the same
+ <A HREF="../../../../com/google/common/collect/Multimap.html#entries()"><CODE>Multimap.entries()</CODE></A> iteration order as the input multimap.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - the multimap whose contents are copied to this multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="size()"><!-- --></A><H3>
+size</H3>
+<PRE>
+public int <B>size</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">Multimap</A></CODE></B></DD>
+<DD>Returns the number of key-value pairs in the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isEmpty()"><!-- --></A><H3>
+isEmpty</H3>
+<PRE>
+public boolean <B>isEmpty</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains no key-value pairs.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsKey(java.lang.Object)"><!-- --></A><H3>
+containsKey</H3>
+<PRE>
+public boolean <B>containsKey</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains any values for the specified
+ key.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
+containsValue</H3>
+<PRE>
+public boolean <B>containsValue</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains the specified value for any
+ key.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>value</CODE> - value to search for in multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsEntry(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
+containsEntry</H3>
+<PRE>
+public boolean <B>containsEntry</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains the specified key-value pair.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap<DD><CODE>value</CODE> - value to search for in multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
+put</H3>
+<PRE>
+public boolean <B>put</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>&nbsp;key,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&nbsp;value)</PRE>
+<DL>
+<DD>Stores a key-value pair in the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>value</CODE> - value to store in the multimap
+<DT><B>Returns:</B><DD><code>true</code> always</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public boolean <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Removes a key-value pair from the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entry to remove from the multimap<DD><CODE>value</CODE> - value of entry to remove the multimap
+<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="putAll(K, java.lang.Iterable)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public boolean <B>putAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;&nbsp;values)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">Multimap</A></CODE></B></DD>
+<DD>Stores a collection of values with the same key.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
+<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(com.google.common.collect.Multimap)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public boolean <B>putAll</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,? extends <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;&nbsp;multimap)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">Multimap</A></CODE></B></DD>
+<DD>Copies all of another multimap's key-value pairs into this multimap. The
+ order in which the mappings are added is determined by
+ <code>multimap.entries()</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - mappings to store in this multimap
+<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="replaceValues(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="replaceValues(K, java.lang.Iterable)"><!-- --></A><H3>
+replaceValues</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt; <B>replaceValues</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;&nbsp;values)</PRE>
+<DL>
+<DD>Stores a collection of values with the same key, replacing any existing
+ values for that key.
+
+ <p>Because the values for a given key may have duplicates and follow the
+ insertion ordering, this method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>, instead of the
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> specified in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
+
+ <p>If any entries for the specified <code>key</code> already exist in the
+ multimap, their values are changed in-place without affecting the iteration
+ order.
+
+ <p>The returned list is immutable and implements
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util"><CODE>RandomAccess</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
+<DT><B>Returns:</B><DD>the collection of replaced values, or an empty collection if no
+ values were previously associated with the key. The collection
+ <i>may</i> be modifiable, but updating it will have no effect on the
+ multimap.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
+removeAll</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt; <B>removeAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD>Removes all values associated with a given key.
+
+ <p>Because the values for a given key may have duplicates and follow the
+ insertion ordering, this method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>, instead of the
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> specified in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
+
+ <p>The returned list is immutable and implements
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util"><CODE>RandomAccess</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entries to remove from the multimap
+<DT><B>Returns:</B><DD>the collection of removed values, or an empty collection if no
+ values were associated with the provided key. The collection
+ <i>may</i> be modifiable, but updating it will have no effect on the
+ multimap.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clear()"><!-- --></A><H3>
+clear</H3>
+<PRE>
+public void <B>clear</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">Multimap</A></CODE></B></DD>
+<DD>Removes all key-value pairs from the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(java.lang.Object)"><!-- --></A><A NAME="get(K)"><!-- --></A><H3>
+get</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt; <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>&nbsp;key)</PRE>
+<DL>
+<DD>Returns a collection view of all values associated with a key. If no
+ mappings in the multimap have the provided key, an empty collection is
+ returned.
+
+ <p>Changes to the returned collection will update the underlying multimap,
+ and vice versa.
+
+ <p>Because the values for a given key may have duplicates and follow the
+ insertion ordering, this method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>, instead of the
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> specified in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
+
+ <p>If the multimap is modified while an iteration over the list is in
+ progress (except through the iterator's own <code>add</code>, <code>set</code> or
+ <code>remove</code> operations) the results of the iteration are undefined.
+
+ <p>The returned list is not serializable and does not have random access.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap
+<DT><B>Returns:</B><DD>the collection of values that the key maps to</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keySet()"><!-- --></A><H3>
+keySet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>&gt; <B>keySet</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">Multimap</A></CODE></B></DD>
+<DD>Returns the set of all keys, each appearing once in the returned set.
+ Changes to the returned set will update the underlying multimap, and vice
+ versa.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the collection of distinct keys</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keys()"><!-- --></A><H3>
+keys</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>&gt; <B>keys</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">Multimap</A></CODE></B></DD>
+<DD>Returns a collection, which may contain duplicates, of all keys. The number
+ of times of key appears in the returned multiset equals the number of
+ mappings the key has in the multimap. Changes to the returned multiset will
+ update the underlying multimap, and vice versa.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a multiset with keys corresponding to the distinct keys of the
+ multimap and frequencies corresponding to the number of values that
+ each key maps to</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="values()"><!-- --></A><H3>
+values</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt; <B>values</B>()</PRE>
+<DL>
+<DD>Returns a collection of all values in the multimap. Changes to the returned
+ collection will update the underlying multimap, and vice versa.
+
+ <p>The iterator generated by the returned collection traverses the values
+ in the order they were added to the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>collection of values, which may include the same value multiple
+ times if it occurs in multiple mappings</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entries()"><!-- --></A><H3>
+entries</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;&gt; <B>entries</B>()</PRE>
+<DL>
+<DD>Returns a collection of all key-value pairs. Changes to the returned
+ collection will update the underlying multimap, and vice versa. The entries
+ collection does not support the <code>add</code> or <code>addAll</code> operations.
+
+ <p>The iterator generated by the returned collection traverses the entries
+ in the order they were added to the multimap.
+
+ <p>An entry's <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true#getKey()" title="class or interface in java.util"><CODE>Map.Entry.getKey()</CODE></A> method always returns the same key,
+ regardless of what happens subsequently. As long as the corresponding
+ key-value mapping is not removed from the multimap, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true#getValue()" title="class or interface in java.util"><CODE>Map.Entry.getValue()</CODE></A>
+ returns the value from the multimap, which may change over time, and <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true#setValue(V)" title="class or interface in java.util"><CODE>Map.Entry.setValue(V)</CODE></A> modifies that value. Removing the mapping from the
+ multimap does not alter the value returned by <code>getValue()</code>, though a
+ subsequent <code>setValue()</code> call won't update the multimap but will lead
+ to a revised value being returned by <code>getValue()</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#entries()">entries</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>collection of map entries consisting of key-value pairs</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="asMap()"><!-- --></A><H3>
+asMap</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;&gt; <B>asMap</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#asMap()">ListMultimap</A></CODE></B></DD>
+<DD>Returns a map view that associates each key with the corresponding values
+ in the multimap. Changes to the returned map, such as element removal,
+ will update the underlying multimap. The map does not support
+ <code>setValue()</code> on its entries, <code>put</code>, or <code>putAll</code>.
+
+ <p>The collections returned by <code>asMap().get(Object)</code> have the same
+ behavior as those returned by <A HREF="../../../../com/google/common/collect/Multimap.html#get(K)"><CODE>Multimap.get(K)</CODE></A>.
+
+ <p>Though the method signature doesn't say so explicitly, the returned map
+ has <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A> values.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a map view from a key to its collection of values</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;other)</PRE>
+<DL>
+<DD>Compares the specified object to this multimap for equality.
+
+ <p>Two <code>ListMultimap</code> instances are equal if, for each key, they
+ contain the same values in the same order. If the value orderings disagree,
+ the multimaps will not be considered equal.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>other</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+public int <B>hashCode</B>()</PRE>
+<DL>
+<DD>Returns the hash code for this multimap.
+
+ <p>The hash code of a multimap is defined as the hash code of the map view,
+ as returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Returns a string representation of the multimap, generated by calling
+ <code>toString</code> on the map returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a string representation of the multimap</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/LinkedListMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/LinkedListMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="LinkedListMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ListMultimap.html b/javadoc/com/google/common/collect/ListMultimap.html
new file mode 100644
index 0000000..b88c51a
--- /dev/null
+++ b/javadoc/com/google/common/collect/ListMultimap.html
@@ -0,0 +1,386 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+ListMultimap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ListMultimap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ListMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/Lists.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ListMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ListMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Interface ListMultimap&lt;K,V&gt;</H2>
+<DL>
+<DT><B>All Superinterfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</DD>
+</DL>
+<DL>
+<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>, <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>, <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public interface <B>ListMultimap&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</DL>
+</PRE>
+
+<P>
+A <code>Multimap</code> that can hold duplicate key-value pairs and that maintains
+ the insertion ordering of values for a given key.
+
+ <p>The <A HREF="../../../../com/google/common/collect/ListMultimap.html#get(K)"><CODE>get(K)</CODE></A>, <A HREF="../../../../com/google/common/collect/ListMultimap.html#removeAll(java.lang.Object)"><CODE>removeAll(java.lang.Object)</CODE></A>, and <A HREF="../../../../com/google/common/collect/ListMultimap.html#replaceValues(K, java.lang.Iterable)"><CODE>replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> methods
+ each return a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A> of values. Though the method signature doesn't say
+ so explicitly, the map returned by <A HREF="../../../../com/google/common/collect/ListMultimap.html#asMap()"><CODE>asMap()</CODE></A> has <code>List</code> values.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Jared Levy</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ListMultimap.html#asMap()">asMap</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map view that associates each key with the corresponding values
+ in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ListMultimap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;obj)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object to this multimap for equality.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ListMultimap.html#get(K)">get</A></B>(<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">K</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection view of all values associated with a key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ListMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all values associated with a given key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ListMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key, replacing any existing
+ values for that key.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.Multimap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#entries()">entries</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="get(java.lang.Object)"><!-- --></A><A NAME="get(K)"><!-- --></A><H3>
+get</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt; <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">K</A>&nbsp;key)</PRE>
+<DL>
+<DD>Returns a collection view of all values associated with a key. If no
+ mappings in the multimap have the provided key, an empty collection is
+ returned.
+
+ <p>Changes to the returned collection will update the underlying multimap,
+ and vice versa.
+
+ <p>Because the values for a given key may have duplicates and follow the
+ insertion ordering, this method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>, instead of the
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> specified in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap
+<DT><B>Returns:</B><DD>the collection of values that the key maps to</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
+removeAll</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt; <B>removeAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD>Removes all values associated with a given key.
+
+ <p>Because the values for a given key may have duplicates and follow the
+ insertion ordering, this method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>, instead of the
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> specified in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entries to remove from the multimap
+<DT><B>Returns:</B><DD>the collection of removed values, or an empty collection if no
+ values were associated with the provided key. The collection
+ <i>may</i> be modifiable, but updating it will have no effect on the
+ multimap.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="replaceValues(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="replaceValues(K, java.lang.Iterable)"><!-- --></A><H3>
+replaceValues</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt; <B>replaceValues</B>(<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt;&nbsp;values)</PRE>
+<DL>
+<DD>Stores a collection of values with the same key, replacing any existing
+ values for that key.
+
+ <p>Because the values for a given key may have duplicates and follow the
+ insertion ordering, this method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>, instead of the
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> specified in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
+<DT><B>Returns:</B><DD>the collection of replaced values, or an empty collection if no
+ values were previously associated with the key. The collection
+ <i>may</i> be modifiable, but updating it will have no effect on the
+ multimap.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="asMap()"><!-- --></A><H3>
+asMap</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt;&gt; <B>asMap</B>()</PRE>
+<DL>
+<DD>Returns a map view that associates each key with the corresponding values
+ in the multimap. Changes to the returned map, such as element removal,
+ will update the underlying multimap. The map does not support
+ <code>setValue()</code> on its entries, <code>put</code>, or <code>putAll</code>.
+
+ <p>The collections returned by <code>asMap().get(Object)</code> have the same
+ behavior as those returned by <A HREF="../../../../com/google/common/collect/Multimap.html#get(K)"><CODE>Multimap.get(K)</CODE></A>.
+
+ <p>Though the method signature doesn't say so explicitly, the returned map
+ has <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A> values.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a map view from a key to its collection of values</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;obj)</PRE>
+<DL>
+<DD>Compares the specified object to this multimap for equality.
+
+ <p>Two <code>ListMultimap</code> instances are equal if, for each key, they
+ contain the same values in the same order. If the value orderings disagree,
+ the multimaps will not be considered equal.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>obj</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ListMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/Lists.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ListMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ListMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/Lists.html b/javadoc/com/google/common/collect/Lists.html
new file mode 100644
index 0000000..04c0b15
--- /dev/null
+++ b/javadoc/com/google/common/collect/Lists.html
@@ -0,0 +1,667 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+Lists (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Lists (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Lists.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/Lists.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Lists.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class Lists</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.Lists</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public final class <B>Lists</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+Static utility methods pertaining to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A> instances. Also see this
+ class's counterparts <A HREF="../../../../com/google/common/collect/Sets.html" title="class in com.google.common.collect"><CODE>Sets</CODE></A> and <A HREF="../../../../com/google/common/collect/Maps.html" title="class in com.google.common.collect"><CODE>Maps</CODE></A>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion, Mike Bostock</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Lists.html#asList(E, E[])">asList</A></B>(E&nbsp;first,
+ E[]&nbsp;rest)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable list containing the specified first element and
+ backed by the specified array of additional elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Lists.html#asList(E, E, E[])">asList</A></B>(E&nbsp;first,
+ E&nbsp;second,
+ E[]&nbsp;rest)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable list containing the specified first and second
+ element, and backed by the specified array of additional elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Lists.html#newArrayList()">newArrayList</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i>, empty <code>ArrayList</code> instance.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Lists.html#newArrayList(E...)">newArrayList</A></B>(E...&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i> <code>ArrayList</code> instance containing the given
+ elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Lists.html#newArrayList(java.lang.Iterable)">newArrayList</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i> <code>ArrayList</code> instance containing the given
+ elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Lists.html#newArrayList(java.util.Iterator)">newArrayList</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i> <code>ArrayList</code> instance containing the given
+ elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Lists.html#newArrayListWithCapacity(int)">newArrayListWithCapacity</A></B>(int&nbsp;initialArraySize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an <code>ArrayList</code> instance backed by an array of the
+ <i>exact</i> size specified; equivalent to
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true#ArrayList(int)" title="class or interface in java.util"><CODE>ArrayList.ArrayList(int)</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Lists.html#newArrayListWithExpectedSize(int)">newArrayListWithExpectedSize</A></B>(int&nbsp;estimatedSize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an <code>ArrayList</code> instance sized appropriately to hold an
+ <i>estimated</i> number of elements without resizing.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedList.html?is-external=true" title="class or interface in java.util">LinkedList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Lists.html#newLinkedList()">newLinkedList</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an empty <code>LinkedList</code> instance.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedList.html?is-external=true" title="class or interface in java.util">LinkedList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Lists.html#newLinkedList(java.lang.Iterable)">newLinkedList</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <code>LinkedList</code> instance containing the given elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Lists.html#partition(java.util.List, int)">partition</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&nbsp;list,
+ int&nbsp;size)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns consecutive <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#subList(int, int)" title="class or interface in java.util">sublists</A> of a list,
+ each of the same size (the final list may be smaller).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;F,T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Lists.html#transform(java.util.List, com.google.common.base.Function)">transform</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;F&gt;&nbsp;fromList,
+ <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,? extends T&gt;&nbsp;function)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a list that applies <code>function</code> to each element of <code>fromList</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="newArrayList()"><!-- --></A><H3>
+newArrayList</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt; <B>newArrayList</B>()</PRE>
+<DL>
+<DD>Creates a <i>mutable</i>, empty <code>ArrayList</code> instance.
+
+ <p><b>Note:</b> if mutability is not required, use <A HREF="../../../../com/google/common/collect/ImmutableList.html#of()"><CODE>ImmutableList.of()</CODE></A> instead.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a new, empty <code>ArrayList</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newArrayList(java.lang.Object[])"><!-- --></A><A NAME="newArrayList(E...)"><!-- --></A><H3>
+newArrayList</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt; <B>newArrayList</B>(E...&nbsp;elements)</PRE>
+<DL>
+<DD>Creates a <i>mutable</i> <code>ArrayList</code> instance containing the given
+ elements.
+
+ <p><b>Note:</b> if mutability is not required and the elements are
+ non-null, use <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>ImmutableList.of(Object[])</CODE></A> instead.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements that the list should contain, in order
+<DT><B>Returns:</B><DD>a new <code>ArrayList</code> containing those elements</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newArrayList(java.lang.Iterable)"><!-- --></A><H3>
+newArrayList</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt; <B>newArrayList</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Creates a <i>mutable</i> <code>ArrayList</code> instance containing the given
+ elements.
+
+ <p><b>Note:</b> if mutability is not required and the elements are
+ non-null, use <A HREF="../../../../com/google/common/collect/ImmutableList.html#copyOf(java.util.Iterator)"><CODE>ImmutableList.copyOf(Iterator)</CODE></A> instead.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements that the list should contain, in order
+<DT><B>Returns:</B><DD>a new <code>ArrayList</code> containing those elements</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newArrayList(java.util.Iterator)"><!-- --></A><H3>
+newArrayList</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt; <B>newArrayList</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Creates a <i>mutable</i> <code>ArrayList</code> instance containing the given
+ elements.
+
+ <p><b>Note:</b> if mutability is not required and the elements are
+ non-null, use <A HREF="../../../../com/google/common/collect/ImmutableList.html#copyOf(java.util.Iterator)"><CODE>ImmutableList.copyOf(Iterator)</CODE></A> instead.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements that the list should contain, in order
+<DT><B>Returns:</B><DD>a new <code>ArrayList</code> containing those elements</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newArrayListWithCapacity(int)"><!-- --></A><H3>
+newArrayListWithCapacity</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt; <B>newArrayListWithCapacity</B>(int&nbsp;initialArraySize)</PRE>
+<DL>
+<DD>Creates an <code>ArrayList</code> instance backed by an array of the
+ <i>exact</i> size specified; equivalent to
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true#ArrayList(int)" title="class or interface in java.util"><CODE>ArrayList.ArrayList(int)</CODE></A>.
+
+ <p><b>Note:</b> if you know the exact size your list will be, consider
+ using a fixed-size list (<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>) or an <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect"><CODE>ImmutableList</CODE></A> instead of a growable <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util"><CODE>ArrayList</CODE></A>.
+
+ <p><b>Note:</b> If you have only an <i>estimate</i> of the eventual size of
+ the list, consider padding this estimate by a suitable amount, or simply
+ use <A HREF="../../../../com/google/common/collect/Lists.html#newArrayListWithExpectedSize(int)"><CODE>newArrayListWithExpectedSize(int)</CODE></A> instead.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>initialArraySize</CODE> - the exact size of the initial backing array for
+ the returned array list (<code>ArrayList</code> documentation calls this
+ value the "capacity")
+<DT><B>Returns:</B><DD>a new, empty <code>ArrayList</code> which is guaranteed not to resize
+ itself unless its size reaches <code>initialArraySize + 1</code>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>initialArraySize</code> is negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newArrayListWithExpectedSize(int)"><!-- --></A><H3>
+newArrayListWithExpectedSize</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt; <B>newArrayListWithExpectedSize</B>(int&nbsp;estimatedSize)</PRE>
+<DL>
+<DD>Creates an <code>ArrayList</code> instance sized appropriately to hold an
+ <i>estimated</i> number of elements without resizing. A small amount of
+ padding is added in case the estimate is low.
+
+ <p><b>Note:</b> If you know the <i>exact</i> number of elements the list
+ will hold, or prefer to calculate your own amount of padding, refer to
+ <A HREF="../../../../com/google/common/collect/Lists.html#newArrayListWithCapacity(int)"><CODE>newArrayListWithCapacity(int)</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>estimatedSize</CODE> - an estimate of the eventual <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#size()" title="class or interface in java.util"><CODE>List.size()</CODE></A> of
+ the new list
+<DT><B>Returns:</B><DD>a new, empty <code>ArrayList</code>, sized appropriately to hold the
+ estimated number of elements
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>estimatedSize</code> is negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newLinkedList()"><!-- --></A><H3>
+newLinkedList</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedList.html?is-external=true" title="class or interface in java.util">LinkedList</A>&lt;E&gt; <B>newLinkedList</B>()</PRE>
+<DL>
+<DD>Creates an empty <code>LinkedList</code> instance.
+
+ <p><b>Note:</b> if you need an immutable empty <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>, use
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#emptyList()" title="class or interface in java.util"><CODE>Collections.emptyList()</CODE></A> instead.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a new, empty <code>LinkedList</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newLinkedList(java.lang.Iterable)"><!-- --></A><H3>
+newLinkedList</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedList.html?is-external=true" title="class or interface in java.util">LinkedList</A>&lt;E&gt; <B>newLinkedList</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Creates a <code>LinkedList</code> instance containing the given elements.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements that the list should contain, in order
+<DT><B>Returns:</B><DD>a new <code>LinkedList</code> containing those elements</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="asList(java.lang.Object,java.lang.Object[])"><!-- --></A><A NAME="asList(E, E[])"><!-- --></A><H3>
+asList</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt; <B>asList</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ E&nbsp;first,
+ E[]&nbsp;rest)</PRE>
+<DL>
+<DD>Returns an unmodifiable list containing the specified first element and
+ backed by the specified array of additional elements. Changes to the <code>rest</code> array will be reflected in the returned list. Unlike <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(T...)</CODE></A>, the returned list is unmodifiable.
+
+ <p>This is useful when a varargs method needs to use a signature such as
+ <code>(Foo firstFoo, Foo... moreFoos)</code>, in order to avoid overload
+ ambiguity or to enforce a minimum argument count.
+
+ <p>The returned list is serializable and implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util"><CODE>RandomAccess</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>first</CODE> - the first element<DD><CODE>rest</CODE> - an array of additional elements, possibly empty
+<DT><B>Returns:</B><DD>an unmodifiable list containing the specified elements</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="asList(java.lang.Object,java.lang.Object,java.lang.Object[])"><!-- --></A><A NAME="asList(E, E, E[])"><!-- --></A><H3>
+asList</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt; <B>asList</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ E&nbsp;first,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ E&nbsp;second,
+ E[]&nbsp;rest)</PRE>
+<DL>
+<DD>Returns an unmodifiable list containing the specified first and second
+ element, and backed by the specified array of additional elements. Changes
+ to the <code>rest</code> array will be reflected in the returned list. Unlike
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(T...)</CODE></A>, the returned list is unmodifiable.
+
+ <p>This is useful when a varargs method needs to use a signature such as
+ <code>(Foo firstFoo, Foo secondFoo, Foo... moreFoos)</code>, in order to avoid
+ overload ambiguity or to enforce a minimum argument count.
+
+ <p>The returned list is serializable and implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util"><CODE>RandomAccess</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>first</CODE> - the first element<DD><CODE>second</CODE> - the second element<DD><CODE>rest</CODE> - an array of additional elements, possibly empty
+<DT><B>Returns:</B><DD>an unmodifiable list containing the specified elements</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="transform(java.util.List, com.google.common.base.Function)"><!-- --></A><H3>
+transform</H3>
+<PRE>
+public static &lt;F,T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt; <B>transform</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;F&gt;&nbsp;fromList,
+ <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,? extends T&gt;&nbsp;function)</PRE>
+<DL>
+<DD>Returns a list that applies <code>function</code> to each element of <code>fromList</code>. The returned list is a transformed view of <code>fromList</code>;
+ changes to <code>fromList</code> will be reflected in the returned list and vice
+ versa.
+
+ <p>Since functions are not reversible, the transform is one-way and new
+ items cannot be stored in the returned list. The <code>add</code>,
+ <code>addAll</code> and <code>set</code> methods are unsupported in the returned
+ list.
+
+ <p>The function is applied lazily, invoked when needed. This is necessary
+ for the returned list to be a view, but it means that the function will be
+ applied many times for bulk operations like <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>List.contains(java.lang.Object)</CODE></A> and
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#hashCode()" title="class or interface in java.util"><CODE>List.hashCode()</CODE></A>. For this to perform well, <code>function</code> should be
+ fast. To avoid lazy evaluation when the returned list doesn't need to be a
+ view, copy the returned list into a new list of your choosing.
+
+ <p>If <code>fromList</code> implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util"><CODE>RandomAccess</CODE></A>, so will the
+ returned list. The returned list always implements <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io"><CODE>Serializable</CODE></A>,
+ but serialization will succeed only when <code>fromList</code> and
+ <code>function</code> are serializable. The returned list is threadsafe if the
+ supplied list and function are.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="partition(java.util.List, int)"><!-- --></A><H3>
+partition</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&gt; <B>partition</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&nbsp;list,
+ int&nbsp;size)</PRE>
+<DL>
+<DD>Returns consecutive <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#subList(int, int)" title="class or interface in java.util">sublists</A> of a list,
+ each of the same size (the final list may be smaller). For example,
+ partitioning a list containing <code>[a, b, c, d, e]</code> with a partition
+ size of 3 yields <code>[[a, b, c], [d, e]]</code> -- an outer list containing
+ two inner lists of three and two elements, all in the original order.
+
+ <p>The outer list is unmodifiable, but reflects the latest state of the
+ source list. The inner lists are sublist views of the original list,
+ produced on demand using <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#subList(int, int)" title="class or interface in java.util"><CODE>List.subList(int, int)</CODE></A>, and are subject
+ to all the usual caveats about modification as explained in that API.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>list</CODE> - the list to return consecutive sublists of<DD><CODE>size</CODE> - the desired size of each sublist (the last may be
+ smaller)
+<DT><B>Returns:</B><DD>a list of consecutive sublists
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>partitionSize</code> is nonpositive</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Lists.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/Lists.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Lists.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/MapDifference.ValueDifference.html b/javadoc/com/google/common/collect/MapDifference.ValueDifference.html
new file mode 100644
index 0000000..eb15511
--- /dev/null
+++ b/javadoc/com/google/common/collect/MapDifference.ValueDifference.html
@@ -0,0 +1,296 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+MapDifference.ValueDifference (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="MapDifference.ValueDifference (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/MapDifference.ValueDifference.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/MapDifference.ValueDifference.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MapDifference.ValueDifference.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Interface MapDifference.ValueDifference&lt;V&gt;</H2>
+<DL>
+<DT><B>Enclosing interface:</B><DD><A HREF="../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A>&lt;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">K</A>,<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">V</A>&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public static interface <B>MapDifference.ValueDifference&lt;V&gt;</B></DL>
+</PRE>
+
+<P>
+A difference between the mappings from two maps with the same key. The
+ <code>leftValue()</code> and <code>rightValue</code> are not equal, and one but not
+ both of them may be null.
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;other)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Two instances are considered equal if their <A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html#leftValue()"><CODE>leftValue()</CODE></A>
+ values are equal and their <A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html#rightValue()"><CODE>rightValue()</CODE></A> values are also equal.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The hash code equals the value
+ <code>Arrays.asList(leftValue(), rightValue()).hashCode()</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="type parameter in MapDifference.ValueDifference">V</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html#leftValue()">leftValue</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value from the left map (possibly null).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="type parameter in MapDifference.ValueDifference">V</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html#rightValue()">rightValue</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value from the right map (possibly null).</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="leftValue()"><!-- --></A><H3>
+leftValue</H3>
+<PRE>
+<A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="type parameter in MapDifference.ValueDifference">V</A> <B>leftValue</B>()</PRE>
+<DL>
+<DD>Returns the value from the left map (possibly null).
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="rightValue()"><!-- --></A><H3>
+rightValue</H3>
+<PRE>
+<A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="type parameter in MapDifference.ValueDifference">V</A> <B>rightValue</B>()</PRE>
+<DL>
+<DD>Returns the value from the right map (possibly null).
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;other)</PRE>
+<DL>
+<DD>Two instances are considered equal if their <A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html#leftValue()"><CODE>leftValue()</CODE></A>
+ values are equal and their <A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html#rightValue()"><CODE>rightValue()</CODE></A> values are also equal.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>other</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+int <B>hashCode</B>()</PRE>
+<DL>
+<DD>The hash code equals the value
+ <code>Arrays.asList(leftValue(), rightValue()).hashCode()</code>.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/MapDifference.ValueDifference.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/MapDifference.ValueDifference.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MapDifference.ValueDifference.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/MapDifference.html b/javadoc/com/google/common/collect/MapDifference.html
new file mode 100644
index 0000000..997759d
--- /dev/null
+++ b/javadoc/com/google/common/collect/MapDifference.html
@@ -0,0 +1,385 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+MapDifference (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="MapDifference (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/MapDifference.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/Lists.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/MapDifference.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MapDifference.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Interface MapDifference&lt;K,V&gt;</H2>
+<HR>
+<DL>
+<DT><PRE>public interface <B>MapDifference&lt;K,V&gt;</B></DL>
+</PRE>
+
+<P>
+An object representing the differences between two maps.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion</DD>
+</DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;interface</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect">MapDifference.ValueDifference</A>&lt;<A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="type parameter in MapDifference.ValueDifference">V</A>&gt;</B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A difference between the mappings from two maps with the same key.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapDifference.html#areEqual()">areEqual</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if there are no differences between the two maps;
+ that is, if the maps are equal.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">K</A>,<A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect">MapDifference.ValueDifference</A>&lt;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapDifference.html#entriesDiffering()">entriesDiffering</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable map describing keys that appear in both maps, but
+ with different values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">K</A>,<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapDifference.html#entriesInCommon()">entriesInCommon</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable map containing the entries that appear in both
+ maps; that is, the intersection of the two maps.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">K</A>,<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapDifference.html#entriesOnlyOnLeft()">entriesOnlyOnLeft</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable map containing the entries from the left map whose
+ keys are not present in the right map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">K</A>,<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapDifference.html#entriesOnlyOnRight()">entriesOnlyOnRight</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable map containing the entries from the right map whose
+ keys are not present in the left map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapDifference.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object with this instance for equality.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapDifference.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the hash code for this instance.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="areEqual()"><!-- --></A><H3>
+areEqual</H3>
+<PRE>
+boolean <B>areEqual</B>()</PRE>
+<DL>
+<DD>Returns <code>true</code> if there are no differences between the two maps;
+ that is, if the maps are equal.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entriesOnlyOnLeft()"><!-- --></A><H3>
+entriesOnlyOnLeft</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">K</A>,<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">V</A>&gt; <B>entriesOnlyOnLeft</B>()</PRE>
+<DL>
+<DD>Returns an unmodifiable map containing the entries from the left map whose
+ keys are not present in the right map.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entriesOnlyOnRight()"><!-- --></A><H3>
+entriesOnlyOnRight</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">K</A>,<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">V</A>&gt; <B>entriesOnlyOnRight</B>()</PRE>
+<DL>
+<DD>Returns an unmodifiable map containing the entries from the right map whose
+ keys are not present in the left map.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entriesInCommon()"><!-- --></A><H3>
+entriesInCommon</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">K</A>,<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">V</A>&gt; <B>entriesInCommon</B>()</PRE>
+<DL>
+<DD>Returns an unmodifiable map containing the entries that appear in both
+ maps; that is, the intersection of the two maps.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entriesDiffering()"><!-- --></A><H3>
+entriesDiffering</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">K</A>,<A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect">MapDifference.ValueDifference</A>&lt;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">V</A>&gt;&gt; <B>entriesDiffering</B>()</PRE>
+<DL>
+<DD>Returns an unmodifiable map describing keys that appear in both maps, but
+ with different values.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD>Compares the specified object with this instance for equality. Returns
+ <code>true</code> if the given object is also a <code>MapDifference</code> and the
+ values returned by the <A HREF="../../../../com/google/common/collect/MapDifference.html#entriesOnlyOnLeft()"><CODE>entriesOnlyOnLeft()</CODE></A>, <A HREF="../../../../com/google/common/collect/MapDifference.html#entriesOnlyOnRight()"><CODE>entriesOnlyOnRight()</CODE></A>, <A HREF="../../../../com/google/common/collect/MapDifference.html#entriesInCommon()"><CODE>entriesInCommon()</CODE></A> and <A HREF="../../../../com/google/common/collect/MapDifference.html#entriesDiffering()"><CODE>entriesDiffering()</CODE></A> of the two instances are equal.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+int <B>hashCode</B>()</PRE>
+<DL>
+<DD>Returns the hash code for this instance. This is defined as the hash code
+ of <pre> <code>Arrays.asList(entriesOnlyOnLeft(), entriesOnlyOnRight(),
+ entriesInCommon(), entriesDiffering())</code></pre>
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/MapDifference.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/Lists.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/MapDifference.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MapDifference.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/MapMaker.html b/javadoc/com/google/common/collect/MapMaker.html
new file mode 100644
index 0000000..3a5355a
--- /dev/null
+++ b/javadoc/com/google/common/collect/MapMaker.html
@@ -0,0 +1,616 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+MapMaker (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="MapMaker (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/MapMaker.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/Maps.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/MapMaker.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MapMaker.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class MapMaker</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.MapMaker</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public final class <B>MapMaker</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+A <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ConcurrentMap</CODE></A> builder, providing any combination of these
+ features: <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref">soft</A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref">weak</A> keys, soft or weak values, timed expiration, and on-demand
+ computation of values. Usage example: <pre> <code>ConcurrentMap&lt;Key, Graph&gt; graphs = new MapMaker()
+ .concurrencyLevel(32)
+ .softKeys()
+ .weakValues()
+ .expiration(30, TimeUnit.MINUTES)
+ .makeComputingMap(
+ new Function&lt;Key, Graph&gt;() {
+ public Graph apply(Key key) {
+ return createExpensiveGraph(key);
+ }
+ });</code></pre>
+
+ These features are all optional; <code>new MapMaker().makeMap()</code>
+ returns a valid concurrent map that behaves exactly like a
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ConcurrentHashMap</CODE></A>.
+
+ The returned map is implemented as a hash table with similar performance
+ characteristics to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ConcurrentHashMap</CODE></A>. It supports all optional
+ operations of the <code>ConcurrentMap</code> interface. It does not permit
+ null keys or values. It is serializable; however, serializing a map that
+ uses soft or weak references can give unpredictable results.
+
+ <p><b>Note:</b> by default, the returned map uses equality comparisons
+ (the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>equals</CODE></A> method) to determine equality
+ for keys or values. However, if <A HREF="../../../../com/google/common/collect/MapMaker.html#weakKeys()"><CODE>weakKeys()</CODE></A> or <A HREF="../../../../com/google/common/collect/MapMaker.html#softKeys()"><CODE>softKeys()</CODE></A> was specified, the map uses identity (<code>==</code>)
+ comparisons instead for keys. Likewise, if <A HREF="../../../../com/google/common/collect/MapMaker.html#weakValues()"><CODE>weakValues()</CODE></A> or
+ <A HREF="../../../../com/google/common/collect/MapMaker.html#softValues()"><CODE>softValues()</CODE></A> was specified, the map uses identity comparisons
+ for values.
+
+ <p>The returned map has <i>weakly consistent iteration</i>: an iterator
+ over one of the map's view collections may reflect some, all or none of
+ the changes made to the map after the iterator was created.
+
+ <p>An entry whose key or value is reclaimed by the garbage collector
+ immediately disappears from the map. (If the default settings of strong
+ keys and strong values are used, this will never happen.) The client can
+ never observe a partially-reclaimed entry. Any <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util"><CODE>Map.Entry</CODE></A>
+ instance retrieved from the map's <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entry set</A>
+ is snapshot of that entry's state at the time of retrieval.
+
+ <p><code>new MapMaker().weakKeys().makeMap()</code> can almost always be
+ used as a drop-in replacement for <A HREF="http://java.sun.com/javase/6/docs/api/java/util/WeakHashMap.html?is-external=true" title="class or interface in java.util"><CODE>WeakHashMap</CODE></A>, adding
+ concurrency, asynchronous cleanup, identity-based equality for keys, and
+ great flexibility.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Bob Lee, Kevin Bourrillion</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapMaker.html#MapMaker()">MapMaker</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new <code>MapMaker</code> instance with default settings,
+ including strong keys, strong values, and no automatic expiration.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapMaker.html#concurrencyLevel(int)">concurrencyLevel</A></B>(int&nbsp;concurrencyLevel)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guides the allowed concurrency among update operations.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapMaker.html#expiration(long, java.util.concurrent.TimeUnit)">expiration</A></B>(long&nbsp;duration,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;unit)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each entry should be automatically removed from the
+ map once a fixed duration has passed since the entry's creation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapMaker.html#initialCapacity(int)">initialCapacity</A></B>(int&nbsp;initialCapacity)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets a custom initial capacity (defaults to 16).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapMaker.html#makeComputingMap(com.google.common.base.Function)">makeComputingMap</A></B>(<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super K,? extends V&gt;&nbsp;computingFunction)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Builds a map that supports atomic, on-demand computation of values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapMaker.html#makeMap()">makeMap</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Builds the final map, without on-demand computation of values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapMaker.html#softKeys()">softKeys</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each key (not value) stored in the map should be
+ wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>SoftReference</CODE></A> (by default, strong references
+ are used).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapMaker.html#softValues()">softValues</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each value (not key) stored in the map should be
+ wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>SoftReference</CODE></A> (by default, strong references
+ are used).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapMaker.html#weakKeys()">weakKeys</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each key (not value) stored in the map should be
+ wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>WeakReference</CODE></A> (by default, strong references
+ are used).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapMaker.html#weakValues()">weakValues</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each value (not key) stored in the map should be
+ wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>WeakReference</CODE></A> (by default, strong references
+ are used).</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="MapMaker()"><!-- --></A><H3>
+MapMaker</H3>
+<PRE>
+public <B>MapMaker</B>()</PRE>
+<DL>
+<DD>Constructs a new <code>MapMaker</code> instance with default settings,
+ including strong keys, strong values, and no automatic expiration.
+<P>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="initialCapacity(int)"><!-- --></A><H3>
+initialCapacity</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A> <B>initialCapacity</B>(int&nbsp;initialCapacity)</PRE>
+<DL>
+<DD>Sets a custom initial capacity (defaults to 16). Resizing this or
+ any other kind of hash table is a relatively slow operation, so,
+ when possible, it is a good idea to provide estimates of expected
+ table sizes.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>initialCapacity</code> is
+ negative
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</A></CODE> - if an initial capacity was already set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="concurrencyLevel(int)"><!-- --></A><H3>
+concurrencyLevel</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A> <B>concurrencyLevel</B>(int&nbsp;concurrencyLevel)</PRE>
+<DL>
+<DD>Guides the allowed concurrency among update operations. Used as a
+ hint for internal sizing. The table is internally partitioned to try
+ to permit the indicated number of concurrent updates without
+ contention. Because placement in hash tables is essentially random,
+ the actual concurrency will vary. Ideally, you should choose a value
+ to accommodate as many threads as will ever concurrently modify the
+ table. Using a significantly higher value than you need can waste
+ space and time, and a significantly lower value can lead to thread
+ contention. But overestimates and underestimates within an order of
+ magnitude do not usually have much noticeable impact. A value of one
+ is appropriate when it is known that only one thread will modify and
+ all others will only read. Defaults to 16.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>concurrencyLevel</code> is
+ nonpositive
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</A></CODE> - if a concurrency level was already set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="weakKeys()"><!-- --></A><H3>
+weakKeys</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A> <B>weakKeys</B>()</PRE>
+<DL>
+<DD>Specifies that each key (not value) stored in the map should be
+ wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>WeakReference</CODE></A> (by default, strong references
+ are used).
+
+ <p><b>Note:</b> the map will use identity (<code>==</code>) comparison
+ to determine equality of weak keys, which may not behave as you expect.
+ For example, storing a key in the map and then attempting a lookup
+ using a different but <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>equals</CODE></A>-equivalent
+ key will always fail.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</A></CODE> - if the key strength was already set<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>WeakReference</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="softKeys()"><!-- --></A><H3>
+softKeys</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A> <B>softKeys</B>()</PRE>
+<DL>
+<DD>Specifies that each key (not value) stored in the map should be
+ wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>SoftReference</CODE></A> (by default, strong references
+ are used).
+
+ <p><b>Note:</b> the map will use identity (<code>==</code>) comparison
+ to determine equality of soft keys, which may not behave as you expect.
+ For example, storing a key in the map and then attempting a lookup
+ using a different but <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>equals</CODE></A>-equivalent
+ key will always fail.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</A></CODE> - if the key strength was already set<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>SoftReference</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="weakValues()"><!-- --></A><H3>
+weakValues</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A> <B>weakValues</B>()</PRE>
+<DL>
+<DD>Specifies that each value (not key) stored in the map should be
+ wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>WeakReference</CODE></A> (by default, strong references
+ are used).
+
+ <p>Weak values will be garbage collected once they are weakly
+ reachable. This makes them a poor candidate for caching; consider
+ <A HREF="../../../../com/google/common/collect/MapMaker.html#softValues()"><CODE>softValues()</CODE></A> instead.
+
+ <p><b>Note:</b> the map will use identity (<code>==</code>) comparison
+ to determine equality of weak values. This will notably impact
+ the behavior of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util"><CODE>containsValue</CODE></A>,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true#remove(java.lang.Object, java.lang.Object)" title="class or interface in java.util.concurrent"><CODE>remove(Object, Object)</CODE></A>,
+ and <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true#replace(K, V, V)" title="class or interface in java.util.concurrent"><CODE>replace(K, V, V)</CODE></A>.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</A></CODE> - if the key strength was already set<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>WeakReference</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="softValues()"><!-- --></A><H3>
+softValues</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A> <B>softValues</B>()</PRE>
+<DL>
+<DD>Specifies that each value (not key) stored in the map should be
+ wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>SoftReference</CODE></A> (by default, strong references
+ are used).
+
+ <p>Soft values will be garbage collected in response to memory
+ demand, and in a least-recently-used manner. This makes them a
+ good candidate for caching.
+
+ <p><b>Note:</b> the map will use identity (<code>==</code>) comparison
+ to determine equality of soft values. This will notably impact
+ the behavior of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util"><CODE>containsValue</CODE></A>,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true#remove(java.lang.Object, java.lang.Object)" title="class or interface in java.util.concurrent"><CODE>remove(Object, Object)</CODE></A>,
+ and <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true#replace(K, V, V)" title="class or interface in java.util.concurrent"><CODE>replace(K, V, V)</CODE></A>.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</A></CODE> - if the value strength was already set<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>SoftReference</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="expiration(long, java.util.concurrent.TimeUnit)"><!-- --></A><H3>
+expiration</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A> <B>expiration</B>(long&nbsp;duration,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;unit)</PRE>
+<DL>
+<DD>Specifies that each entry should be automatically removed from the
+ map once a fixed duration has passed since the entry's creation.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>duration</CODE> - the length of time after an entry is created that it
+ should be automatically removed<DD><CODE>unit</CODE> - the unit that <code>duration</code> is expressed in
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>duration</code> is not positive
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</A></CODE> - if the expiration time was already set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="makeMap()"><!-- --></A><H3>
+makeMap</H3>
+<PRE>
+public &lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;K,V&gt; <B>makeMap</B>()</PRE>
+<DL>
+<DD>Builds the final map, without on-demand computation of values. This method
+ does not alter the state of this <code>MapMaker</code> instance, so it can be
+ invoked again to create multiple independent maps.
+<P>
+<DD><DL>
+<DT><B>Type Parameters:</B><DD><CODE>K</CODE> - the type of keys to be stored in the returned map<DD><CODE>V</CODE> - the type of values to be stored in the returned map
+<DT><B>Returns:</B><DD>a concurrent map having the requested features</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="makeComputingMap(com.google.common.base.Function)"><!-- --></A><H3>
+makeComputingMap</H3>
+<PRE>
+public &lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;K,V&gt; <B>makeComputingMap</B>(<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super K,? extends V&gt;&nbsp;computingFunction)</PRE>
+<DL>
+<DD>Builds a map that supports atomic, on-demand computation of values. <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util"><CODE>Map.get(java.lang.Object)</CODE></A> either returns an already-computed value for the given key,
+ atomically computes it using the supplied function, or, if another thread
+ is currently computing the value for this key, simply waits for that thread
+ to finish and returns its computed value. Note that the function may be
+ executed concurrently by multiple threads, but only for distinct keys.
+
+ <p>If an entry's value has not finished computing yet, query methods
+ besides <code>get</code> return immediately as if an entry doesn't exist. In
+ other words, an entry isn't externally visible until the value's
+ computation completes.
+
+ <p><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util"><CODE>Map.get(java.lang.Object)</CODE></A> on the returned map will never return <code>null</code>. It
+ may throw:
+
+ <ul>
+ <li><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang"><CODE>NullPointerException</CODE></A> if the key is null or the computing
+ function returns null
+ <li><A HREF="../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect"><CODE>ComputationException</CODE></A> if an exception was thrown by the
+ computing function. If that exception is already of type <A HREF="../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect"><CODE>ComputationException</CODE></A>, it is propagated directly; otherwise it is
+ wrapped.
+ </ul>
+
+ <p><b>Note:</b> Callers of <code>get</code> <i>must</i> ensure that the key
+ argument is of type <code>K</code>. The <code>get</code> method accepts <code>Object</code>, so the key type is not checked at compile time. Passing an object
+ of a type other than <code>K</code> can result in that object being unsafely
+ passed to the computing function as type <code>K</code>, and unsafely stored in
+ the map.
+
+ <p>If <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util"><CODE>Map.put(K, V)</CODE></A> is called before a computation completes, other
+ threads waiting on the computation will wake up and return the stored
+ value. When the computation completes, its new result will overwrite the
+ value that was put in the map manually.
+
+ <p>This method does not alter the state of this <code>MapMaker</code> instance,
+ so it can be invoked again to create multiple independent maps.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/MapMaker.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/Maps.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/MapMaker.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MapMaker.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/Maps.html b/javadoc/com/google/common/collect/Maps.html
new file mode 100644
index 0000000..05a5bcb
--- /dev/null
+++ b/javadoc/com/google/common/collect/Maps.html
@@ -0,0 +1,1016 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+Maps (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Maps (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Maps.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/Maps.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Maps.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class Maps</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.Maps</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public final class <B>Maps</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+Static utility methods pertaining to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> instances. Also see this
+ class's counterparts <A HREF="../../../../com/google/common/collect/Lists.html" title="class in com.google.common.collect"><CODE>Lists</CODE></A> and <A HREF="../../../../com/google/common/collect/Sets.html" title="class in com.google.common.collect"><CODE>Sets</CODE></A>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion, Mike Bostock, Isaac Shum</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#difference(java.util.Map, java.util.Map)">difference</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;left,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;right)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Computes the difference between two maps.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#filterEntries(java.util.Map, com.google.common.base.Predicate)">filterEntries</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;unfiltered,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt;&nbsp;entryPredicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map containing the mappings in <code>unfiltered</code> that satisfy a
+ predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#filterKeys(java.util.Map, com.google.common.base.Predicate)">filterKeys</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;unfiltered,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super K&gt;&nbsp;keyPredicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map containing the mappings in <code>unfiltered</code> whose keys
+ satisfy a predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#filterValues(java.util.Map, com.google.common.base.Predicate)">filterValues</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;unfiltered,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super V&gt;&nbsp;valuePredicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map containing the mappings in <code>unfiltered</code> whose values
+ satisfy a predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#fromProperties(java.util.Properties)">fromProperties</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Properties.html?is-external=true" title="class or interface in java.util">Properties</A>&nbsp;properties)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an <code>ImmutableMap&lt;String, String&gt;</code> from a <code>Properties</code>
+ instance.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#immutableEntry(K, V)">immutableEntry</A></B>(K&nbsp;key,
+ V&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map entry with the specified key and value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V&gt;
+<BR>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumMap.html?is-external=true" title="class or interface in java.util">EnumMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#newEnumMap(java.lang.Class)">newEnumMap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;K&gt;&nbsp;type)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an <code>EnumMap</code> instance.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V&gt;
+<BR>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumMap.html?is-external=true" title="class or interface in java.util">EnumMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#newEnumMap(java.util.Map)">newEnumMap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,? extends V&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an <code>EnumMap</code> with the same mappings as the specified map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#newHashMap()">newHashMap</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i>, empty <code>HashMap</code> instance.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#newHashMap(java.util.Map)">newHashMap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i> <code>HashMap</code> instance with the same mappings as
+ the specified map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#newHashMapWithExpectedSize(int)">newHashMapWithExpectedSize</A></B>(int&nbsp;expectedSize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <code>HashMap</code> instance with enough capacity to hold the
+ specified number of elements without rehashing.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/IdentityHashMap.html?is-external=true" title="class or interface in java.util">IdentityHashMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#newIdentityHashMap()">newIdentityHashMap</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an <code>IdentityHashMap</code> instance.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedHashMap.html?is-external=true" title="class or interface in java.util">LinkedHashMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#newLinkedHashMap()">newLinkedHashMap</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i>, empty, insertion-ordered <code>LinkedHashMap</code>
+ instance.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedHashMap.html?is-external=true" title="class or interface in java.util">LinkedHashMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#newLinkedHashMap(java.util.Map)">newLinkedHashMap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i>, insertion-ordered <code>LinkedHashMap</code> instance
+ with the same mappings as the specified map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>,V&gt;
+<BR>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util">TreeMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#newTreeMap()">newTreeMap</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i>, empty <code>TreeMap</code> instance using the natural
+ ordering of its elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;C,K extends C,V&gt;
+<BR>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util">TreeMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#newTreeMap(java.util.Comparator)">newTreeMap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;C&gt;&nbsp;comparator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i>, empty <code>TreeMap</code> instance using the given
+ comparator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util">TreeMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#newTreeMap(java.util.SortedMap)">newTreeMap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;K,? extends V&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i> <code>TreeMap</code> instance with the same mappings as
+ the specified map and using the same ordering as the specified map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#synchronizedBiMap(com.google.common.collect.BiMap)">synchronizedBiMap</A></B>(<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;&nbsp;bimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) bimap backed by the specified bimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V1,V2&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V2&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#transformValues(java.util.Map, com.google.common.base.Function)">transformValues</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V1&gt;&nbsp;fromMap,
+ <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V1,V2&gt;&nbsp;function)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of a map where each value is transformed by a function.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#uniqueIndex(java.lang.Iterable, com.google.common.base.Function)">uniqueIndex</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;V&gt;&nbsp;values,
+ <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V,K&gt;&nbsp;keyFunction)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map for which the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util"><CODE>Map.values()</CODE></A> are the given
+ elements in the given order, and each key is the product of invoking a
+ supplied function on its corresponding value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#unmodifiableBiMap(com.google.common.collect.BiMap)">unmodifiableBiMap</A></B>(<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;? extends K,? extends V&gt;&nbsp;bimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified bimap.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="newHashMap()"><!-- --></A><H3>
+newHashMap</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</A>&lt;K,V&gt; <B>newHashMap</B>()</PRE>
+<DL>
+<DD>Creates a <i>mutable</i>, empty <code>HashMap</code> instance.
+
+ <p><b>Note:</b> if mutability is not required, use <A HREF="../../../../com/google/common/collect/ImmutableMap.html#of()"><CODE>ImmutableMap.of()</CODE></A> instead.
+
+ <p><b>Note:</b> if <code>K</code> is an <code>enum</code> type, use <A HREF="../../../../com/google/common/collect/Maps.html#newEnumMap(java.lang.Class)"><CODE>newEnumMap(java.lang.Class<K>)</CODE></A> instead.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a new, empty <code>HashMap</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newHashMapWithExpectedSize(int)"><!-- --></A><H3>
+newHashMapWithExpectedSize</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</A>&lt;K,V&gt; <B>newHashMapWithExpectedSize</B>(int&nbsp;expectedSize)</PRE>
+<DL>
+<DD>Creates a <code>HashMap</code> instance with enough capacity to hold the
+ specified number of elements without rehashing.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>expectedSize</CODE> - the expected size
+<DT><B>Returns:</B><DD>a new, empty <code>HashMap</code> with enough
+ capacity to hold <code>expectedSize</code> elements without rehashing
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>expectedSize</code> is negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newHashMap(java.util.Map)"><!-- --></A><H3>
+newHashMap</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</A>&lt;K,V&gt; <B>newHashMap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</PRE>
+<DL>
+<DD>Creates a <i>mutable</i> <code>HashMap</code> instance with the same mappings as
+ the specified map.
+
+ <p><b>Note:</b> if mutability is not required, use <A HREF="../../../../com/google/common/collect/ImmutableMap.html#copyOf(java.util.Map)"><CODE>ImmutableMap.copyOf(Map)</CODE></A> instead.
+
+ <p><b>Note:</b> if <code>K</code> is an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><CODE>Enum</CODE></A> type, use <A HREF="../../../../com/google/common/collect/Maps.html#newEnumMap(java.lang.Class)"><CODE>newEnumMap(java.lang.Class<K>)</CODE></A> instead.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>map</CODE> - the mappings to be placed in the new map
+<DT><B>Returns:</B><DD>a new <code>HashMap</code> initialized with the mappings from
+ <code>map</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newLinkedHashMap()"><!-- --></A><H3>
+newLinkedHashMap</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedHashMap.html?is-external=true" title="class or interface in java.util">LinkedHashMap</A>&lt;K,V&gt; <B>newLinkedHashMap</B>()</PRE>
+<DL>
+<DD>Creates a <i>mutable</i>, empty, insertion-ordered <code>LinkedHashMap</code>
+ instance.
+
+ <p><b>Note:</b> if mutability is not required, use <A HREF="../../../../com/google/common/collect/ImmutableMap.html#of()"><CODE>ImmutableMap.of()</CODE></A> instead.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a new, empty <code>LinkedHashMap</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newLinkedHashMap(java.util.Map)"><!-- --></A><H3>
+newLinkedHashMap</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedHashMap.html?is-external=true" title="class or interface in java.util">LinkedHashMap</A>&lt;K,V&gt; <B>newLinkedHashMap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</PRE>
+<DL>
+<DD>Creates a <i>mutable</i>, insertion-ordered <code>LinkedHashMap</code> instance
+ with the same mappings as the specified map.
+
+ <p><b>Note:</b> if mutability is not required, use <A HREF="../../../../com/google/common/collect/ImmutableMap.html#copyOf(java.util.Map)"><CODE>ImmutableMap.copyOf(Map)</CODE></A> instead.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>map</CODE> - the mappings to be placed in the new map
+<DT><B>Returns:</B><DD>a new, <code>LinkedHashMap</code> initialized with the
+ mappings from <code>map</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newTreeMap()"><!-- --></A><H3>
+newTreeMap</H3>
+<PRE>
+public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util">TreeMap</A>&lt;K,V&gt; <B>newTreeMap</B>()</PRE>
+<DL>
+<DD>Creates a <i>mutable</i>, empty <code>TreeMap</code> instance using the natural
+ ordering of its elements.
+
+ <p><b>Note:</b> if mutability is not required, use <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#of()"><CODE>ImmutableSortedMap.of()</CODE></A> instead.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a new, empty <code>TreeMap</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newTreeMap(java.util.SortedMap)"><!-- --></A><H3>
+newTreeMap</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util">TreeMap</A>&lt;K,V&gt; <B>newTreeMap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;K,? extends V&gt;&nbsp;map)</PRE>
+<DL>
+<DD>Creates a <i>mutable</i> <code>TreeMap</code> instance with the same mappings as
+ the specified map and using the same ordering as the specified map.
+
+ <p><b>Note:</b> if mutability is not required, use <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#copyOfSorted(java.util.SortedMap)"><CODE>ImmutableSortedMap.copyOfSorted(SortedMap)</CODE></A> instead.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>map</CODE> - the sorted map whose mappings are to be placed in the new map
+ and whose comparator is to be used to sort the new map
+<DT><B>Returns:</B><DD>a new <code>TreeMap</code> initialized with the mappings from <code>map</code> and using the comparator of <code>map</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newTreeMap(java.util.Comparator)"><!-- --></A><H3>
+newTreeMap</H3>
+<PRE>
+public static &lt;C,K extends C,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util">TreeMap</A>&lt;K,V&gt; <B>newTreeMap</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;C&gt;&nbsp;comparator)</PRE>
+<DL>
+<DD>Creates a <i>mutable</i>, empty <code>TreeMap</code> instance using the given
+ comparator.
+
+ <p><b>Note:</b> if mutability is not required, use <code>ImmutableSortedMap.orderedBy(comparator).build()</code> instead.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>comparator</CODE> - the comparator to sort the keys with
+<DT><B>Returns:</B><DD>a new, empty <code>TreeMap</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newEnumMap(java.lang.Class)"><!-- --></A><H3>
+newEnumMap</H3>
+<PRE>
+public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumMap.html?is-external=true" title="class or interface in java.util">EnumMap</A>&lt;K,V&gt; <B>newEnumMap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;K&gt;&nbsp;type)</PRE>
+<DL>
+<DD>Creates an <code>EnumMap</code> instance.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>type</CODE> - the key type for this map
+<DT><B>Returns:</B><DD>a new, empty <code>EnumMap</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newEnumMap(java.util.Map)"><!-- --></A><H3>
+newEnumMap</H3>
+<PRE>
+public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumMap.html?is-external=true" title="class or interface in java.util">EnumMap</A>&lt;K,V&gt; <B>newEnumMap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,? extends V&gt;&nbsp;map)</PRE>
+<DL>
+<DD>Creates an <code>EnumMap</code> with the same mappings as the specified map.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>map</CODE> - the map from which to initialize this <code>EnumMap</code>
+<DT><B>Returns:</B><DD>a new <code>EnumMap</code> initialized with the mappings from <code>map</code>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>m</code> is not an <code>EnumMap</code>
+ instance and contains no mappings</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newIdentityHashMap()"><!-- --></A><H3>
+newIdentityHashMap</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/IdentityHashMap.html?is-external=true" title="class or interface in java.util">IdentityHashMap</A>&lt;K,V&gt; <B>newIdentityHashMap</B>()</PRE>
+<DL>
+<DD>Creates an <code>IdentityHashMap</code> instance.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a new, empty <code>IdentityHashMap</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="synchronizedBiMap(com.google.common.collect.BiMap)"><!-- --></A><H3>
+synchronizedBiMap</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt; <B>synchronizedBiMap</B>(<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;&nbsp;bimap)</PRE>
+<DL>
+<DD>Returns a synchronized (thread-safe) bimap backed by the specified bimap.
+ In order to guarantee serial access, it is critical that <b>all</b> access
+ to the backing bimap is accomplished through the returned bimap.
+
+ <p>It is imperative that the user manually synchronize on the returned map
+ when accessing any of its collection views: <pre> <code>BiMap&lt;Long, String&gt; map = Maps.synchronizedBiMap(
+ HashBiMap.&lt;Long, String&gt;create());
+ ...
+ Set&lt;Long&gt; set = map.keySet(); // Needn't be in synchronized block
+ ...
+ synchronized (map) { // Synchronizing on map, not set!
+ Iterator&lt;Long&gt; it = set.iterator(); // Must be in synchronized block
+ while (it.hasNext()) {
+ foo(it.next());
+ }
+ }</code></pre>
+
+ Failure to follow this advice may result in non-deterministic behavior.
+
+ <p>The returned bimap will be serializable if the specified bimap is
+ serializable.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>bimap</CODE> - the bimap to be wrapped in a synchronized view
+<DT><B>Returns:</B><DD>a sychronized view of the specified bimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="difference(java.util.Map, java.util.Map)"><!-- --></A><H3>
+difference</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A>&lt;K,V&gt; <B>difference</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;left,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;right)</PRE>
+<DL>
+<DD>Computes the difference between two maps. This difference is an immutable
+ snapshot of the state of the maps at the time this method is called. It
+ will never change, even if the maps change at a later time.
+
+ <p>Since this method uses <code>HashMap</code> instances internally, the keys of
+ the supplied maps must be well-behaved with respect to
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A> and <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>.
+
+ <p><b>Note:</b>If you only need to know whether two maps have the same
+ mappings, call <code>left.equals(right)</code> instead of this method.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>left</CODE> - the map to treat as the "left" map for purposes of comparison<DD><CODE>right</CODE> - the map to treat as the "right" map for purposes of comparison
+<DT><B>Returns:</B><DD>the difference between the two maps</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="uniqueIndex(java.lang.Iterable, com.google.common.base.Function)"><!-- --></A><H3>
+uniqueIndex</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt; <B>uniqueIndex</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;V&gt;&nbsp;values,
+ <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V,K&gt;&nbsp;keyFunction)</PRE>
+<DL>
+<DD>Returns an immutable map for which the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util"><CODE>Map.values()</CODE></A> are the given
+ elements in the given order, and each key is the product of invoking a
+ supplied function on its corresponding value.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>values</CODE> - the values to use when constructing the <code>Map</code><DD><CODE>keyFunction</CODE> - the function used to produce the key for each value
+<DT><B>Returns:</B><DD>a map mapping the result of evaluating the function <code>keyFunction</code> on each value in the input collection to that value
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>keyFunction</code> produces the same
+ key for more than one value in the input collection
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any elements of <code>values</code> is null, or
+ if <code>keyFunction</code> produces <code>null</code> for any value</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="fromProperties(java.util.Properties)"><!-- --></A><H3>
+fromProperties</H3>
+<PRE>
+public static <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&gt; <B>fromProperties</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Properties.html?is-external=true" title="class or interface in java.util">Properties</A>&nbsp;properties)</PRE>
+<DL>
+<DD>Creates an <code>ImmutableMap&lt;String, String&gt;</code> from a <code>Properties</code>
+ instance. Properties normally derive from <code>Map&lt;Object, Object&gt;</code>, but
+ they typically contain strings, which is awkward. This method lets you get
+ a plain-old-<code>Map</code> out of a <code>Properties</code>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>properties</CODE> - a <code>Properties</code> object to be converted
+<DT><B>Returns:</B><DD>an immutable map containing all the entries in
+ <code>properties</code>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang">ClassCastException</A></CODE> - if any key in <code>Properties</code> is not a
+ <code>String</code>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>Properties</code> is
+ null.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="immutableEntry(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="immutableEntry(K, V)"><!-- --></A><H3>
+immutableEntry</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt; <B>immutableEntry</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ K&nbsp;key,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ V&nbsp;value)</PRE>
+<DL>
+<DD>Returns an immutable map entry with the specified key and value. The <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true#setValue(V)" title="class or interface in java.util"><CODE>Map.Entry.setValue(V)</CODE></A> operation throws an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang"><CODE>UnsupportedOperationException</CODE></A>.
+
+ <p>The returned entry is serializable.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - the key to be associated with the returned entry<DD><CODE>value</CODE> - the value to be associated with the returned entry</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="unmodifiableBiMap(com.google.common.collect.BiMap)"><!-- --></A><H3>
+unmodifiableBiMap</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt; <B>unmodifiableBiMap</B>(<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;? extends K,? extends V&gt;&nbsp;bimap)</PRE>
+<DL>
+<DD>Returns an unmodifiable view of the specified bimap. This method allows
+ modules to provide users with "read-only" access to internal bimaps. Query
+ operations on the returned bimap "read through" to the specified bimap, and
+ attemps to modify the returned map, whether direct or via its collection
+ views, result in an <code>UnsupportedOperationException</code>.
+
+ <p>The returned bimap will be serializable if the specified bimap is
+ serializable.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>bimap</CODE> - the bimap for which an unmodifiable view is to be returned
+<DT><B>Returns:</B><DD>an unmodifiable view of the specified bimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="transformValues(java.util.Map, com.google.common.base.Function)"><!-- --></A><H3>
+transformValues</H3>
+<PRE>
+public static &lt;K,V1,V2&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V2&gt; <B>transformValues</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V1&gt;&nbsp;fromMap,
+ <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V1,V2&gt;&nbsp;function)</PRE>
+<DL>
+<DD>Returns a view of a map where each value is transformed by a function. All
+ other properties of the map, such as iteration order, are left intact. For
+ example, the code:
+ <pre> <code>Map&lt;String, Integer&gt; map = ImmutableMap.of("a", 4, "b", 9);
+ Function&lt;Integer, Double&gt; sqrt = new Function&lt;Integer, Double&gt;() {
+ public Double apply(Integer in) {
+ return Math.sqrt((int) in);
+ }
+ };
+ Map&lt;String, Double&gt; transformed = Maps.transformValues(sqrt, map);
+ System.out.println(transformed);</code></pre>
+
+ ... prints <code>{a=2.0, b=3.0}</code>.
+
+ <p>Changes in the underlying map are reflected in this view. Conversely,
+ this view supports removal operations, and these are reflected in the
+ underlying map.
+
+ <p>It's acceptable for the underlying map to contain null keys, and even
+ null values provided that the function is capable of accepting null input.
+ The transformed map might contain null values, if the function sometimes
+ gives a null result.
+
+ <p>The returned map is not thread-safe or serializable, even if the
+ underlying map is.
+
+ <p>The function is applied lazily, invoked when needed. This is necessary
+ for the returned map to be a view, but it means that the function will be
+ applied many times for bulk operations like <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util"><CODE>Map.containsValue(java.lang.Object)</CODE></A> and
+ <code>Map.toString()</code>. For this to perform well, <code>function</code> should
+ be fast. To avoid lazy evaluation when the returned map doesn't need to be
+ a view, copy the returned map into a new map of your choosing.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="filterKeys(java.util.Map, com.google.common.base.Predicate)"><!-- --></A><H3>
+filterKeys</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt; <B>filterKeys</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;unfiltered,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super K&gt;&nbsp;keyPredicate)</PRE>
+<DL>
+<DD>Returns a map containing the mappings in <code>unfiltered</code> whose keys
+ satisfy a predicate. The returned map is a live view of <code>unfiltered</code>;
+ changes to one affect the other.
+
+ <p>The resulting map's <code>keySet()</code>, <code>entrySet()</code>, and <code>values()</code> views have iterators that don't support <code>remove()</code>, but all
+ other methods are supported by the map and its views. The map's <code>put()</code> and <code>putAll()</code> methods throw an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> if a key that doesn't satisfy the predicate is
+ provided.
+
+ <p>When methods such as <code>removeAll()</code> and <code>clear()</code> are called
+ on the filtered map or its views, only mappings whose keys satisfy the
+ filter will be removed from the underlying map.
+
+ <p>The returned map isn't threadsafe or serializable, even if <code>unfiltered</code> is.
+
+ <p>Many of the filtered map's methods, such as <code>size()</code>,
+ iterate across every key/value mapping in the underlying map and determine
+ which satisfy the filter. When a live view is <i>not</i> needed, it may be
+ faster to copy the filtered map and use the copy.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="filterValues(java.util.Map, com.google.common.base.Predicate)"><!-- --></A><H3>
+filterValues</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt; <B>filterValues</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;unfiltered,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super V&gt;&nbsp;valuePredicate)</PRE>
+<DL>
+<DD>Returns a map containing the mappings in <code>unfiltered</code> whose values
+ satisfy a predicate. The returned map is a live view of <code>unfiltered</code>;
+ changes to one affect the other.
+
+ <p>The resulting map's <code>keySet()</code>, <code>entrySet()</code>, and <code>values()</code> views have iterators that don't support <code>remove()</code>, but all
+ other methods are supported by the map and its views. The <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util"><CODE>Map.put(K, V)</CODE></A>,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util"><CODE>Map.putAll(java.util.Map<? extends K, ? extends V>)</CODE></A>, and <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true#setValue(V)" title="class or interface in java.util"><CODE>Map.Entry.setValue(V)</CODE></A> methods throw an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> if a value that doesn't satisfy the predicate is
+ provided.
+
+ <p>When methods such as <code>removeAll()</code> and <code>clear()</code> are called
+ on the filtered map or its views, only mappings whose values satisfy the
+ filter will be removed from the underlying map.
+
+ <p>The returned map isn't threadsafe or serializable, even if <code>unfiltered</code> is.
+
+ <p>Many of the filtered map's methods, such as <code>size()</code>,
+ iterate across every key/value mapping in the underlying map and determine
+ which satisfy the filter. When a live view is <i>not</i> needed, it may be
+ faster to copy the filtered map and use the copy.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="filterEntries(java.util.Map, com.google.common.base.Predicate)"><!-- --></A><H3>
+filterEntries</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt; <B>filterEntries</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;unfiltered,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt;&nbsp;entryPredicate)</PRE>
+<DL>
+<DD>Returns a map containing the mappings in <code>unfiltered</code> that satisfy a
+ predicate. The returned map is a live view of <code>unfiltered</code>; changes
+ to one affect the other.
+
+ <p>The resulting map's <code>keySet()</code>, <code>entrySet()</code>, and <code>values()</code> views have iterators that don't support <code>remove()</code>, but all
+ other methods are supported by the map and its views. The map's <code>put()</code> and <code>putAll()</code> methods throw an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> if a key/value pair that doesn't satisfy the
+ predicate is provided. Similarly, the map's entries have a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true#setValue(V)" title="class or interface in java.util"><CODE>Map.Entry.setValue(V)</CODE></A> method that throws an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> when
+ the existing key and the provided value don't satisfy the predicate.
+
+ <p>When methods such as <code>removeAll()</code> and <code>clear()</code> are called
+ on the filtered map or its views, only mappings that satisfy the filter
+ will be removed from the underlying map.
+
+ <p>The returned map isn't threadsafe or serializable, even if <code>unfiltered</code> is.
+
+ <p>Many of the filtered map's methods, such as <code>size()</code>,
+ iterate across every key/value mapping in the underlying map and determine
+ which satisfy the filter. When a live view is <i>not</i> needed, it may be
+ faster to copy the filtered map and use the copy.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Maps.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/Maps.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Maps.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/Multimap.html b/javadoc/com/google/common/collect/Multimap.html
new file mode 100644
index 0000000..d665cf2
--- /dev/null
+++ b/javadoc/com/google/common/collect/Multimap.html
@@ -0,0 +1,752 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+Multimap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Multimap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Multimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/Maps.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/Multimaps.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/Multimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Multimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Interface Multimap&lt;K,V&gt;</H2>
+<DL>
+<DT><DT><B>Type Parameters:</B><DD><CODE>K</CODE> - the type of keys maintained by this multimap<DD><CODE>V</CODE> - the type of mapped values</DL>
+<DL>
+<DT><B>All Known Subinterfaces:</B> <DD><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;, <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;, <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</DD>
+</DL>
+<DL>
+<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>, <A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>, <A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>, <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>, <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>, <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>, <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>, <A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public interface <B>Multimap&lt;K,V&gt;</B></DL>
+</PRE>
+
+<P>
+A collection similar to a <code>Map</code>, but which may associate multiple
+ values with a single key. If you call <A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)"><CODE>put(K, V)</CODE></A> twice, with the same key
+ but different values, the multimap contains mappings from the key to both
+ values.
+
+ <p>The methods <A HREF="../../../../com/google/common/collect/Multimap.html#get(K)"><CODE>get(K)</CODE></A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keySet()"><CODE>keySet()</CODE></A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keys()"><CODE>keys()</CODE></A>, <A HREF="../../../../com/google/common/collect/Multimap.html#values()"><CODE>values()</CODE></A>,
+ <A HREF="../../../../com/google/common/collect/Multimap.html#entries()"><CODE>entries()</CODE></A>, and <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>asMap()</CODE></A> return collections that are views of the
+ multimap. If the multimap is modifiable, updating it can change the contents
+ of those collections, and updating the collections will change the multimap.
+ In contrast, <A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)"><CODE>replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> and <A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)"><CODE>removeAll(java.lang.Object)</CODE></A> return collections
+ that are independent of subsequent multimap changes.
+
+ <p>Depending on the implementation, a multimap may or may not allow duplicate
+ key-value pairs. In other words, the multimap contents after adding the same
+ key and value twice varies between implementations. In multimaps allowing
+ duplicates, the multimap will contain two mappings, and <code>get</code> will
+ return a collection that includes the value twice. In multimaps not
+ supporting duplicates, the multimap will contain a single mapping from the
+ key to the value, and <code>get</code> will return a collection that includes the
+ value once.
+
+ <p>All methods that alter the multimap are optional, and the views returned
+ by the multimap may or may not be modifiable. When modification isn't
+ supported, those methods will throw an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang"><CODE>UnsupportedOperationException</CODE></A>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Jared Levy</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">asMap</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map view that associates each key with the corresponding values
+ in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all key-value pairs from the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified key-value pair.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains any values for the specified
+ key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified value for any
+ key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>,<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#entries()">entries</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all key-value pairs.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;obj)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object with this multimap for equality.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">get</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection view of all values associated with a key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the hash code for this multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains no key-value pairs.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection, which may contain duplicates, of all keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of all keys, each appearing once in the returned set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>&nbsp;key,
+ <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a key-value pair in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>,? extends <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all of another multimap's key-value pairs into this multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a key-value pair from the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all values associated with a given key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key, replacing any existing
+ values for that key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of key-value pairs in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all values in the multimap.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="size()"><!-- --></A><H3>
+size</H3>
+<PRE>
+int <B>size</B>()</PRE>
+<DL>
+<DD>Returns the number of key-value pairs in the multimap.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isEmpty()"><!-- --></A><H3>
+isEmpty</H3>
+<PRE>
+boolean <B>isEmpty</B>()</PRE>
+<DL>
+<DD>Returns <code>true</code> if the multimap contains no key-value pairs.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsKey(java.lang.Object)"><!-- --></A><H3>
+containsKey</H3>
+<PRE>
+boolean <B>containsKey</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD>Returns <code>true</code> if the multimap contains any values for the specified
+ key.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
+containsValue</H3>
+<PRE>
+boolean <B>containsValue</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD>Returns <code>true</code> if the multimap contains the specified value for any
+ key.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>value</CODE> - value to search for in multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsEntry(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
+containsEntry</H3>
+<PRE>
+boolean <B>containsEntry</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD>Returns <code>true</code> if the multimap contains the specified key-value pair.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap<DD><CODE>value</CODE> - value to search for in multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
+put</H3>
+<PRE>
+boolean <B>put</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>&nbsp;key,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&nbsp;value)</PRE>
+<DL>
+<DD>Stores a key-value pair in the multimap.
+
+ <p>Some multimap implementations allow duplicate key-value pairs, in which
+ case <code>put</code> always adds a new key-value pair and increases the
+ multimap size by 1. Other implementations prohibit duplicates, and storing
+ a key-value pair that's already in the multimap has no effect.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>value</CODE> - value to store in the multimap
+<DT><B>Returns:</B><DD><code>true</code> if the method increased the size of the multimap, or
+ <code>false</code> if the multimap already contained the key-value pair and
+ doesn't allow duplicates</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+boolean <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD>Removes a key-value pair from the multimap.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entry to remove from the multimap<DD><CODE>value</CODE> - value of entry to remove the multimap
+<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="putAll(K, java.lang.Iterable)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+boolean <B>putAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;&nbsp;values)</PRE>
+<DL>
+<DD>Stores a collection of values with the same key.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
+<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(com.google.common.collect.Multimap)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+boolean <B>putAll</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>,? extends <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;&nbsp;multimap)</PRE>
+<DL>
+<DD>Copies all of another multimap's key-value pairs into this multimap. The
+ order in which the mappings are added is determined by
+ <code>multimap.entries()</code>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - mappings to store in this multimap
+<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="replaceValues(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="replaceValues(K, java.lang.Iterable)"><!-- --></A><H3>
+replaceValues</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt; <B>replaceValues</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;&nbsp;values)</PRE>
+<DL>
+<DD>Stores a collection of values with the same key, replacing any existing
+ values for that key.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
+<DT><B>Returns:</B><DD>the collection of replaced values, or an empty collection if no
+ values were previously associated with the key. The collection
+ <i>may</i> be modifiable, but updating it will have no effect on the
+ multimap.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
+removeAll</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt; <B>removeAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD>Removes all values associated with a given key.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entries to remove from the multimap
+<DT><B>Returns:</B><DD>the collection of removed values, or an empty collection if no
+ values were associated with the provided key. The collection
+ <i>may</i> be modifiable, but updating it will have no effect on the
+ multimap.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clear()"><!-- --></A><H3>
+clear</H3>
+<PRE>
+void <B>clear</B>()</PRE>
+<DL>
+<DD>Removes all key-value pairs from the multimap.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(java.lang.Object)"><!-- --></A><A NAME="get(K)"><!-- --></A><H3>
+get</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt; <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>&nbsp;key)</PRE>
+<DL>
+<DD>Returns a collection view of all values associated with a key. If no
+ mappings in the multimap have the provided key, an empty collection is
+ returned.
+
+ <p>Changes to the returned collection will update the underlying multimap,
+ and vice versa.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap
+<DT><B>Returns:</B><DD>the collection of values that the key maps to</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keySet()"><!-- --></A><H3>
+keySet</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>&gt; <B>keySet</B>()</PRE>
+<DL>
+<DD>Returns the set of all keys, each appearing once in the returned set.
+ Changes to the returned set will update the underlying multimap, and vice
+ versa.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the collection of distinct keys</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keys()"><!-- --></A><H3>
+keys</H3>
+<PRE>
+<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>&gt; <B>keys</B>()</PRE>
+<DL>
+<DD>Returns a collection, which may contain duplicates, of all keys. The number
+ of times of key appears in the returned multiset equals the number of
+ mappings the key has in the multimap. Changes to the returned multiset will
+ update the underlying multimap, and vice versa.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a multiset with keys corresponding to the distinct keys of the
+ multimap and frequencies corresponding to the number of values that
+ each key maps to</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="values()"><!-- --></A><H3>
+values</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt; <B>values</B>()</PRE>
+<DL>
+<DD>Returns a collection of all values in the multimap. Changes to the returned
+ collection will update the underlying multimap, and vice versa.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>collection of values, which may include the same value multiple
+ times if it occurs in multiple mappings</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entries()"><!-- --></A><H3>
+entries</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>,<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;&gt; <B>entries</B>()</PRE>
+<DL>
+<DD>Returns a collection of all key-value pairs. Changes to the returned
+ collection will update the underlying multimap, and vice versa. The entries
+ collection does not support the <code>add</code> or <code>addAll</code> operations.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>collection of map entries consisting of key-value pairs</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="asMap()"><!-- --></A><H3>
+asMap</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;&gt; <B>asMap</B>()</PRE>
+<DL>
+<DD>Returns a map view that associates each key with the corresponding values
+ in the multimap. Changes to the returned map, such as element removal,
+ will update the underlying multimap. The map does not support
+ <code>setValue()</code> on its entries, <code>put</code>, or <code>putAll</code>.
+
+ <p>The collections returned by <code>asMap().get(Object)</code> have the same
+ behavior as those returned by <A HREF="../../../../com/google/common/collect/Multimap.html#get(K)"><CODE>get(K)</CODE></A>.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a map view from a key to its collection of values</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;obj)</PRE>
+<DL>
+<DD>Compares the specified object with this multimap for equality. Two
+ multimaps are equal when their map views, as returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>asMap()</CODE></A>,
+ are also equal.
+
+ <p>In general, two multimaps with identical key-value mappings may or may
+ not be equal, depending on the implementation. For example, two
+ <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A> instances with the same key-value mappings are equal,
+ but equality of two <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A> instances depends on the ordering
+ of the values for each key.
+
+ <p>A non-empty <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A> cannot be equal to a non-empty
+ <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A>, since their <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>asMap()</CODE></A> views contain unequal
+ collections as values. However, any two empty multimaps are equal, because
+ they both have empty <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>asMap()</CODE></A> views.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>obj</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+int <B>hashCode</B>()</PRE>
+<DL>
+<DD>Returns the hash code for this multimap.
+
+ <p>The hash code of a multimap is defined as the hash code of the map view,
+ as returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>asMap()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Multimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/Maps.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/Multimaps.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/Multimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Multimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/Multimaps.html b/javadoc/com/google/common/collect/Multimaps.html
new file mode 100644
index 0000000..19182e0
--- /dev/null
+++ b/javadoc/com/google/common/collect/Multimaps.html
@@ -0,0 +1,914 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:16 PST 2009 -->
+<TITLE>
+Multimaps (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Multimaps (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Multimaps.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/Multimaps.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Multimaps.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class Multimaps</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.Multimaps</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public final class <B>Multimaps</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+Provides static methods acting on or generating a <code>Multimap</code>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Jared Levy, Robert Konigsberg, Mike Bostock</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#forMap(java.util.Map)">forMap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a multimap view of the specified map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#index(java.lang.Iterable, com.google.common.base.Function)">index</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;V&gt;&nbsp;values,
+ <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V,K&gt;&nbsp;keyFunction)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an index <code>ImmutableMultimap</code> that contains the results of
+ applying a specified function to each item in an <code>Iterable</code> of
+ values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V,M extends <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&gt;
+<BR>
+M</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#invertFrom(com.google.common.collect.Multimap, M)">invertFrom</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends V,? extends K&gt;&nbsp;source,
+ M&nbsp;dest)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies each key-value mapping in <code>source</code> into <code>dest</code>, with
+ its key and value reversed.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#newListMultimap(java.util.Map, com.google.common.base.Supplier)">newListMultimap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
+ <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ListMultimap</code> that uses the provided map and factory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#newMultimap(java.util.Map, com.google.common.base.Supplier)">newMultimap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
+ <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>Multimap</code> that uses the provided map and factory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#newSetMultimap(java.util.Map, com.google.common.base.Supplier)">newSetMultimap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
+ <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>SetMultimap</code> that uses the provided map and factory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#newSortedSetMultimap(java.util.Map, com.google.common.base.Supplier)">newSortedSetMultimap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
+ <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>SortedSetMultimap</code> that uses the provided map and
+ factory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedListMultimap(com.google.common.collect.ListMultimap)">synchronizedListMultimap</A></B>(<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) <code>ListMultimap</code> backed by the
+ specified multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedMultimap(com.google.common.collect.Multimap)">synchronizedMultimap</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) multimap backed by the specified
+ multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedSetMultimap(com.google.common.collect.SetMultimap)">synchronizedSetMultimap</A></B>(<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) <code>SetMultimap</code> backed by the
+ specified multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedSortedSetMultimap(com.google.common.collect.SortedSetMultimap)">synchronizedSortedSetMultimap</A></B>(<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) <code>SortedSetMultimap</code> backed by
+ the specified multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#unmodifiableListMultimap(com.google.common.collect.ListMultimap)">unmodifiableListMultimap</A></B>(<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified <code>ListMultimap</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#unmodifiableMultimap(com.google.common.collect.Multimap)">unmodifiableMultimap</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#unmodifiableSetMultimap(com.google.common.collect.SetMultimap)">unmodifiableSetMultimap</A></B>(<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified <code>SetMultimap</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#unmodifiableSortedSetMultimap(com.google.common.collect.SortedSetMultimap)">unmodifiableSortedSetMultimap</A></B>(<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified <code>SortedSetMultimap</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="newMultimap(java.util.Map, com.google.common.base.Supplier)"><!-- --></A><H3>
+newMultimap</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt; <B>newMultimap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
+ <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;factory)</PRE>
+<DL>
+<DD>Creates a new <code>Multimap</code> that uses the provided map and factory. It
+ can generate a multimap based on arbitrary <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> and
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> classes.
+
+ <p>The <code>factory</code>-generated and <code>map</code> classes determine the
+ multimap iteration order. They also specify the behavior of the
+ <code>equals</code>, <code>hashCode</code>, and <code>toString</code> methods for the
+ multimap and its returned views. However, the multimap's <code>get</code>
+ method returns instances of a different class than <code>factory.get()</code>
+ does.
+
+ <p>The multimap is serializable if <code>map</code>, <code>factory</code>, the
+ collections generated by <code>factory</code>, and the multimap contents are all
+ serializable.
+
+ <p>The multimap is not threadsafe when any concurrent operations update the
+ multimap, even if <code>map</code> and the instances generated by
+ <code>factory</code> are. Concurrent read operations will work correctly. To
+ allow concurrent update operations, wrap the multimap with a call to
+ <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedMultimap(com.google.common.collect.Multimap)"><CODE>synchronizedMultimap(com.google.common.collect.Multimap<K, V>)</CODE></A>.
+
+ <p>Call this method only when the simpler methods
+ <A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#create()"><CODE>ArrayListMultimap.create()</CODE></A>, <A HREF="../../../../com/google/common/collect/HashMultimap.html#create()"><CODE>HashMultimap.create()</CODE></A>,
+ <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#create()"><CODE>LinkedHashMultimap.create()</CODE></A>, <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#create()"><CODE>LinkedListMultimap.create()</CODE></A>,
+ <A HREF="../../../../com/google/common/collect/TreeMultimap.html#create()"><CODE>TreeMultimap.create()</CODE></A>, and
+ <A HREF="../../../../com/google/common/collect/TreeMultimap.html#create(java.util.Comparator, java.util.Comparator)"><CODE>TreeMultimap.create(Comparator, Comparator)</CODE></A> won't suffice.
+
+ <p>Note: the multimap assumes complete ownership over of <code>map</code> and
+ the collections returned by <code>factory</code>. Those objects should not be
+ manually updated and they should not use soft, weak, or phantom references.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>map</CODE> - place to store the mapping from each key to its corresponding
+ values<DD><CODE>factory</CODE> - supplier of new, empty collections that will each hold all
+ values for a given key
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>map</code> is not empty</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newListMultimap(java.util.Map, com.google.common.base.Supplier)"><!-- --></A><H3>
+newListMultimap</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt; <B>newListMultimap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
+ <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;V&gt;&gt;&nbsp;factory)</PRE>
+<DL>
+<DD>Creates a new <code>ListMultimap</code> that uses the provided map and factory.
+ It can generate a multimap based on arbitrary <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> and <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>
+ classes.
+
+ <p>The <code>factory</code>-generated and <code>map</code> classes determine the
+ multimap iteration order. They also specify the behavior of the
+ <code>equals</code>, <code>hashCode</code>, and <code>toString</code> methods for the
+ multimap and its returned views. The multimap's <code>get</code>, <code>removeAll</code>, and <code>replaceValues</code> methods return <code>RandomAccess</code>
+ lists if the factory does. However, the multimap's <code>get</code> method
+ returns instances of a different class than does <code>factory.get()</code>.
+
+ <p>The multimap is serializable if <code>map</code>, <code>factory</code>, the
+ lists generated by <code>factory</code>, and the multimap contents are all
+ serializable.
+
+ <p>The multimap is not threadsafe when any concurrent operations update the
+ multimap, even if <code>map</code> and the instances generated by
+ <code>factory</code> are. Concurrent read operations will work correctly. To
+ allow concurrent update operations, wrap the multimap with a call to
+ <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedListMultimap(com.google.common.collect.ListMultimap)"><CODE>synchronizedListMultimap(com.google.common.collect.ListMultimap<K, V>)</CODE></A>.
+
+ <p>Call this method only when the simpler methods
+ <A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#create()"><CODE>ArrayListMultimap.create()</CODE></A> and <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#create()"><CODE>LinkedListMultimap.create()</CODE></A>
+ won't suffice.
+
+ <p>Note: the multimap assumes complete ownership over of <code>map</code> and
+ the lists returned by <code>factory</code>. Those objects should not be manually
+ updated and they should not use soft, weak, or phantom references.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>map</CODE> - place to store the mapping from each key to its corresponding
+ values<DD><CODE>factory</CODE> - supplier of new, empty lists that will each hold all values
+ for a given key
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>map</code> is not empty</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newSetMultimap(java.util.Map, com.google.common.base.Supplier)"><!-- --></A><H3>
+newSetMultimap</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt; <B>newSetMultimap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
+ <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt;&gt;&nbsp;factory)</PRE>
+<DL>
+<DD>Creates a new <code>SetMultimap</code> that uses the provided map and factory.
+ It can generate a multimap based on arbitrary <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> and <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>
+ classes.
+
+ <p>The <code>factory</code>-generated and <code>map</code> classes determine the
+ multimap iteration order. They also specify the behavior of the
+ <code>equals</code>, <code>hashCode</code>, and <code>toString</code> methods for the
+ multimap and its returned views. However, the multimap's <code>get</code>
+ method returns instances of a different class than <code>factory.get()</code>
+ does.
+
+ <p>The multimap is serializable if <code>map</code>, <code>factory</code>, the
+ sets generated by <code>factory</code>, and the multimap contents are all
+ serializable.
+
+ <p>The multimap is not threadsafe when any concurrent operations update the
+ multimap, even if <code>map</code> and the instances generated by
+ <code>factory</code> are. Concurrent read operations will work correctly. To
+ allow concurrent update operations, wrap the multimap with a call to
+ <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedSetMultimap(com.google.common.collect.SetMultimap)"><CODE>synchronizedSetMultimap(com.google.common.collect.SetMultimap<K, V>)</CODE></A>.
+
+ <p>Call this method only when the simpler methods
+ <A HREF="../../../../com/google/common/collect/HashMultimap.html#create()"><CODE>HashMultimap.create()</CODE></A>, <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#create()"><CODE>LinkedHashMultimap.create()</CODE></A>,
+ <A HREF="../../../../com/google/common/collect/TreeMultimap.html#create()"><CODE>TreeMultimap.create()</CODE></A>, and
+ <A HREF="../../../../com/google/common/collect/TreeMultimap.html#create(java.util.Comparator, java.util.Comparator)"><CODE>TreeMultimap.create(Comparator, Comparator)</CODE></A> won't suffice.
+
+ <p>Note: the multimap assumes complete ownership over of <code>map</code> and
+ the sets returned by <code>factory</code>. Those objects should not be manually
+ updated and they should not use soft, weak, or phantom references.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>map</CODE> - place to store the mapping from each key to its corresponding
+ values<DD><CODE>factory</CODE> - supplier of new, empty sets that will each hold all values
+ for a given key
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>map</code> is not empty</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newSortedSetMultimap(java.util.Map, com.google.common.base.Supplier)"><!-- --></A><H3>
+newSortedSetMultimap</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt; <B>newSortedSetMultimap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
+ <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;V&gt;&gt;&nbsp;factory)</PRE>
+<DL>
+<DD>Creates a new <code>SortedSetMultimap</code> that uses the provided map and
+ factory. It can generate a multimap based on arbitrary <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> and
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A> classes.
+
+ <p>The <code>factory</code>-generated and <code>map</code> classes determine the
+ multimap iteration order. They also specify the behavior of the
+ <code>equals</code>, <code>hashCode</code>, and <code>toString</code> methods for the
+ multimap and its returned views. However, the multimap's <code>get</code>
+ method returns instances of a different class than <code>factory.get()</code>
+ does.
+
+ <p>The multimap is serializable if <code>map</code>, <code>factory</code>, the
+ sets generated by <code>factory</code>, and the multimap contents are all
+ serializable.
+
+ <p>The multimap is not threadsafe when any concurrent operations update the
+ multimap, even if <code>map</code> and the instances generated by
+ <code>factory</code> are. Concurrent read operations will work correctly. To
+ allow concurrent update operations, wrap the multimap with a call to
+ <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedSortedSetMultimap(com.google.common.collect.SortedSetMultimap)"><CODE>synchronizedSortedSetMultimap(com.google.common.collect.SortedSetMultimap<K, V>)</CODE></A>.
+
+ <p>Call this method only when the simpler methods
+ <A HREF="../../../../com/google/common/collect/TreeMultimap.html#create()"><CODE>TreeMultimap.create()</CODE></A> and
+ <A HREF="../../../../com/google/common/collect/TreeMultimap.html#create(java.util.Comparator, java.util.Comparator)"><CODE>TreeMultimap.create(Comparator, Comparator)</CODE></A> won't suffice.
+
+ <p>Note: the multimap assumes complete ownership over of <code>map</code> and
+ the sets returned by <code>factory</code>. Those objects should not be manually
+ updated and they should not use soft, weak, or phantom references.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>map</CODE> - place to store the mapping from each key to its corresponding
+ values<DD><CODE>factory</CODE> - supplier of new, empty sorted sets that will each hold
+ all values for a given key
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>map</code> is not empty</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="invertFrom(com.google.common.collect.Multimap,com.google.common.collect.Multimap)"><!-- --></A><A NAME="invertFrom(com.google.common.collect.Multimap, M)"><!-- --></A><H3>
+invertFrom</H3>
+<PRE>
+public static &lt;K,V,M extends <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&gt; M <B>invertFrom</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends V,? extends K&gt;&nbsp;source,
+ M&nbsp;dest)</PRE>
+<DL>
+<DD>Copies each key-value mapping in <code>source</code> into <code>dest</code>, with
+ its key and value reversed.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>source</CODE> - any multimap<DD><CODE>dest</CODE> - the multimap to copy into; usually empty
+<DT><B>Returns:</B><DD><code>dest</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="synchronizedMultimap(com.google.common.collect.Multimap)"><!-- --></A><H3>
+synchronizedMultimap</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt; <B>synchronizedMultimap</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&nbsp;multimap)</PRE>
+<DL>
+<DD>Returns a synchronized (thread-safe) multimap backed by the specified
+ multimap. In order to guarantee serial access, it is critical that
+ <b>all</b> access to the backing multimap is accomplished through the
+ returned multimap.
+
+ <p>It is imperative that the user manually synchronize on the returned
+ multimap when accessing any of its collection views: <pre> <code>Multimap&lt;K, V&gt; m = Multimaps.synchronizedMultimap(
+ HashMultimap.&lt;K, V&gt;create());
+ ...
+ Set&lt;K&gt; s = m.keySet(); // Needn't be in synchronized block
+ ...
+ synchronized (m) { // Synchronizing on m, not s!
+ Iterator&lt;K&gt; i = s.iterator(); // Must be in synchronized block
+ while (i.hasNext()) {
+ foo(i.next());
+ }
+ }</code></pre>
+
+ Failure to follow this advice may result in non-deterministic behavior.
+
+ <p>Note that the generated multimap's <A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)"><CODE>Multimap.removeAll(java.lang.Object)</CODE></A> and
+ <A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)"><CODE>Multimap.replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> methods return collections that aren't
+ synchronized.
+
+ <p>The returned multimap will be serializable if the specified multimap is
+ serializable.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - the multimap to be wrapped in a synchronized view
+<DT><B>Returns:</B><DD>a synchronized view of the specified multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="unmodifiableMultimap(com.google.common.collect.Multimap)"><!-- --></A><H3>
+unmodifiableMultimap</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt; <B>unmodifiableMultimap</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&nbsp;delegate)</PRE>
+<DL>
+<DD>Returns an unmodifiable view of the specified multimap. Query operations on
+ the returned multimap "read through" to the specified multimap, and
+ attempts to modify the returned multimap, either directly or through the
+ multimap's views, result in an <code>UnsupportedOperationException</code>.
+
+ <p>Note that the generated multimap's <A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)"><CODE>Multimap.removeAll(java.lang.Object)</CODE></A> and
+ <A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)"><CODE>Multimap.replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> methods return collections that are
+ modifiable.
+
+ <p>The returned multimap will be serializable if the specified multimap is
+ serializable.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>delegate</CODE> - the multimap for which an unmodifiable view is to be
+ returned
+<DT><B>Returns:</B><DD>an unmodifiable view of the specified multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="synchronizedSetMultimap(com.google.common.collect.SetMultimap)"><!-- --></A><H3>
+synchronizedSetMultimap</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt; <B>synchronizedSetMultimap</B>(<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;&nbsp;multimap)</PRE>
+<DL>
+<DD>Returns a synchronized (thread-safe) <code>SetMultimap</code> backed by the
+ specified multimap.
+
+ <p>You must follow the warnings described in <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedMultimap(com.google.common.collect.Multimap)"><CODE>synchronizedMultimap(com.google.common.collect.Multimap<K, V>)</CODE></A>.
+
+ <p>The returned multimap will be serializable if the specified multimap is
+ serializable.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - the multimap to be wrapped
+<DT><B>Returns:</B><DD>a synchronized view of the specified multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="unmodifiableSetMultimap(com.google.common.collect.SetMultimap)"><!-- --></A><H3>
+unmodifiableSetMultimap</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt; <B>unmodifiableSetMultimap</B>(<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;&nbsp;delegate)</PRE>
+<DL>
+<DD>Returns an unmodifiable view of the specified <code>SetMultimap</code>. Query
+ operations on the returned multimap "read through" to the specified
+ multimap, and attempts to modify the returned multimap, either directly or
+ through the multimap's views, result in an
+ <code>UnsupportedOperationException</code>.
+
+ <p>Note that the generated multimap's <A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)"><CODE>Multimap.removeAll(java.lang.Object)</CODE></A> and
+ <A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)"><CODE>Multimap.replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> methods return collections that are
+ modifiable.
+
+ <p>The returned multimap will be serializable if the specified multimap is
+ serializable.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>delegate</CODE> - the multimap for which an unmodifiable view is to be
+ returned
+<DT><B>Returns:</B><DD>an unmodifiable view of the specified multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="synchronizedSortedSetMultimap(com.google.common.collect.SortedSetMultimap)"><!-- --></A><H3>
+synchronizedSortedSetMultimap</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt; <B>synchronizedSortedSetMultimap</B>(<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;&nbsp;multimap)</PRE>
+<DL>
+<DD>Returns a synchronized (thread-safe) <code>SortedSetMultimap</code> backed by
+ the specified multimap.
+
+ <p>You must follow the warnings described in <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedMultimap(com.google.common.collect.Multimap)"><CODE>synchronizedMultimap(com.google.common.collect.Multimap<K, V>)</CODE></A>.
+
+ <p>The returned multimap will be serializable if the specified multimap is
+ serializable.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - the multimap to be wrapped
+<DT><B>Returns:</B><DD>a synchronized view of the specified multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="unmodifiableSortedSetMultimap(com.google.common.collect.SortedSetMultimap)"><!-- --></A><H3>
+unmodifiableSortedSetMultimap</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt; <B>unmodifiableSortedSetMultimap</B>(<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;&nbsp;delegate)</PRE>
+<DL>
+<DD>Returns an unmodifiable view of the specified <code>SortedSetMultimap</code>.
+ Query operations on the returned multimap "read through" to the specified
+ multimap, and attempts to modify the returned multimap, either directly or
+ through the multimap's views, result in an
+ <code>UnsupportedOperationException</code>.
+
+ <p>Note that the generated multimap's <A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)"><CODE>Multimap.removeAll(java.lang.Object)</CODE></A> and
+ <A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)"><CODE>Multimap.replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> methods return collections that are
+ modifiable.
+
+ <p>The returned multimap will be serializable if the specified multimap is
+ serializable.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>delegate</CODE> - the multimap for which an unmodifiable view is to be
+ returned
+<DT><B>Returns:</B><DD>an unmodifiable view of the specified multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="synchronizedListMultimap(com.google.common.collect.ListMultimap)"><!-- --></A><H3>
+synchronizedListMultimap</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt; <B>synchronizedListMultimap</B>(<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;&nbsp;multimap)</PRE>
+<DL>
+<DD>Returns a synchronized (thread-safe) <code>ListMultimap</code> backed by the
+ specified multimap.
+
+ <p>You must follow the warnings described in <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedMultimap(com.google.common.collect.Multimap)"><CODE>synchronizedMultimap(com.google.common.collect.Multimap<K, V>)</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - the multimap to be wrapped
+<DT><B>Returns:</B><DD>a synchronized view of the specified multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="unmodifiableListMultimap(com.google.common.collect.ListMultimap)"><!-- --></A><H3>
+unmodifiableListMultimap</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt; <B>unmodifiableListMultimap</B>(<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;&nbsp;delegate)</PRE>
+<DL>
+<DD>Returns an unmodifiable view of the specified <code>ListMultimap</code>. Query
+ operations on the returned multimap "read through" to the specified
+ multimap, and attempts to modify the returned multimap, either directly or
+ through the multimap's views, result in an
+ <code>UnsupportedOperationException</code>.
+
+ <p>Note that the generated multimap's <A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)"><CODE>Multimap.removeAll(java.lang.Object)</CODE></A> and
+ <A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)"><CODE>Multimap.replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> methods return collections that are
+ modifiable.
+
+ <p>The returned multimap will be serializable if the specified multimap is
+ serializable.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>delegate</CODE> - the multimap for which an unmodifiable view is to be
+ returned
+<DT><B>Returns:</B><DD>an unmodifiable view of the specified multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="forMap(java.util.Map)"><!-- --></A><H3>
+forMap</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt; <B>forMap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;map)</PRE>
+<DL>
+<DD>Returns a multimap view of the specified map. The multimap is backed by the
+ map, so changes to the map are reflected in the multimap, and vice versa.
+ If the map is modified while an iteration over one of the multimap's
+ collection views is in progress (except through the iterator's own <code>remove</code> operation, or through the <code>setValue</code> operation on a map entry
+ returned by the iterator), the results of the iteration are undefined.
+
+ <p>The multimap supports mapping removal, which removes the corresponding
+ mapping from the map. It does not support any operations which might add
+ mappings, such as <code>put</code>, <code>putAll</code> or <code>replaceValues</code>.
+
+ <p>The returned multimap will be serializable if the specified map is
+ serializable.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>map</CODE> - the backing map for the returned multimap view</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="index(java.lang.Iterable, com.google.common.base.Function)"><!-- --></A><H3>
+index</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt; <B>index</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;V&gt;&nbsp;values,
+ <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V,K&gt;&nbsp;keyFunction)</PRE>
+<DL>
+<DD>Creates an index <code>ImmutableMultimap</code> that contains the results of
+ applying a specified function to each item in an <code>Iterable</code> of
+ values. Each value will be stored as a value in the resulting multimap,
+ yielding a multimap with the same size as the input iterable. The key used
+ to store that value in the multimap will be the result of calling the
+ function on that value. The resulting multimap is created as an immutable
+ snapshot, it does <em>not</em> reflect subsequent changes on the input
+ iterable.
+
+ <p>For example, <pre class="code"> <code>List&lt;String&gt; badGuys
+ = Arrays.asList("Inky", "Blinky", "Pinky", "Pinky", "Clyde");
+ Function&lt;String, Integer&gt; stringLengthFunction = ...;
+ Multimap&lt;Integer, String&gt; index
+ = Multimaps.index(badGuys, stringLengthFunction);
+ System.out.println(index);</code></pre>
+
+ prints <pre class="code"> <code>{4=[Inky], 5=[Pinky, Pinky, Clyde], 6=[Blinky]}</code></pre>
+
+ <p>The returned multimap is serializable if its keys and values are all
+ serializable.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>values</CODE> - the values to use when constructing the <code>ImmutableMultimap</code><DD><CODE>keyFunction</CODE> - the function used to produce the key for each value
+<DT><B>Returns:</B><DD><code>ImmutableMultimap</code> mapping the result of evaluating the
+ function <code>keyFunction</code> on each value in the input collection to
+ that value
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of the following cases is true: <ul>
+ <li> <code>values</code> is null
+ <li> <code>keyFunction</code> is null
+ <li> An element in <code>values</code> is null
+ <li> <code>keyFunction</code> returns null for any element of <code>values</code>
+ </ul></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Multimaps.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/Multimaps.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Multimaps.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/Multiset.Entry.html b/javadoc/com/google/common/collect/Multiset.Entry.html
new file mode 100644
index 0000000..37bb3d4
--- /dev/null
+++ b/javadoc/com/google/common/collect/Multiset.Entry.html
@@ -0,0 +1,411 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Multiset.Entry (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Multiset.Entry (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Multiset.Entry.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/Multisets.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/Multiset.Entry.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Multiset.Entry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Interface Multiset.Entry&lt;E&gt;</H2>
+<DL>
+<DT><B>Enclosing interface:</B><DD><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public static interface <B>Multiset.Entry&lt;E&gt;</B></DL>
+</PRE>
+
+<P>
+An unmodifiable element-count pair for a multiset. The <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A> method returns a view of the multiset whose elements
+ are of this class. A multiset implementation may return Entry instances
+ that are either live "read-through" views to the Multiset, or immutable
+ snapshots. Note that this type is unrelated to the similarly-named type
+ <code>Map.Entry</code>.
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.Entry.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;o)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indicates whether some other object is "equal to" this one.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.Entry.html#getCount()">getCount</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the count of the associated element in the underlying multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="type parameter in Multiset.Entry">E</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.Entry.html#getElement()">getElement</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the multiset element corresponding to this entry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.Entry.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code value for the object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.Entry.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the canonical string representation of this entry, defined as
+ follows.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="getElement()"><!-- --></A><H3>
+getElement</H3>
+<PRE>
+<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="type parameter in Multiset.Entry">E</A> <B>getElement</B>()</PRE>
+<DL>
+<DD>Returns the multiset element corresponding to this entry. Multiple calls
+ to this method always return the same instance.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the element corresponding to this entry</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getCount()"><!-- --></A><H3>
+getCount</H3>
+<PRE>
+int <B>getCount</B>()</PRE>
+<DL>
+<DD>Returns the count of the associated element in the underlying multiset.
+ This count may either be an unchanging snapshot of the count at the time
+ the entry was retrieved, or a live view of the current count of the
+ element in the multiset, depending on the implementation. Note that in
+ the former case, this method can never return zero, while in the latter,
+ it will return zero if all occurrences of the element were since removed
+ from the multiset.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the count of the element; never negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+boolean <B>equals</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;o)</PRE>
+<DL>
+<DD>Indicates whether some other object is "equal to" this one.
+ <p>
+ The <code>equals</code> method implements an equivalence relation
+ on non-null object references:
+ <ul>
+ <li>It is <i>reflexive</i>: for any non-null reference value
+ <code>x</code>, <code>x.equals(x)</code> should return
+ <code>true</code>.
+ <li>It is <i>symmetric</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, <code>x.equals(y)</code>
+ should return <code>true</code> if and only if
+ <code>y.equals(x)</code> returns <code>true</code>.
+ <li>It is <i>transitive</i>: for any non-null reference values
+ <code>x</code>, <code>y</code>, and <code>z</code>, if
+ <code>x.equals(y)</code> returns <code>true</code> and
+ <code>y.equals(z)</code> returns <code>true</code>, then
+ <code>x.equals(z)</code> should return <code>true</code>.
+ <li>It is <i>consistent</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, multiple invocations of
+ <tt>x.equals(y)</tt> consistently return <code>true</code>
+ or consistently return <code>false</code>, provided no
+ information used in <code>equals</code> comparisons on the
+ objects is modified.
+ <li>For any non-null reference value <code>x</code>,
+ <code>x.equals(null)</code> should return <code>false</code>.
+ </ul>
+ <p>
+ The <tt>equals</tt> method for class <code>Object</code> implements
+ the most discriminating possible equivalence relation on objects;
+ that is, for any non-null reference values <code>x</code> and
+ <code>y</code>, this method returns <code>true</code> if and only
+ if <code>x</code> and <code>y</code> refer to the same object
+ (<code>x == y</code> has the value <code>true</code>).
+ <p>
+ Note that it is generally necessary to override the <tt>hashCode</tt>
+ method whenever this method is overridden, so as to maintain the
+ general contract for the <tt>hashCode</tt> method, which states
+ that equal objects must have equal hash codes.
+
+ TODO: check this wrt TreeMultiset
+
+ <p>Returns <code>true</code> if the given object is also a multiset entry and
+ the two entries represent the same element and count. More formally, two
+ entries <code>a</code> and <code>b</code> are equal if:
+
+ <pre> ((a.getElement() == null)
+ ? (b.getElement() == null) : a.getElement().equals(b.getElement()))
+ && (a.getCount() == b.getCount())</pre>
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>o</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+int <B>hashCode</B>()</PRE>
+<DL>
+<DD>Returns a hash code value for the object. This method is
+ supported for the benefit of hashtables such as those provided by
+ <code>java.util.Hashtable</code>.
+ <p>
+ The general contract of <code>hashCode</code> is:
+ <ul>
+ <li>Whenever it is invoked on the same object more than once during
+ an execution of a Java application, the <tt>hashCode</tt> method
+ must consistently return the same integer, provided no information
+ used in <tt>equals</tt> comparisons on the object is modified.
+ This integer need not remain consistent from one execution of an
+ application to another execution of the same application.
+ <li>If two objects are equal according to the <tt>equals(Object)</tt>
+ method, then calling the <code>hashCode</code> method on each of
+ the two objects must produce the same integer result.
+ <li>It is <em>not</em> required that if two objects are unequal
+ according to the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>
+ method, then calling the <tt>hashCode</tt> method on each of the
+ two objects must produce distinct integer results. However, the
+ programmer should be aware that producing distinct integer results
+ for unequal objects may improve the performance of hashtables.
+ </ul>
+ <p>
+ As much as is reasonably practical, the hashCode method defined by
+ class <tt>Object</tt> does return distinct integers for distinct
+ objects. (This is typically implemented by converting the internal
+ address of the object into an integer, but this implementation
+ technique is not required by the
+ Java<font size="-2"><sup>TM</sup></font> programming language.)
+
+ <p>The hash code of a multiset entry for element <code>element</code> and
+ count <code>count</code> is defined as:
+
+ <pre> (element == null ? 0 : element.hashCode()) ^ count</pre>
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Returns the canonical string representation of this entry, defined as
+ follows. If the count for this entry is one, this is simply the string
+ representation of the corresponding element. Otherwise, it is the string
+ representation of the element, followed by the three characters <code>" x "</code> (space, letter x, space), followed by the count.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a string representation of the object.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Multiset.Entry.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/Multisets.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/Multiset.Entry.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Multiset.Entry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/Multiset.html b/javadoc/com/google/common/collect/Multiset.html
new file mode 100644
index 0000000..caa5f7d
--- /dev/null
+++ b/javadoc/com/google/common/collect/Multiset.html
@@ -0,0 +1,875 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Multiset (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Multiset (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Multiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/Multimaps.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/Multiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Multiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Interface Multiset&lt;E&gt;</H2>
+<DL>
+<DT><B>All Superinterfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;</DD>
+</DL>
+<DL>
+<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>, <A HREF="../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset</A>, <A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>, <A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>, <A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>, <A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public interface <B>Multiset&lt;E&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</DL>
+</PRE>
+
+<P>
+A collection that supports order-independent equality, like <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>, but
+ may have duplicate elements. A multiset is also sometimes called a
+ <i>bag</i>.
+
+ <p>Elements of a multiset that are equal to one another (see "Note on
+ element equivalence", below) are referred to as <i>occurrences</i> of the
+ same single element. The total number of occurrences of an element in a
+ multiset is called the <i>count</i> of that element (the terms "frequency"
+ and "multiplicity" are equivalent, but not used in this API). Since the count
+ of an element is represented as an <code>int</code>, a multiset may never contain
+ more than <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Integer.MAX_VALUE</CODE></A> occurrences of any one element.
+
+ <p><code>Multiset</code> refines the specifications of several methods from
+ <code>Collection</code>. It also defines an additional query operation, <A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)"><CODE>count(java.lang.Object)</CODE></A>, which returns the count of an element. There are five new
+ bulk-modification operations, for example <A HREF="../../../../com/google/common/collect/Multiset.html#add(E, int)"><CODE>add(Object, int)</CODE></A>, to add
+ or remove multiple occurrences of an element at once, or to set the count of
+ an element to a specific value. These modification operations are optional,
+ but implementations which support the standard collection operations <A HREF="../../../../com/google/common/collect/Multiset.html#add(E)"><CODE>add(Object)</CODE></A> or <A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object)"><CODE>remove(Object)</CODE></A> are encouraged to implement the
+ related methods as well. Finally, two collection views are provided: <A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()"><CODE>elementSet()</CODE></A> contains the distinct elements of the multiset "with duplicates
+ collapsed", and <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>entrySet()</CODE></A> is similar but contains <A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect"><CODE>Multiset.Entry</CODE></A> instances, each providing both a distinct element and the
+ count of that element.
+
+ <p>In addition to these required methods, implementations of <code>Multiset</code> are expected to provide two <code>static</code> creation methods:
+ <code>create()</code>, returning an empty multiset, and <code>create(Iterable&lt;? extends E&gt;)</code>, returning a multiset containing the
+ given initial elements. This is simply a refinement of <code>Collection</code>'s
+ constructor recommendations, reflecting the new developments of Java 5.
+
+ <p>As with other collection types, the modification operations are optional,
+ and should throw <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang"><CODE>UnsupportedOperationException</CODE></A> when they are not
+ implemented. Most implementations should support either all add operations
+ or none of them, all removal operations or none of them, and if and only if
+ all of these are supported, the <code>setCount</code> methods as well.
+
+ <p>A multiset uses <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A> to determine whether two instances
+ should be considered "the same," <i>unless specified otherwise</i> by the
+ implementation.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion</DD>
+</DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;interface</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="type parameter in Multiset.Entry">E</A>&gt;</B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An unmodifiable element-count pair for a multiset.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#add(E)">add</A></B>(<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a single occurrence of the specified element to this multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#add(E, int)">add</A></B>(<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&nbsp;element,
+ int&nbsp;occurrences)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a number of occurrences of an element to this multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#contains(java.lang.Object)">contains</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether this multiset contains the specified element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#containsAll(java.util.Collection)">containsAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if this multiset contains at least one occurrence of
+ each element in the specified collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">count</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of occurrences of an element in this multiset (the
+ <i>count</i> of the element).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">elementSet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of distinct elements contained in this multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()">entrySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
+ the count of that element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object with this multiset for equality.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the hash code for this multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#iterator()">iterator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator over the elements in this collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a <i>single</i> occurrence of the specified element from this
+ multiset, if present.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object, int)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
+ int&nbsp;occurrences)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a number of occurrences of the specified element from this
+ multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#removeAll(java.util.Collection)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;c)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all of this collection's elements that are also contained in the
+ specified collection (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#retainAll(java.util.Collection)">retainAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;c)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retains only the elements in this collection that are contained in the
+ specified collection (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)">setCount</A></B>(<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&nbsp;element,
+ int&nbsp;count)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds or removes the necessary occurrences of an element such that the
+ element attains the desired count.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int, int)">setCount</A></B>(<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&nbsp;element,
+ int&nbsp;oldCount,
+ int&nbsp;newCount)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Conditionally sets the count of an element to a new value, as described in
+ <A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)"><CODE>setCount(Object, int)</CODE></A>, provided that the element has the expected
+ current count.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string representation of the object.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Collection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="count(java.lang.Object)"><!-- --></A><H3>
+count</H3>
+<PRE>
+int <B>count</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD>Returns the number of occurrences of an element in this multiset (the
+ <i>count</i> of the element). Note that for an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>-based
+ multiset, this gives the same result as <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#frequency(java.util.Collection, java.lang.Object)" title="class or interface in java.util"><CODE>Collections.frequency(java.util.Collection<?>, java.lang.Object)</CODE></A>
+ (which would presumably perform more poorly).
+
+ <p><b>Note:</b> the utility method <A HREF="../../../../com/google/common/collect/Iterables.html#frequency(java.lang.Iterable, java.lang.Object)"><CODE>Iterables.frequency(java.lang.Iterable<?>, java.lang.Object)</CODE></A> generalizes
+ this operation; it correctly delegates to this method when dealing with a
+ multiset, but it can also accept any other iterable type.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to count occurrences of
+<DT><B>Returns:</B><DD>the number of occurrences of the element in this multiset; possibly
+ zero but never negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="add(java.lang.Object,int)"><!-- --></A><A NAME="add(E, int)"><!-- --></A><H3>
+add</H3>
+<PRE>
+int <B>add</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&nbsp;element,
+ int&nbsp;occurrences)</PRE>
+<DL>
+<DD>Adds a number of occurrences of an element to this multiset. Note that if
+ <code>occurrences == 1</code>, this method has the identical effect to <A HREF="../../../../com/google/common/collect/Multiset.html#add(E)"><CODE>add(Object)</CODE></A>. This method is functionally equivalent (except in the case
+ of overflow) to the call <code>addAll(Collections.nCopies(element,
+ occurrences))</code>, which would presumably perform much more poorly.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add occurrences of; may be <code>null</code> only
+ if explicitly allowed by the implementation<DD><CODE>occurrences</CODE> - the number of occurrences of the element to add. May be
+ zero, in which case no change will be made.
+<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>occurrences</code> is negative, or if
+ this operation would result in more than <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Integer.MAX_VALUE</CODE></A>
+ occurrences of the element
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>element</code> is null and this
+ implementation does not permit null elements. Note that if <code>occurrences</code> is zero, the implementation may opt to return normally.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object, int)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+int <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
+ int&nbsp;occurrences)</PRE>
+<DL>
+<DD>Removes a number of occurrences of the specified element from this
+ multiset. If the multiset contains fewer than this number of occurrences to
+ begin with, all occurrences will be removed. Note that if
+ <code>occurrences == 1</code>, this is functionally equivalent to the call
+ <code>remove(element)</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally remove occurrences of<DD><CODE>occurrences</CODE> - the number of occurrences of the element to remove. May
+ be zero, in which case no change will be made.
+<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>occurrences</code> is negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setCount(java.lang.Object,int)"><!-- --></A><A NAME="setCount(E, int)"><!-- --></A><H3>
+setCount</H3>
+<PRE>
+int <B>setCount</B>(<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&nbsp;element,
+ int&nbsp;count)</PRE>
+<DL>
+<DD>Adds or removes the necessary occurrences of an element such that the
+ element attains the desired count.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add or remove occurrences of; may be null
+ only if explicitly allowed by the implementation<DD><CODE>count</CODE> - the desired count of the element in this multiset
+<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>count</code> is negative
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>element</code> is null and this
+ implementation does not permit null elements. Note that if <code>count</code> is zero, the implementor may optionally return zero instead.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setCount(java.lang.Object,int,int)"><!-- --></A><A NAME="setCount(E, int, int)"><!-- --></A><H3>
+setCount</H3>
+<PRE>
+boolean <B>setCount</B>(<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&nbsp;element,
+ int&nbsp;oldCount,
+ int&nbsp;newCount)</PRE>
+<DL>
+<DD>Conditionally sets the count of an element to a new value, as described in
+ <A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)"><CODE>setCount(Object, int)</CODE></A>, provided that the element has the expected
+ current count. If the current count is not <code>oldCount</code>, no change is
+ made.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally set the count of; may be null
+ only if explicitly allowed by the implementation<DD><CODE>oldCount</CODE> - the expected present count of the element in this multiset<DD><CODE>newCount</CODE> - the desired count of the element in this multiset
+<DT><B>Returns:</B><DD><code>true</code> if the condition for modification was met. This
+ implies that the multiset was indeed modified, unless
+ <code>oldCount == newCount</code>.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>oldCount</code> or <code>newCount</code> is
+ negative
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>element</code> is null and the
+ implementation does not permit null elements. Note that if <code>oldCount</code> and <code>newCount</code> are both zero, the implementor may
+ optionally return <code>true</code> instead.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="elementSet()"><!-- --></A><H3>
+elementSet</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt; <B>elementSet</B>()</PRE>
+<DL>
+<DD>Returns the set of distinct elements contained in this multiset. The
+ element set is backed by the same data as the multiset, so any change to
+ either is immediately reflected in the other. The order of the elements in
+ the element set is unspecified.
+
+ <p>If the element set supports any removal operations, these necessarily
+ cause <b>all</b> occurrences of the removed element(s) to be removed from
+ the multiset. Implementations are not expected to support the add
+ operations, although this is possible.
+
+ <p>A common use for the element set is to find the number of distinct
+ elements in the multiset: <code>elementSet().size()</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a view of the set of distinct elements in this multiset</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entrySet()"><!-- --></A><H3>
+entrySet</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;&gt; <B>entrySet</B>()</PRE>
+<DL>
+<DD>Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
+ the count of that element. This set contains exactly one entry for each
+ distinct element in the multiset (thus it always has the same size as the
+ <A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()"><CODE>elementSet()</CODE></A>). The order of the elements in the element set is
+ unspecified.
+
+ <p>The entry set is backed by the same data as the multiset, so any change
+ to either is immediately reflected in the other. However, multiset changes
+ may or may not be reflected in any <code>Entry</code> instances already
+ retrieved from the entry set (this is implementation-dependent).
+ Furthermore, implementations are not required to support modifications to
+ the entry set at all, and the <code>Entry</code> instances themselves don't
+ even have methods for modification. See the specific implementation class
+ for more details on how its entry set handles modifications.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a set of entries representing the data of this multiset</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD>Compares the specified object with this multiset for equality. Returns
+ <code>true</code> if the given object is also a multiset and contains equal
+ elements with equal counts, regardless of order.
+
+ TODO: caveats about equivalence-relation.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+int <B>hashCode</B>()</PRE>
+<DL>
+<DD>Returns the hash code for this multiset. This is defined as the sum of
+
+ <pre> (element == null ? 0 : element.hashCode()) ^ count(element)</pre>
+
+ over all distinct elements in the multiset. It follows that a multiset and
+ its entry set always have the same hash code.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Returns a string representation of the object. In general, the
+ <code>toString</code> method returns a string that
+ "textually represents" this object. The result should
+ be a concise but informative representation that is easy for a
+ person to read.
+ It is recommended that all subclasses override this method.
+ <p>
+ The <code>toString</code> method for class <code>Object</code>
+ returns a string consisting of the name of the class of which the
+ object is an instance, the at-sign character `<code>@</code>', and
+ the unsigned hexadecimal representation of the hash code of the
+ object. In other words, this method returns a string equal to the
+ value of:
+ <blockquote>
+ <pre>
+ getClass().getName() + '@' + Integer.toHexString(hashCode())
+ </pre></blockquote>
+
+ <p>It is recommended, though not mandatory, that this method return the
+ result of invoking <A HREF="../../../../com/google/common/collect/Multiset.html#toString()"><CODE>toString()</CODE></A> on the <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>entrySet()</CODE></A>, yielding a
+ result such as
+ <pre>
+ [a x 3, c, d x 2, e]
+ </pre>
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a string representation of the object.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="iterator()"><!-- --></A><H3>
+iterator</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt; <B>iterator</B>()</PRE>
+<DL>
+<DD>Returns an iterator over the elements in this collection. There are no
+ guarantees concerning the order in which the elements are returned
+ (unless this collection is an instance of some class that provides a
+ guarantee).
+
+ <p>Elements that occur multiple times in the multiset will appear
+ multiple times in this iterator, though not necessarily sequentially.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true#iterator()" title="class or interface in java.lang">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>an <tt>Iterator</tt> over the elements in this collection</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="contains(java.lang.Object)"><!-- --></A><H3>
+contains</H3>
+<PRE>
+boolean <B>contains</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD>Determines whether this multiset contains the specified element.
+
+ <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.contains(java.lang.Object)</CODE></A> to further specify that
+ it <b>may not</b> throw an exception in response to <code>element</code> being
+ null or of the wrong type.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to check for
+<DT><B>Returns:</B><DD><code>true</code> if this multiset contains at least one occurrence of
+ the element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsAll(java.util.Collection)"><!-- --></A><H3>
+containsAll</H3>
+<PRE>
+boolean <B>containsAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Returns <code>true</code> if this multiset contains at least one occurrence of
+ each element in the specified collection.
+
+ <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util"><CODE>Collection.containsAll(java.util.Collection<?>)</CODE></A> to further specify
+ that it <b>may not</b> throw an exception in response to any of <code>elements</code> being null or of the wrong type.
+
+ <p><b>Note:</b> this method does not take into account the occurrence
+ count of an element in the two collections; it may still return <code>true</code> even if <code>elements</code> contains several occurrences of an element
+ and this multiset contains only one. This is no different than any other
+ collection type like <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>, but it may be unexpected to the user of
+ a multiset.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the collection of elements to be checked for containment in
+ this multiset
+<DT><B>Returns:</B><DD><code>true</code> if this multiset contains at least one occurrence of
+ each element contained in <code>elements</code>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>elements</code> is null<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.contains(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="add(java.lang.Object)"><!-- --></A><A NAME="add(E)"><!-- --></A><H3>
+add</H3>
+<PRE>
+boolean <B>add</B>(<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&nbsp;element)</PRE>
+<DL>
+<DD>Adds a single occurrence of the specified element to this multiset.
+
+ <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#add(E)" title="class or interface in java.util"><CODE>Collection.add(E)</CODE></A>, which only <i>ensures</i>
+ the presence of the element, to further specify that a successful call must
+ always increment the count of the element, and the overall size of the
+ collection, by one.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add one occurrence of; may be null only if
+ explicitly allowed by the implementation
+<DT><B>Returns:</B><DD><code>true</code> always, since this call is required to modify the
+ multiset, unlike other <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> types
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>element</code> is null and this
+ implementation does not permit null elements
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Integer.MAX_VALUE</CODE></A> occurrences
+ of <code>element</code> are already contained in this multiset</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+boolean <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD>Removes a <i>single</i> occurrence of the specified element from this
+ multiset, if present.
+
+ <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.remove(java.lang.Object)</CODE></A> to further specify that it
+ <b>may not</b> throw an exception in response to <code>element</code> being null
+ or of the wrong type.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to remove one occurrence of
+<DT><B>Returns:</B><DD><code>true</code> if an occurrence was found and removed</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="removeAll(java.util.Collection)"><!-- --></A><H3>
+removeAll</H3>
+<PRE>
+boolean <B>removeAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;c)</PRE>
+<DL>
+<DD>Removes all of this collection's elements that are also contained in the
+ specified collection (optional operation). After this call returns,
+ this collection will contain no elements in common with the specified
+ collection.
+
+ <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util"><CODE>Collection.removeAll(java.util.Collection<?>)</CODE></A> to further specify that
+ it <b>may not</b> throw an exception in response to any of <code>elements</code>
+ being null or of the wrong type.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>c</CODE> - collection containing elements to be removed from this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the
+ call<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.remove(Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.contains(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="retainAll(java.util.Collection)"><!-- --></A><H3>
+retainAll</H3>
+<PRE>
+boolean <B>retainAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;c)</PRE>
+<DL>
+<DD>Retains only the elements in this collection that are contained in the
+ specified collection (optional operation). In other words, removes from
+ this collection all of its elements that are not contained in the
+ specified collection.
+
+ <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util"><CODE>Collection.retainAll(java.util.Collection<?>)</CODE></A> to further specify that
+ it <b>may not</b> throw an exception in response to any of <code>elements</code>
+ being null or of the wrong type.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>c</CODE> - collection containing elements to be retained in this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the call<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.remove(Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.contains(Object)</CODE></A></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Multiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/Multimaps.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/Multiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Multiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/Multisets.html b/javadoc/com/google/common/collect/Multisets.html
new file mode 100644
index 0000000..b2d2230
--- /dev/null
+++ b/javadoc/com/google/common/collect/Multisets.html
@@ -0,0 +1,277 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Multisets (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Multisets (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Multisets.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/Multisets.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Multisets.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class Multisets</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.Multisets</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public final class <B>Multisets</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+Provides static utility methods for creating and working with <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><CODE>Multiset</CODE></A> instances.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion, Mike Bostock</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multisets.html#immutableEntry(E, int)">immutableEntry</A></B>(E&nbsp;e,
+ int&nbsp;n)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multiset entry with the specified element and count.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multisets.html#unmodifiableMultiset(com.google.common.collect.Multiset)">unmodifiableMultiset</A></B>(<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;? extends E&gt;&nbsp;multiset)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified multiset.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="unmodifiableMultiset(com.google.common.collect.Multiset)"><!-- --></A><H3>
+unmodifiableMultiset</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt; <B>unmodifiableMultiset</B>(<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;? extends E&gt;&nbsp;multiset)</PRE>
+<DL>
+<DD>Returns an unmodifiable view of the specified multiset. Query operations on
+ the returned multiset "read through" to the specified multiset, and
+ attempts to modify the returned multiset result in an
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang"><CODE>UnsupportedOperationException</CODE></A>.
+
+ <p>The returned multiset will be serializable if the specified multiset is
+ serializable.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>multiset</CODE> - the multiset for which an unmodifiable view is to be
+ generated
+<DT><B>Returns:</B><DD>an unmodifiable view of the multiset</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="immutableEntry(java.lang.Object,int)"><!-- --></A><A NAME="immutableEntry(E, int)"><!-- --></A><H3>
+immutableEntry</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;E&gt; <B>immutableEntry</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ E&nbsp;e,
+ int&nbsp;n)</PRE>
+<DL>
+<DD>Returns an immutable multiset entry with the specified element and count.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>e</CODE> - the element to be associated with the returned entry<DD><CODE>n</CODE> - the count to be associated with the returned entry
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>n</code> is negative</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Multisets.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/Multisets.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Multisets.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/MutableClassToInstanceMap.html b/javadoc/com/google/common/collect/MutableClassToInstanceMap.html
new file mode 100644
index 0000000..da5238f
--- /dev/null
+++ b/javadoc/com/google/common/collect/MutableClassToInstanceMap.html
@@ -0,0 +1,535 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+MutableClassToInstanceMap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="MutableClassToInstanceMap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/MutableClassToInstanceMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/Multisets.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/MutableClassToInstanceMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MutableClassToInstanceMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class MutableClassToInstanceMap&lt;B&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingMap</A>&lt;K,V&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.MutableClassToInstanceMap&lt;B&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>&lt;B&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends B&gt;,B&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public final class <B>MutableClassToInstanceMap&lt;B&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;<DT>implements <A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>&lt;B&gt;</DL>
+</PRE>
+
+<P>
+A mutable class-to-instance map backed by an arbitrary user-provided map.
+ See also <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect"><CODE>ImmutableClassToInstanceMap</CODE></A>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion</DD>
+</DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">V</A>&gt;</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;B&gt; <A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A>&lt;B&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html#create()">create</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new <code>MutableClassToInstanceMap</code> instance backed by a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> using the default initial capacity and load factor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;B&gt; <A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A>&lt;B&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html#create(java.util.Map)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends B&gt;,B&gt;&nbsp;backingMap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new <code>MutableClassToInstanceMap</code> instance backed by a given
+ empty <code>backingMap</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html#delegate()">delegate</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html#entrySet()">entrySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> view of the mappings contained in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T extends <A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="type parameter in MutableClassToInstanceMap">B</A>&gt;
+<BR>
+T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html#getInstance(java.lang.Class)">getInstance</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value the specified class is mapped to, or <code>null</code> if no
+ entry for this class is present.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;V</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html#put(K, V)">put</A></B>(K&nbsp;key,
+ V&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates the specified value with the specified key in this map
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all of the mappings from the specified map to this map
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T extends <A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="type parameter in MutableClassToInstanceMap">B</A>&gt;
+<BR>
+T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html#putInstance(java.lang.Class, T)">putInstance</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type,
+ T&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maps the specified class to the specified value.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingMap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#get(java.lang.Object)">get</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#values()">values</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">put</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="create()"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;B&gt; <A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A>&lt;B&gt; <B>create</B>()</PRE>
+<DL>
+<DD>Returns a new <code>MutableClassToInstanceMap</code> instance backed by a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> using the default initial capacity and load factor.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="create(java.util.Map)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;B&gt; <A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A>&lt;B&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends B&gt;,B&gt;&nbsp;backingMap)</PRE>
+<DL>
+<DD>Returns a new <code>MutableClassToInstanceMap</code> instance backed by a given
+ empty <code>backingMap</code>. The caller surrenders control of the backing map,
+ and thus should not allow any direct references to it to remain accessible.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putInstance(java.lang.Class,java.lang.Object)"><!-- --></A><A NAME="putInstance(java.lang.Class, T)"><!-- --></A><H3>
+putInstance</H3>
+<PRE>
+public &lt;T extends <A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="type parameter in MutableClassToInstanceMap">B</A>&gt; T <B>putInstance</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type,
+ T&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html#putInstance(java.lang.Class, T)">ClassToInstanceMap</A></CODE></B></DD>
+<DD>Maps the specified class to the specified value. Does <i>not</i> associate
+ this value with any of the class's supertypes.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html#putInstance(java.lang.Class, T)">putInstance</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>&lt;<A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="type parameter in MutableClassToInstanceMap">B</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the value previously associated with this class (possibly <code>null</code>), or <code>null</code> if there was no previous entry.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getInstance(java.lang.Class)"><!-- --></A><H3>
+getInstance</H3>
+<PRE>
+public &lt;T extends <A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="type parameter in MutableClassToInstanceMap">B</A>&gt; T <B>getInstance</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html#getInstance(java.lang.Class)">ClassToInstanceMap</A></CODE></B></DD>
+<DD>Returns the value the specified class is mapped to, or <code>null</code> if no
+ entry for this class is present. This will only return a value that was
+ bound to this specific class, not a value that may have been bound to a
+ subtype.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html#getInstance(java.lang.Class)">getInstance</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>&lt;<A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="type parameter in MutableClassToInstanceMap">B</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="delegate()"><!-- --></A><H3>
+delegate</H3>
+<PRE>
+protected <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt; <B>delegate</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
+<DD>Returns the backing delegate instance that methods are forwarded to.
+ Abstract subclasses generally override this method with an abstract method
+ that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
+ the instance being decorated.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entrySet()"><!-- --></A><H3>
+entrySet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt; <B>entrySet</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> view of the mappings contained in this map.
+ The set is backed by the map, so changes to the map are
+ reflected in the set, and vice-versa. If the map is modified
+ while an iteration over the set is in progress (except through
+ the iterator's own <tt>remove</tt> operation, or through the
+ <tt>setValue</tt> operation on a map entry returned by the
+ iterator) the results of the iteration are undefined. The set
+ supports element removal, which removes the corresponding
+ mapping from the map, via the <tt>Iterator.remove</tt>,
+ <tt>Set.remove</tt>, <tt>removeAll</tt>, <tt>retainAll</tt> and
+ <tt>clear</tt> operations. It does not support the
+ <tt>add</tt> or <tt>addAll</tt> operations.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#entrySet()">entrySet</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a set view of the mappings contained in this map</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
+put</H3>
+<PRE>
+public V <B>put</B>(K&nbsp;key,
+ V&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Associates the specified value with the specified key in this map
+ (optional operation). If the map previously contained a mapping for
+ the key, the old value is replaced by the specified value. (A map
+ <tt>m</tt> is said to contain a mapping for a key <tt>k</tt> if and only
+ if <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util"><CODE>m.containsKey(k)</CODE></A> would return
+ <tt>true</tt>.)
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">put</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#put(K, V)">put</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key with which the specified value is to be associated<DD><CODE>value</CODE> - value to be associated with the specified key
+<DT><B>Returns:</B><DD>the previous value associated with <tt>key</tt>, or
+ <tt>null</tt> if there was no mapping for <tt>key</tt>.
+ (A <tt>null</tt> return can also indicate that the map
+ previously associated <tt>null</tt> with <tt>key</tt>,
+ if the implementation supports <tt>null</tt> values.)</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(java.util.Map)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public void <B>putAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">java.util.Map</A></CODE></B></DD>
+<DD>Copies all of the mappings from the specified map to this map
+ (optional operation). The effect of this call is equivalent to that
+ of calling <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util"><CODE>put(k, v)</CODE></A> on this map once
+ for each mapping from key <tt>k</tt> to value <tt>v</tt> in the
+ specified map. The behavior of this operation is undefined if the
+ specified map is modified while the operation is in progress.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#putAll(java.util.Map)">putAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>map</CODE> - mappings to be stored in this map</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/MutableClassToInstanceMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/Multisets.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/MutableClassToInstanceMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MutableClassToInstanceMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/ObjectArrays.html b/javadoc/com/google/common/collect/ObjectArrays.html
new file mode 100644
index 0000000..7ade6f3
--- /dev/null
+++ b/javadoc/com/google/common/collect/ObjectArrays.html
@@ -0,0 +1,370 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+ObjectArrays (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ObjectArrays (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ObjectArrays.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ObjectArrays.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ObjectArrays.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class ObjectArrays</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ObjectArrays</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public final class <B>ObjectArrays</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+Static utility methods pertaining to object arrays.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ObjectArrays.html#concat(T[], T)">concat</A></B>(T[]&nbsp;array,
+ T&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new array that appends <code>element</code> to <code>array</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ObjectArrays.html#concat(T[], T[], java.lang.Class)">concat</A></B>(T[]&nbsp;first,
+ T[]&nbsp;second,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new array that contains the concatenated contents of two arrays.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ObjectArrays.html#concat(T, T[])">concat</A></B>(T&nbsp;element,
+ T[]&nbsp;array)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new array that prepends <code>element</code> to <code>array</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ObjectArrays.html#newArray(java.lang.Class, int)">newArray</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type,
+ int&nbsp;length)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new array of the given length with the specified component type.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/ObjectArrays.html#newArray(T[], int)">newArray</A></B>(T[]&nbsp;reference,
+ int&nbsp;length)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new array of the given length with the same type as a reference
+ array.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="newArray(java.lang.Class, int)"><!-- --></A><H3>
+newArray</H3>
+<PRE>
+public static &lt;T&gt; T[] <B>newArray</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type,
+ int&nbsp;length)</PRE>
+<DL>
+<DD>Returns a new array of the given length with the specified component type.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>type</CODE> - the component type<DD><CODE>length</CODE> - the length of the new array</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newArray(java.lang.Object[],int)"><!-- --></A><A NAME="newArray(T[], int)"><!-- --></A><H3>
+newArray</H3>
+<PRE>
+public static &lt;T&gt; T[] <B>newArray</B>(T[]&nbsp;reference,
+ int&nbsp;length)</PRE>
+<DL>
+<DD>Returns a new array of the given length with the same type as a reference
+ array.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>reference</CODE> - any array of the desired type<DD><CODE>length</CODE> - the length of the new array</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="concat(java.lang.Object[],java.lang.Object[],java.lang.Class)"><!-- --></A><A NAME="concat(T[], T[], java.lang.Class)"><!-- --></A><H3>
+concat</H3>
+<PRE>
+public static &lt;T&gt; T[] <B>concat</B>(T[]&nbsp;first,
+ T[]&nbsp;second,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</PRE>
+<DL>
+<DD>Returns a new array that contains the concatenated contents of two arrays.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>first</CODE> - the first array of elements to concatenate<DD><CODE>second</CODE> - the second array of elements to concatenate<DD><CODE>type</CODE> - the component type of the returned array</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="concat(java.lang.Object,java.lang.Object[])"><!-- --></A><A NAME="concat(T, T[])"><!-- --></A><H3>
+concat</H3>
+<PRE>
+public static &lt;T&gt; T[] <B>concat</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ T&nbsp;element,
+ T[]&nbsp;array)</PRE>
+<DL>
+<DD>Returns a new array that prepends <code>element</code> to <code>array</code>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to prepend to the front of <code>array</code><DD><CODE>array</CODE> - the array of elements to append
+<DT><B>Returns:</B><DD>an array whose size is one larger than <code>array</code>, with
+ <code>element</code> occupying the first position, and the
+ elements of <code>array</code> occupying the remaining elements.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="concat(java.lang.Object[],java.lang.Object)"><!-- --></A><A NAME="concat(T[], T)"><!-- --></A><H3>
+concat</H3>
+<PRE>
+public static &lt;T&gt; T[] <B>concat</B>(T[]&nbsp;array,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ T&nbsp;element)</PRE>
+<DL>
+<DD>Returns a new array that appends <code>element</code> to <code>array</code>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>array</CODE> - the array of elements to prepend<DD><CODE>element</CODE> - the element to append to the end
+<DT><B>Returns:</B><DD>an array whose size is one larger than <code>array</code>, with
+ the same contents as <code>array</code>, plus <code>element</code> occupying the
+ last position.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ObjectArrays.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/ObjectArrays.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ObjectArrays.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/Ordering.html b/javadoc/com/google/common/collect/Ordering.html
new file mode 100644
index 0000000..007c3e7
--- /dev/null
+++ b/javadoc/com/google/common/collect/Ordering.html
@@ -0,0 +1,1109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Ordering (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Ordering (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Ordering.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/Ordering.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Ordering.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class Ordering&lt;T&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.Ordering&lt;T&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;T&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>Ordering&lt;T&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;T&gt;</DL>
+</PRE>
+
+<P>
+A comparator with added methods to support common functions. For example:
+ <pre> <code>if (Ordering.from(comparator).reverse().isOrdered(list)) { ... }</code></pre>
+
+ <p>The <A HREF="../../../../com/google/common/collect/Ordering.html#from(java.util.Comparator)"><CODE>from(Comparator)</CODE></A> method returns the equivalent <code>Ordering</code> instance for a pre-existing comparator. You can also skip the
+ comparator step and extend <code>Ordering</code> directly: <pre> <code>Ordering&lt;String&gt; byLengthOrdering = new Ordering&lt;String&gt;() {
+ public int compare(String left, String right) {
+ return Ints.compare(left.length(), right.length());
+ }
+ };</code></pre>
+
+ Except as noted, the orderings returned by the factory methods of this
+ class are serializable if and only if the provided instances that back them
+ are. For example, if <code>ordering</code> and <code>function</code> can themselves be
+ serialized, then <code>ordering.onResultOf(function)</code> can as well.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Jesse Wilson, Kevin Bourrillion</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected </CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#Ordering()">Ordering</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new instance of this class (only invokable by the subclass
+ constructor, typically implicit).</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#binarySearch(java.util.List, T)">binarySearch</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;? extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;&nbsp;sortedList,
+ <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#binarySearch(java.util.List, T, java.util.Comparator)" title="class or interface in java.util"><CODE>Searches</CODE></A>
+ <code>sortedList</code> for <code>key</code> using the binary search algorithm.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;U extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;U&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#compound(java.util.Comparator)">compound</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super U&gt;&nbsp;secondaryComparator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering which first uses the ordering <code>this</code>, but which
+ in the event of a "tie", then delegates to <code>secondaryComparator</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#compound(java.lang.Iterable)">compound</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super T&gt;&gt;&nbsp;comparators)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering which tries each given comparator in order until a
+ non-zero result is found, returning that result, and returning zero only if
+ all comparators return zero.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#explicit(java.util.List)">explicit</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&nbsp;valuesInOrder)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that compares objects according to the order in
+ which they appear in the given list.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#explicit(T, T...)">explicit</A></B>(T&nbsp;leastValue,
+ T...&nbsp;remainingValuesInOrder)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that compares objects according to the order in
+ which they are given to this method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#from(java.util.Comparator)">from</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;T&gt;&nbsp;comparator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering for a pre-existing <code>comparator</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#from(com.google.common.collect.Ordering)">from</A></B>(<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;&nbsp;ordering)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>no need to use this</I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#isOrdered(java.lang.Iterable)">isOrdered</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;&nbsp;iterable)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if each element in <code>iterable</code> after the first is
+ greater than or equal to the element that preceded it, according to this
+ ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#isStrictlyOrdered(java.lang.Iterable)">isStrictlyOrdered</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;&nbsp;iterable)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if each element in <code>iterable</code> after the first is
+ <i>strictly</i> greater than the element that preceded it, according to
+ this ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;
+<BR>
+E</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#max(E, E)">max</A></B>(E&nbsp;a,
+ E&nbsp;b)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the larger of the two values according to this ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;
+<BR>
+E</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#max(E, E, E, E...)">max</A></B>(E&nbsp;a,
+ E&nbsp;b,
+ E&nbsp;c,
+ E...&nbsp;rest)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the largest of the specified values according to this ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;
+<BR>
+E</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#max(java.lang.Iterable)">max</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;iterable)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the largest of the specified values according to this ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;
+<BR>
+E</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#min(E, E)">min</A></B>(E&nbsp;a,
+ E&nbsp;b)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the smaller of the two values according to this ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;
+<BR>
+E</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#min(E, E, E, E...)">min</A></B>(E&nbsp;a,
+ E&nbsp;b,
+ E&nbsp;c,
+ E...&nbsp;rest)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the smallest of the specified values according to this ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;
+<BR>
+E</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#min(java.lang.Iterable)">min</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;iterable)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the smallest of the specified values according to this ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;C extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;C&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#natural()">natural</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a serializable ordering that uses the natural order of the values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;S extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;S&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#nullsFirst()">nullsFirst</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that treats <code>null</code> as less than all other values
+ and uses <code>this</code> to compare non-null values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;S extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;S&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#nullsLast()">nullsLast</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that treats <code>null</code> as greater than all other
+ values and uses this ordering to compare non-null values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;F&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;F&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#onResultOf(com.google.common.base.Function)">onResultOf</A></B>(<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;F,? extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;&nbsp;function)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new ordering on <code>F</code> which orders elements by first applying
+ a function to them, then comparing those results using <code>this</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;S extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;S&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#reverse()">reverse</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the reverse of this ordering; the <code>Ordering</code> equivalent to
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#reverseOrder(java.util.Comparator)" title="class or interface in java.util"><CODE>Collections.reverseOrder(Comparator)</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;
+<BR>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#sortedCopy(java.lang.Iterable)">sortedCopy</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;iterable)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a copy of the given iterable sorted by this ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#usingToString()">usingToString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that compares objects by the natural ordering of their
+ string representations as returned by <code>toString()</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Comparator"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true#compare(T, T)" title="class or interface in java.util">compare</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="Ordering()"><!-- --></A><H3>
+Ordering</H3>
+<PRE>
+protected <B>Ordering</B>()</PRE>
+<DL>
+<DD>Constructs a new instance of this class (only invokable by the subclass
+ constructor, typically implicit).
+<P>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="natural()"><!-- --></A><H3>
+natural</H3>
+<PRE>
+public static &lt;C extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;C&gt; <B>natural</B>()</PRE>
+<DL>
+<DD>Returns a serializable ordering that uses the natural order of the values.
+ The ordering throws a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang"><CODE>NullPointerException</CODE></A> when passed a null
+ parameter.
+
+ <p>The type specification is <code>&lt;C extends Comparable&gt;</code>, instead of
+ the technically correct <code>&lt;C extends Comparable&lt;? super C&gt;&gt;</code>, to
+ support legacy types from before Java 5.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="from(java.util.Comparator)"><!-- --></A><H3>
+from</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt; <B>from</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;T&gt;&nbsp;comparator)</PRE>
+<DL>
+<DD>Returns an ordering for a pre-existing <code>comparator</code>. Note
+ that if the comparator is not pre-existing, and you don't require
+ serialization, you can subclass <code>Ordering</code> and implement its
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true#compare(T, T)" title="class or interface in java.util"><CODE>compare</CODE></A> method instead.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>comparator</CODE> - the comparator that defines the order</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="from(com.google.common.collect.Ordering)"><!-- --></A><H3>
+from</H3>
+<PRE>
+<FONT SIZE="-1"><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</A>
+</FONT>public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt; <B>from</B>(<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;&nbsp;ordering)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>no need to use this</I>
+<P>
+<DD>Simply returns its argument.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="explicit(java.util.List)"><!-- --></A><H3>
+explicit</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt; <B>explicit</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&nbsp;valuesInOrder)</PRE>
+<DL>
+<DD>Returns an ordering that compares objects according to the order in
+ which they appear in the given list. Only objects present in the list
+ (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>) may be compared. This comparator
+ imposes a "partial ordering" over the type <code>T</code>. Subsequent changes
+ to the <code>valuesInOrder</code> list will have no effect on the returned
+ comparator. Null values in the list are not supported.
+
+ <p>The returned comparator throws an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang"><CODE>ClassCastException</CODE></A> when it
+ receives an input parameter that isn't among the provided values.
+
+ <p>The generated comparator is serializable if all the provided values are
+ serializable.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>valuesInOrder</CODE> - the values that the returned comparator will be able
+ to compare, in the order the comparator should induce
+<DT><B>Returns:</B><DD>the comparator described above
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of the provided values is null
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>valuesInOrder</code> contains any
+ duplicate values (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>)</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="explicit(java.lang.Object,java.lang.Object[])"><!-- --></A><A NAME="explicit(T, T...)"><!-- --></A><H3>
+explicit</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt; <B>explicit</B>(T&nbsp;leastValue,
+ T...&nbsp;remainingValuesInOrder)</PRE>
+<DL>
+<DD>Returns an ordering that compares objects according to the order in
+ which they are given to this method. Only objects present in the argument
+ list (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>) may be compared. This comparator
+ imposes a "partial ordering" over the type <code>T</code>. Null values in the
+ argument list are not supported.
+
+ <p>The returned comparator throws a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang"><CODE>ClassCastException</CODE></A> when it
+ receives an input parameter that isn't among the provided values.
+
+ <p>The generated comparator is serializable if all the provided values are
+ serializable.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>leastValue</CODE> - the value which the returned comparator should consider
+ the "least" of all values<DD><CODE>remainingValuesInOrder</CODE> - the rest of the values that the returned
+ comparator will be able to compare, in the order the comparator should
+ follow
+<DT><B>Returns:</B><DD>the comparator described above
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of the provided values is null
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if any duplicate values (according to
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(Object)</CODE></A>) are present among the method arguments</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="usingToString()"><!-- --></A><H3>
+usingToString</H3>
+<PRE>
+public static <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&gt; <B>usingToString</B>()</PRE>
+<DL>
+<DD>Returns an ordering that compares objects by the natural ordering of their
+ string representations as returned by <code>toString()</code>. It does not
+ support null values.
+
+ <p>The comparator is serializable.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="compound(java.lang.Iterable)"><!-- --></A><H3>
+compound</H3>
+<PRE>
+public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt; <B>compound</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super T&gt;&gt;&nbsp;comparators)</PRE>
+<DL>
+<DD>Returns an ordering which tries each given comparator in order until a
+ non-zero result is found, returning that result, and returning zero only if
+ all comparators return zero. The returned ordering is based on the state of
+ the <code>comparators</code> iterable at the time it was provided to this
+ method.
+
+ <p>The returned ordering is equivalent to that produced using <code>Ordering.from(comp1).compound(comp2).compound(comp3) . . .</code>.
+
+ <p><b>Warning:</b> Supplying an argument with undefined iteration order,
+ such as a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html?is-external=true" title="class or interface in java.util"><CODE>HashSet</CODE></A>, will produce non-deterministic results.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>comparators</CODE> - the comparators to try in order</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="compound(java.util.Comparator)"><!-- --></A><H3>
+compound</H3>
+<PRE>
+public &lt;U extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;U&gt; <B>compound</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super U&gt;&nbsp;secondaryComparator)</PRE>
+<DL>
+<DD>Returns an ordering which first uses the ordering <code>this</code>, but which
+ in the event of a "tie", then delegates to <code>secondaryComparator</code>.
+ For example, to sort a bug list first by status and second by priority, you
+ might use <code>byStatus.compound(byPriority)</code>. For a compound ordering
+ with three or more components, simply chain multiple calls to this method.
+
+ <p>An ordering produced by this method, or a chain of calls to this method,
+ is equivalent to one created using <A HREF="../../../../com/google/common/collect/Ordering.html#compound(java.lang.Iterable)"><CODE>compound(Iterable)</CODE></A> on
+ the same component comparators.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="reverse()"><!-- --></A><H3>
+reverse</H3>
+<PRE>
+public &lt;S extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;S&gt; <B>reverse</B>()</PRE>
+<DL>
+<DD>Returns the reverse of this ordering; the <code>Ordering</code> equivalent to
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#reverseOrder(java.util.Comparator)" title="class or interface in java.util"><CODE>Collections.reverseOrder(Comparator)</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="onResultOf(com.google.common.base.Function)"><!-- --></A><H3>
+onResultOf</H3>
+<PRE>
+public &lt;F&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;F&gt; <B>onResultOf</B>(<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;F,? extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;&nbsp;function)</PRE>
+<DL>
+<DD>Returns a new ordering on <code>F</code> which orders elements by first applying
+ a function to them, then comparing those results using <code>this</code>. For
+ example, to compare objects by their string forms, in a case-insensitive
+ manner, use: <pre> <code>Ordering.from(String.CASE_INSENSITIVE_ORDER)
+ .onResultOf(Functions.toStringFunction())</code></pre>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="nullsFirst()"><!-- --></A><H3>
+nullsFirst</H3>
+<PRE>
+public &lt;S extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;S&gt; <B>nullsFirst</B>()</PRE>
+<DL>
+<DD>Returns an ordering that treats <code>null</code> as less than all other values
+ and uses <code>this</code> to compare non-null values.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="nullsLast()"><!-- --></A><H3>
+nullsLast</H3>
+<PRE>
+public &lt;S extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;S&gt; <B>nullsLast</B>()</PRE>
+<DL>
+<DD>Returns an ordering that treats <code>null</code> as greater than all other
+ values and uses this ordering to compare non-null values.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="binarySearch(java.util.List,java.lang.Object)"><!-- --></A><A NAME="binarySearch(java.util.List, T)"><!-- --></A><H3>
+binarySearch</H3>
+<PRE>
+public int <B>binarySearch</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;? extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;&nbsp;sortedList,
+ <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&nbsp;key)</PRE>
+<DL>
+<DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#binarySearch(java.util.List, T, java.util.Comparator)" title="class or interface in java.util"><CODE>Searches</CODE></A>
+ <code>sortedList</code> for <code>key</code> using the binary search algorithm. The
+ list must be sorted using this ordering.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>sortedList</CODE> - the list to be searched<DD><CODE>key</CODE> - the key to be searched for</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="sortedCopy(java.lang.Iterable)"><!-- --></A><H3>
+sortedCopy</H3>
+<PRE>
+public &lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt; <B>sortedCopy</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;iterable)</PRE>
+<DL>
+<DD>Returns a copy of the given iterable sorted by this ordering. The input is
+ not modified. The returned list is modifiable, serializable, and has random
+ access.
+
+ <p>Unlike <A HREF="../../../../com/google/common/collect/Sets.html#newTreeSet(java.lang.Iterable)"><CODE>Sets.newTreeSet(Iterable)</CODE></A>, this method does not collapse
+ elements that compare as zero, and the resulting collection does not
+ maintain its own sort order.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>iterable</CODE> - the elements to be copied and sorted
+<DT><B>Returns:</B><DD>a new list containing the given elements in sorted order</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isOrdered(java.lang.Iterable)"><!-- --></A><H3>
+isOrdered</H3>
+<PRE>
+public boolean <B>isOrdered</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;&nbsp;iterable)</PRE>
+<DL>
+<DD>Returns <code>true</code> if each element in <code>iterable</code> after the first is
+ greater than or equal to the element that preceded it, according to this
+ ordering. Note that this is always true when the iterable has fewer than
+ two elements.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isStrictlyOrdered(java.lang.Iterable)"><!-- --></A><H3>
+isStrictlyOrdered</H3>
+<PRE>
+public boolean <B>isStrictlyOrdered</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;&nbsp;iterable)</PRE>
+<DL>
+<DD>Returns <code>true</code> if each element in <code>iterable</code> after the first is
+ <i>strictly</i> greater than the element that preceded it, according to
+ this ordering. Note that this is always true when the iterable has fewer
+ than two elements.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="max(java.lang.Iterable)"><!-- --></A><H3>
+max</H3>
+<PRE>
+public &lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; E <B>max</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;iterable)</PRE>
+<DL>
+<DD>Returns the largest of the specified values according to this ordering. If
+ there are multiple largest values, the first of those is returned.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>iterable</CODE> - the iterable whose maximum element is to be determined
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/NoSuchElementException.html?is-external=true" title="class or interface in java.util">NoSuchElementException</A></CODE> - if <code>iterable</code> is empty
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang">ClassCastException</A></CODE> - if the parameters are not <i>mutually
+ comparable</i> under this ordering.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="max(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object[])"><!-- --></A><A NAME="max(E, E, E, E...)"><!-- --></A><H3>
+max</H3>
+<PRE>
+public &lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; E <B>max</B>(E&nbsp;a,
+ E&nbsp;b,
+ E&nbsp;c,
+ E...&nbsp;rest)</PRE>
+<DL>
+<DD>Returns the largest of the specified values according to this ordering. If
+ there are multiple largest values, the first of those is returned.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>a</CODE> - value to compare, returned if greater than or equal to the rest.<DD><CODE>b</CODE> - value to compare<DD><CODE>c</CODE> - value to compare<DD><CODE>rest</CODE> - values to compare
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang">ClassCastException</A></CODE> - if the parameters are not <i>mutually
+ comparable</i> under this ordering.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="max(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="max(E, E)"><!-- --></A><H3>
+max</H3>
+<PRE>
+public &lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; E <B>max</B>(E&nbsp;a,
+ E&nbsp;b)</PRE>
+<DL>
+<DD>Returns the larger of the two values according to this ordering. If the
+ values compare as 0, the first is returned.
+
+ <p><b>Implementation note:</b> this method is invoked by the default
+ implementations of the other <code>max</code> overloads, so overriding it will
+ affect their behavior.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>a</CODE> - value to compare, returned if greater than or equal to b.<DD><CODE>b</CODE> - value to compare.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang">ClassCastException</A></CODE> - if the parameters are not <i>mutually
+ comparable</i> under this ordering.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="min(java.lang.Iterable)"><!-- --></A><H3>
+min</H3>
+<PRE>
+public &lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; E <B>min</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;iterable)</PRE>
+<DL>
+<DD>Returns the smallest of the specified values according to this ordering. If
+ there are multiple smallest values, the first of those is returned.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>iterable</CODE> - the iterable whose minimum element is to be determined
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/NoSuchElementException.html?is-external=true" title="class or interface in java.util">NoSuchElementException</A></CODE> - if <code>iterable</code> is empty
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang">ClassCastException</A></CODE> - if the parameters are not <i>mutually
+ comparable</i> under this ordering.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="min(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object[])"><!-- --></A><A NAME="min(E, E, E, E...)"><!-- --></A><H3>
+min</H3>
+<PRE>
+public &lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; E <B>min</B>(E&nbsp;a,
+ E&nbsp;b,
+ E&nbsp;c,
+ E...&nbsp;rest)</PRE>
+<DL>
+<DD>Returns the smallest of the specified values according to this ordering. If
+ there are multiple smallest values, the first of those is returned.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>a</CODE> - value to compare, returned if less than or equal to the rest.<DD><CODE>b</CODE> - value to compare<DD><CODE>c</CODE> - value to compare<DD><CODE>rest</CODE> - values to compare
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang">ClassCastException</A></CODE> - if the parameters are not <i>mutually
+ comparable</i> under this ordering.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="min(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="min(E, E)"><!-- --></A><H3>
+min</H3>
+<PRE>
+public &lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; E <B>min</B>(E&nbsp;a,
+ E&nbsp;b)</PRE>
+<DL>
+<DD>Returns the smaller of the two values according to this ordering. If the
+ values compare as 0, the first is returned.
+
+ <p><b>Implementation note:</b> this method is invoked by the default
+ implementations of the other <code>min</code> overloads, so overriding it will
+ affect their behavior.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>a</CODE> - value to compare, returned if less than or equal to b.<DD><CODE>b</CODE> - value to compare.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang">ClassCastException</A></CODE> - if the parameters are not <i>mutually
+ comparable</i> under this ordering.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Ordering.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/Ordering.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Ordering.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/PeekingIterator.html b/javadoc/com/google/common/collect/PeekingIterator.html
new file mode 100644
index 0000000..5151a57
--- /dev/null
+++ b/javadoc/com/google/common/collect/PeekingIterator.html
@@ -0,0 +1,301 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+PeekingIterator (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="PeekingIterator (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/PeekingIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/PeekingIterator.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="PeekingIterator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Interface PeekingIterator&lt;E&gt;</H2>
+<DL>
+<DT><B>All Superinterfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public interface <B>PeekingIterator&lt;E&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;</DL>
+</PRE>
+
+<P>
+An iterator that supports a one-element lookahead while iterating.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Mick Killianey</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="type parameter in PeekingIterator">E</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/PeekingIterator.html#next()">next</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next element in the iteration.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="type parameter in PeekingIterator">E</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/PeekingIterator.html#peek()">peek</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next element in the iteration, without advancing the iteration.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/PeekingIterator.html#remove()">remove</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes from the underlying collection the last element returned
+ by this iterator (optional operation).</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Iterator"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#hasNext()" title="class or interface in java.util">hasNext</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="peek()"><!-- --></A><H3>
+peek</H3>
+<PRE>
+<A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="type parameter in PeekingIterator">E</A> <B>peek</B>()</PRE>
+<DL>
+<DD>Returns the next element in the iteration, without advancing the iteration.
+
+ <p>Calls to <code>peek()</code> should not change the state of the iteration,
+ except that it <i>may</i> prevent removal of the most recent element via
+ <A HREF="../../../../com/google/common/collect/PeekingIterator.html#remove()"><CODE>remove()</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/NoSuchElementException.html?is-external=true" title="class or interface in java.util">NoSuchElementException</A></CODE> - if the iteration has no more elements
+ according to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#hasNext()" title="class or interface in java.util"><CODE>Iterator.hasNext()</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="next()"><!-- --></A><H3>
+next</H3>
+<PRE>
+<A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="type parameter in PeekingIterator">E</A> <B>next</B>()</PRE>
+<DL>
+<DD>Returns the next element in the iteration.
+
+ <p>The objects returned by consecutive calls to <A HREF="../../../../com/google/common/collect/PeekingIterator.html#peek()"><CODE>peek()</CODE></A> then <A HREF="../../../../com/google/common/collect/PeekingIterator.html#next()"><CODE>next()</CODE></A> are guaranteed to be equal to each other.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#next()" title="class or interface in java.util">next</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;<A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="type parameter in PeekingIterator">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the next element in the iteration</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove()"><!-- --></A><H3>
+remove</H3>
+<PRE>
+void <B>remove</B>()</PRE>
+<DL>
+<DD>Removes from the underlying collection the last element returned
+ by this iterator (optional operation). This method can be called
+ only once per call to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#next()" title="class or interface in java.util"><CODE>Iterator.next()</CODE></A>. The behavior of an iterator
+ is unspecified if the underlying collection is modified while the
+ iteration is in progress in any way other than by calling this
+ method.
+
+ <p>Implementations may or may not support removal when a call to <A HREF="../../../../com/google/common/collect/PeekingIterator.html#peek()"><CODE>peek()</CODE></A> has occurred since the most recent call to <A HREF="../../../../com/google/common/collect/PeekingIterator.html#next()"><CODE>next()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#remove()" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;<A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="type parameter in PeekingIterator">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</A></CODE> - if there has been a call to <A HREF="../../../../com/google/common/collect/PeekingIterator.html#peek()"><CODE>peek()</CODE></A>
+ since the most recent call to <A HREF="../../../../com/google/common/collect/PeekingIterator.html#next()"><CODE>next()</CODE></A> and this implementation
+ does not support this sequence of calls (optional)</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/PeekingIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/PeekingIterator.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="PeekingIterator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/SetMultimap.html b/javadoc/com/google/common/collect/SetMultimap.html
new file mode 100644
index 0000000..4311209
--- /dev/null
+++ b/javadoc/com/google/common/collect/SetMultimap.html
@@ -0,0 +1,422 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+SetMultimap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="SetMultimap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/SetMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/Sets.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/SetMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SetMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Interface SetMultimap&lt;K,V&gt;</H2>
+<DL>
+<DT><B>All Superinterfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</DD>
+</DL>
+<DL>
+<DT><B>All Known Subinterfaces:</B> <DD><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</DD>
+</DL>
+<DL>
+<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>, <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>, <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>, <A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public interface <B>SetMultimap&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</DL>
+</PRE>
+
+<P>
+A <code>Multimap</code> that cannot hold duplicate key-value pairs. Adding a
+ key-value pair that's already in the multimap has no effect.
+
+ <p>The <A HREF="../../../../com/google/common/collect/SetMultimap.html#get(K)"><CODE>get(K)</CODE></A>, <A HREF="../../../../com/google/common/collect/SetMultimap.html#removeAll(java.lang.Object)"><CODE>removeAll(java.lang.Object)</CODE></A>, and <A HREF="../../../../com/google/common/collect/SetMultimap.html#replaceValues(K, java.lang.Iterable)"><CODE>replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> methods
+ each return a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> of values, while <A HREF="../../../../com/google/common/collect/SetMultimap.html#entries()"><CODE>entries()</CODE></A> returns a <code>Set</code> of map entries. Though the method signature doesn't say so explicitly,
+ the map returned by <A HREF="../../../../com/google/common/collect/SetMultimap.html#asMap()"><CODE>asMap()</CODE></A> has <code>Set</code> values.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Jared Levy</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/SetMultimap.html#asMap()">asMap</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map view that associates each key with the corresponding values
+ in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/SetMultimap.html#entries()">entries</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all key-value pairs.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/SetMultimap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;obj)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object to this multimap for equality.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/SetMultimap.html#get(K)">get</A></B>(<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection view of all values associated with a key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/SetMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all values associated with a given key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/SetMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key, replacing any existing
+ values for that key.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.Multimap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="get(java.lang.Object)"><!-- --></A><A NAME="get(K)"><!-- --></A><H3>
+get</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt; <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>&nbsp;key)</PRE>
+<DL>
+<DD>Returns a collection view of all values associated with a key. If no
+ mappings in the multimap have the provided key, an empty collection is
+ returned.
+
+ <p>Changes to the returned collection will update the underlying multimap,
+ and vice versa.
+
+ <p>Because a <code>SetMultimap</code> has unique values for a given key, this
+ method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>, instead of the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A>
+ specified in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap
+<DT><B>Returns:</B><DD>the collection of values that the key maps to</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
+removeAll</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt; <B>removeAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD>Removes all values associated with a given key.
+
+ <p>Because a <code>SetMultimap</code> has unique values for a given key, this
+ method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>, instead of the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A>
+ specified in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entries to remove from the multimap
+<DT><B>Returns:</B><DD>the collection of removed values, or an empty collection if no
+ values were associated with the provided key. The collection
+ <i>may</i> be modifiable, but updating it will have no effect on the
+ multimap.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="replaceValues(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="replaceValues(K, java.lang.Iterable)"><!-- --></A><H3>
+replaceValues</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt; <B>replaceValues</B>(<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;&nbsp;values)</PRE>
+<DL>
+<DD>Stores a collection of values with the same key, replacing any existing
+ values for that key.
+
+ <p>Because a <code>SetMultimap</code> has unique values for a given key, this
+ method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>, instead of the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A>
+ specified in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
+
+ <p>Any duplicates in <code>values</code> will be stored in the multimap once.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
+<DT><B>Returns:</B><DD>the collection of replaced values, or an empty collection if no
+ values were previously associated with the key. The collection
+ <i>may</i> be modifiable, but updating it will have no effect on the
+ multimap.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entries()"><!-- --></A><H3>
+entries</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;&gt; <B>entries</B>()</PRE>
+<DL>
+<DD>Returns a collection of all key-value pairs. Changes to the returned
+ collection will update the underlying multimap, and vice versa. The entries
+ collection does not support the <code>add</code> or <code>addAll</code> operations.
+
+ <p>Because a <code>SetMultimap</code> has unique values for a given key, this
+ method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>, instead of the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A>
+ specified in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#entries()">entries</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>collection of map entries consisting of key-value pairs</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="asMap()"><!-- --></A><H3>
+asMap</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;&gt; <B>asMap</B>()</PRE>
+<DL>
+<DD>Returns a map view that associates each key with the corresponding values
+ in the multimap. Changes to the returned map, such as element removal,
+ will update the underlying multimap. The map does not support
+ <code>setValue()</code> on its entries, <code>put</code>, or <code>putAll</code>.
+
+ <p>The collections returned by <code>asMap().get(Object)</code> have the same
+ behavior as those returned by <A HREF="../../../../com/google/common/collect/Multimap.html#get(K)"><CODE>Multimap.get(K)</CODE></A>.
+
+ <p>Though the method signature doesn't say so explicitly, the returned map
+ has <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> values.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a map view from a key to its collection of values</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;obj)</PRE>
+<DL>
+<DD>Compares the specified object to this multimap for equality.
+
+ <p>Two <code>SetMultimap</code> instances are equal if, for each key, they
+ contain the same values. Equality does not depend on the ordering of keys
+ or values.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>obj</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/SetMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/Sets.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/SetMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SetMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/Sets.SetView.html b/javadoc/com/google/common/collect/Sets.SetView.html
new file mode 100644
index 0000000..a8dca19
--- /dev/null
+++ b/javadoc/com/google/common/collect/Sets.SetView.html
@@ -0,0 +1,302 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Sets.SetView (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Sets.SetView (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Sets.SetView.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/Sets.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/Sets.SetView.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Sets.SetView.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class Sets.SetView&lt;E&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">java.util.AbstractCollection</A>&lt;E&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractSet.html?is-external=true" title="class or interface in java.util">java.util.AbstractSet</A>&lt;E&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.Sets.SetView&lt;E&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;</DD>
+</DL>
+<DL>
+<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract static class <B>Sets.SetView&lt;E&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractSet.html?is-external=true" title="class or interface in java.util">AbstractSet</A>&lt;E&gt;</DL>
+</PRE>
+
+<P>
+An unmodifiable view of a set which may be backed by other sets; this view
+ will change as the backing sets do. Contains methods to copy the data into
+ a new set which will then remain stable. There is usually no reason to
+ retain a reference of type <code>SetView</code>; typically, you either use it
+ as a plain <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>, or immediately invoke <A HREF="../../../../com/google/common/collect/Sets.SetView.html#immutableCopy()"><CODE>immutableCopy()</CODE></A> or
+ <A HREF="../../../../com/google/common/collect/Sets.SetView.html#copyInto(S)"><CODE>copyInto(S)</CODE></A> and forget the <code>SetView</code> itself.
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;S extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="type parameter in Sets.SetView">E</A>&gt;&gt;
+<BR>
+S</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.SetView.html#copyInto(S)">copyInto</A></B>(S&nbsp;set)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies the current contents of this set view into an existing set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="type parameter in Sets.SetView">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.SetView.html#immutableCopy()">immutableCopy</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable copy of the current contents of this set view.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.AbstractSet"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractSet.html?is-external=true" title="class or interface in java.util">AbstractSet</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractSet.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractSet.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractSet.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.AbstractCollection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#add(E)" title="class or interface in java.util">add</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toString()" title="class or interface in java.util">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Set"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#add(E)" title="class or interface in java.util">add</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="immutableCopy()"><!-- --></A><H3>
+immutableCopy</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="type parameter in Sets.SetView">E</A>&gt; <B>immutableCopy</B>()</PRE>
+<DL>
+<DD>Returns an immutable copy of the current contents of this set view.
+ Does not support null elements.
+
+ <p><b>Warning:</b> this may have unexpected results if a backing set of
+ this view uses a nonstandard notion of equivalence, for example if it is
+ a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeSet.html?is-external=true" title="class or interface in java.util"><CODE>TreeSet</CODE></A> using a comparator that is inconsistent with <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(Object)</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="copyInto(java.util.Set)"><!-- --></A><A NAME="copyInto(S)"><!-- --></A><H3>
+copyInto</H3>
+<PRE>
+public &lt;S extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="type parameter in Sets.SetView">E</A>&gt;&gt; S <B>copyInto</B>(S&nbsp;set)</PRE>
+<DL>
+<DD>Copies the current contents of this set view into an existing set. This
+ method has equivalent behavior to <code>set.addAll(this)</code>, assuming that
+ all the sets involved are based on the same notion of equivalence.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Sets.SetView.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/Sets.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/Sets.SetView.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Sets.SetView.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/Sets.html b/javadoc/com/google/common/collect/Sets.html
new file mode 100644
index 0000000..b31fe0c
--- /dev/null
+++ b/javadoc/com/google/common/collect/Sets.html
@@ -0,0 +1,999 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Sets (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Sets (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Sets.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/Sets.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Sets.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class Sets</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.Sets</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public final class <B>Sets</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+Static utility methods pertaining to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> instances. Also see this
+ class's counterparts <A HREF="../../../../com/google/common/collect/Lists.html" title="class in com.google.common.collect"><CODE>Lists</CODE></A> and <A HREF="../../../../com/google/common/collect/Maps.html" title="class in com.google.common.collect"><CODE>Maps</CODE></A>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Kevin Bourrillion, Jared Levy</DD>
+</DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A>&lt;<A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="type parameter in Sets.SetView">E</A>&gt;</B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An unmodifiable view of a set which may be backed by other sets; this view
+ will change as the backing sets do.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt;
+<BR>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#complementOf(java.util.Collection)">complementOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;&nbsp;collection)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an <code>EnumSet</code> consisting of all enum values that are not in
+ the specified collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt;
+<BR>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#complementOf(java.util.Collection, java.lang.Class)">complementOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;&nbsp;collection,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;E&gt;&nbsp;type)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an <code>EnumSet</code> consisting of all enum values that are not in
+ the specified collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#difference(java.util.Set, java.util.Set)">difference</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;&nbsp;set1,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;?&gt;&nbsp;set2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable <b>view</b> of the difference of two sets.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#filter(java.util.Set, com.google.common.base.Predicate)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;&nbsp;unfiltered,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super E&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the elements of <code>unfiltered</code> that satisfy a predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#immutableEnumSet(E, E...)">immutableEnumSet</A></B>(E&nbsp;anElement,
+ E...&nbsp;otherElements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set instance containing the given enum elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#immutableEnumSet(java.lang.Iterable)">immutableEnumSet</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set instance containing the given enum elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#intersection(java.util.Set, java.util.Set)">intersection</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;&nbsp;set1,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;?&gt;&nbsp;set2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable <b>view</b> of the intersection of two sets.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt;
+<BR>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#newEnumSet(java.lang.Iterable, java.lang.Class)">newEnumSet</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;iterable,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;E&gt;&nbsp;elementType)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new <code>EnumSet</code> instance containing the given elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html?is-external=true" title="class or interface in java.util">HashSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#newHashSet()">newHashSet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i>, empty <code>HashSet</code> instance.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html?is-external=true" title="class or interface in java.util">HashSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#newHashSet(E...)">newHashSet</A></B>(E...&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i> <code>HashSet</code> instance containing the given
+ elements in unspecified order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html?is-external=true" title="class or interface in java.util">HashSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#newHashSet(java.lang.Iterable)">newHashSet</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i> <code>HashSet</code> instance containing the given
+ elements in unspecified order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html?is-external=true" title="class or interface in java.util">HashSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#newHashSet(java.util.Iterator)">newHashSet</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i> <code>HashSet</code> instance containing the given
+ elements in unspecified order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html?is-external=true" title="class or interface in java.util">HashSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#newHashSetWithExpectedSize(int)">newHashSetWithExpectedSize</A></B>(int&nbsp;expectedSize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an empty <code>HashSet</code> instance with enough capacity to hold the
+ specified number of elements without rehashing.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedHashSet.html?is-external=true" title="class or interface in java.util">LinkedHashSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#newLinkedHashSet()">newLinkedHashSet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i>, empty <code>LinkedHashSet</code> instance.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedHashSet.html?is-external=true" title="class or interface in java.util">LinkedHashSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#newLinkedHashSet(java.lang.Iterable)">newLinkedHashSet</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i> <code>LinkedHashSet</code> instance containing the
+ given elements in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#newSetFromMap(java.util.Map)">newSetFromMap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;E,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</A>&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a set backed by the specified map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt;
+<BR>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeSet.html?is-external=true" title="class or interface in java.util">TreeSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#newTreeSet()">newTreeSet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i>, empty <code>TreeSet</code> instance sorted by the
+ natural sort ordering of its elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeSet.html?is-external=true" title="class or interface in java.util">TreeSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#newTreeSet(java.util.Comparator)">newTreeSet</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super E&gt;&nbsp;comparator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i>, empty <code>TreeSet</code> instance with the given
+ comparator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt;
+<BR>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeSet.html?is-external=true" title="class or interface in java.util">TreeSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#newTreeSet(java.lang.Iterable)">newTreeSet</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i> <code>TreeSet</code> instance containing the given
+ elements sorted by their natural ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#union(java.util.Set, java.util.Set)">union</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;? extends E&gt;&nbsp;set1,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;? extends E&gt;&nbsp;set2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable <b>view</b> of the union of two sets.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="immutableEnumSet(java.lang.Enum,java.lang.Enum[])"><!-- --></A><A NAME="immutableEnumSet(E, E...)"><!-- --></A><H3>
+immutableEnumSet</H3>
+<PRE>
+public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt; <B>immutableEnumSet</B>(E&nbsp;anElement,
+ E...&nbsp;otherElements)</PRE>
+<DL>
+<DD>Returns an immutable set instance containing the given enum elements.
+ Internally, the returned set will be backed by an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util"><CODE>EnumSet</CODE></A>.
+
+ <p>The iteration order of the returned set follows the enum's iteration
+ order, not the order in which the elements are provided to the method.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>anElement</CODE> - one of the elements the set should contain<DD><CODE>otherElements</CODE> - the rest of the elements the set should contain
+<DT><B>Returns:</B><DD>an immutable set containing those elements, minus duplicates</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="immutableEnumSet(java.lang.Iterable)"><!-- --></A><H3>
+immutableEnumSet</H3>
+<PRE>
+public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt; <B>immutableEnumSet</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Returns an immutable set instance containing the given enum elements.
+ Internally, the returned set will be backed by an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util"><CODE>EnumSet</CODE></A>.
+
+ <p>The iteration order of the returned set follows the enum's iteration
+ order, not the order in which the elements appear in the given collection.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements, all of the same <code>enum</code> type, that the
+ set should contain
+<DT><B>Returns:</B><DD>an immutable set containing those elements, minus duplicates</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newEnumSet(java.lang.Iterable, java.lang.Class)"><!-- --></A><H3>
+newEnumSet</H3>
+<PRE>
+public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</A>&lt;E&gt; <B>newEnumSet</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;iterable,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;E&gt;&nbsp;elementType)</PRE>
+<DL>
+<DD>Returns a new <code>EnumSet</code> instance containing the given elements.
+ Unlike <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true#copyOf(java.util.Collection)" title="class or interface in java.util"><CODE>EnumSet.copyOf(Collection)</CODE></A>, this method does not produce an
+ exception on an empty collection, and it may be called on any iterable, not
+ just a <code>Collection</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newHashSet()"><!-- --></A><H3>
+newHashSet</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html?is-external=true" title="class or interface in java.util">HashSet</A>&lt;E&gt; <B>newHashSet</B>()</PRE>
+<DL>
+<DD>Creates a <i>mutable</i>, empty <code>HashSet</code> instance.
+
+ <p><b>Note:</b> if mutability is not required, use <A HREF="../../../../com/google/common/collect/ImmutableSet.html#of()"><CODE>ImmutableSet.of()</CODE></A> instead.
+
+ <p><b>Note:</b> if <code>E</code> is an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><CODE>Enum</CODE></A> type, use <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true#noneOf(java.lang.Class)" title="class or interface in java.util"><CODE>EnumSet.noneOf(java.lang.Class<E>)</CODE></A> instead.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a new, empty <code>HashSet</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newHashSet(java.lang.Object[])"><!-- --></A><A NAME="newHashSet(E...)"><!-- --></A><H3>
+newHashSet</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html?is-external=true" title="class or interface in java.util">HashSet</A>&lt;E&gt; <B>newHashSet</B>(E...&nbsp;elements)</PRE>
+<DL>
+<DD>Creates a <i>mutable</i> <code>HashSet</code> instance containing the given
+ elements in unspecified order.
+
+ <p><b>Note:</b> if mutability is not required and the elements are
+ non-null, use <A HREF="../../../../com/google/common/collect/ImmutableSet.html#of(E...)"><CODE>ImmutableSet.of(Object[])</CODE></A> instead.
+
+ <p><b>Note:</b> if <code>E</code> is an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><CODE>Enum</CODE></A> type, use <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true#of(E, E...)" title="class or interface in java.util"><CODE>EnumSet.of(Enum, Enum[])</CODE></A> instead.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements that the set should contain
+<DT><B>Returns:</B><DD>a new <code>HashSet</code> containing those elements (minus duplicates)</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newHashSetWithExpectedSize(int)"><!-- --></A><H3>
+newHashSetWithExpectedSize</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html?is-external=true" title="class or interface in java.util">HashSet</A>&lt;E&gt; <B>newHashSetWithExpectedSize</B>(int&nbsp;expectedSize)</PRE>
+<DL>
+<DD>Creates an empty <code>HashSet</code> instance with enough capacity to hold the
+ specified number of elements without rehashing.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>expectedSize</CODE> - the expected size
+<DT><B>Returns:</B><DD>a new, empty <code>HashSet</code> with enough capacity to hold <code>expectedSize</code> elements without rehashing
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>expectedSize</code> is negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newHashSet(java.lang.Iterable)"><!-- --></A><H3>
+newHashSet</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html?is-external=true" title="class or interface in java.util">HashSet</A>&lt;E&gt; <B>newHashSet</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Creates a <i>mutable</i> <code>HashSet</code> instance containing the given
+ elements in unspecified order.
+
+ <p><b>Note:</b> if mutability is not required and the elements are
+ non-null, use <A HREF="../../../../com/google/common/collect/ImmutableSet.html#copyOf(java.lang.Iterable)"><CODE>ImmutableSet.copyOf(Iterable)</CODE></A> instead.
+
+ <p><b>Note:</b> if <code>E</code> is an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><CODE>Enum</CODE></A> type, use
+ <A HREF="../../../../com/google/common/collect/Sets.html#newEnumSet(java.lang.Iterable, java.lang.Class)"><CODE>newEnumSet(Iterable, Class)</CODE></A> instead.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements that the set should contain
+<DT><B>Returns:</B><DD>a new <code>HashSet</code> containing those elements (minus duplicates)</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newHashSet(java.util.Iterator)"><!-- --></A><H3>
+newHashSet</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html?is-external=true" title="class or interface in java.util">HashSet</A>&lt;E&gt; <B>newHashSet</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Creates a <i>mutable</i> <code>HashSet</code> instance containing the given
+ elements in unspecified order.
+
+ <p><b>Note:</b> if mutability is not required and the elements are
+ non-null, use <A HREF="../../../../com/google/common/collect/ImmutableSet.html#copyOf(java.lang.Iterable)"><CODE>ImmutableSet.copyOf(Iterable)</CODE></A> instead.
+
+ <p><b>Note:</b> if <code>E</code> is an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><CODE>Enum</CODE></A> type, you should create an
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util"><CODE>EnumSet</CODE></A> instead.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements that the set should contain
+<DT><B>Returns:</B><DD>a new <code>HashSet</code> containing those elements (minus duplicates)</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newLinkedHashSet()"><!-- --></A><H3>
+newLinkedHashSet</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedHashSet.html?is-external=true" title="class or interface in java.util">LinkedHashSet</A>&lt;E&gt; <B>newLinkedHashSet</B>()</PRE>
+<DL>
+<DD>Creates a <i>mutable</i>, empty <code>LinkedHashSet</code> instance.
+
+ <p><b>Note:</b> if mutability is not required, use <A HREF="../../../../com/google/common/collect/ImmutableSet.html#of()"><CODE>ImmutableSet.of()</CODE></A> instead.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a new, empty <code>LinkedHashSet</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newLinkedHashSet(java.lang.Iterable)"><!-- --></A><H3>
+newLinkedHashSet</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedHashSet.html?is-external=true" title="class or interface in java.util">LinkedHashSet</A>&lt;E&gt; <B>newLinkedHashSet</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Creates a <i>mutable</i> <code>LinkedHashSet</code> instance containing the
+ given elements in order.
+
+ <p><b>Note:</b> if mutability is not required and the elements are
+ non-null, use <A HREF="../../../../com/google/common/collect/ImmutableSet.html#copyOf(java.lang.Iterable)"><CODE>ImmutableSet.copyOf(Iterable)</CODE></A> instead.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements that the set should contain, in order
+<DT><B>Returns:</B><DD>a new <code>LinkedHashSet</code> containing those elements (minus
+ duplicates)</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newTreeSet()"><!-- --></A><H3>
+newTreeSet</H3>
+<PRE>
+public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeSet.html?is-external=true" title="class or interface in java.util">TreeSet</A>&lt;E&gt; <B>newTreeSet</B>()</PRE>
+<DL>
+<DD>Creates a <i>mutable</i>, empty <code>TreeSet</code> instance sorted by the
+ natural sort ordering of its elements.
+
+ <p><b>Note:</b> if mutability is not required, use <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#of()"><CODE>ImmutableSortedSet.of()</CODE></A> instead.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a new, empty <code>TreeSet</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newTreeSet(java.lang.Iterable)"><!-- --></A><H3>
+newTreeSet</H3>
+<PRE>
+public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeSet.html?is-external=true" title="class or interface in java.util">TreeSet</A>&lt;E&gt; <B>newTreeSet</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Creates a <i>mutable</i> <code>TreeSet</code> instance containing the given
+ elements sorted by their natural ordering.
+
+ <p><b>Note:</b> if mutability is not required, use <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#copyOf(java.lang.Iterable)"><CODE>ImmutableSortedSet.copyOf(Iterable)</CODE></A> instead.
+
+ <p><b>Note:</b> If <code>elements</code> is a <code>SortedSet</code> with an explicit
+ comparator, this method has different behavior than
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeSet.html?is-external=true#TreeSet(java.util.SortedSet)" title="class or interface in java.util"><CODE>TreeSet.TreeSet(SortedSet)</CODE></A>, which returns a <code>TreeSet</code> with
+ that comparator.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements that the set should contain
+<DT><B>Returns:</B><DD>a new <code>TreeSet</code> containing those elements (minus duplicates)</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newTreeSet(java.util.Comparator)"><!-- --></A><H3>
+newTreeSet</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeSet.html?is-external=true" title="class or interface in java.util">TreeSet</A>&lt;E&gt; <B>newTreeSet</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super E&gt;&nbsp;comparator)</PRE>
+<DL>
+<DD>Creates a <i>mutable</i>, empty <code>TreeSet</code> instance with the given
+ comparator.
+
+ <p><b>Note:</b> if mutability is not required, use <code>ImmutableSortedSet.orderedBy(comparator).build()</code> instead.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>comparator</CODE> - the comparator to use to sort the set
+<DT><B>Returns:</B><DD>a new, empty <code>TreeSet</code>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>comparator</code> is null</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="complementOf(java.util.Collection)"><!-- --></A><H3>
+complementOf</H3>
+<PRE>
+public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</A>&lt;E&gt; <B>complementOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;&nbsp;collection)</PRE>
+<DL>
+<DD>Creates an <code>EnumSet</code> consisting of all enum values that are not in
+ the specified collection. If the collection is an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util"><CODE>EnumSet</CODE></A>, this
+ method has the same behavior as <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true#complementOf(java.util.EnumSet)" title="class or interface in java.util"><CODE>EnumSet.complementOf(java.util.EnumSet<E>)</CODE></A>. Otherwise,
+ the specified collection must contain at least one element, in order to
+ determine the element type. If the collection could be empty, use
+ <A HREF="../../../../com/google/common/collect/Sets.html#complementOf(java.util.Collection, java.lang.Class)"><CODE>complementOf(Collection, Class)</CODE></A> instead of this method.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>collection</CODE> - the collection whose complement should be stored in the
+ enum set
+<DT><B>Returns:</B><DD>a new, modifiable <code>EnumSet</code> containing all values of the enum
+ that aren't present in the given collection
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>collection</code> is not an
+ <code>EnumSet</code> instance and contains no elements</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="complementOf(java.util.Collection, java.lang.Class)"><!-- --></A><H3>
+complementOf</H3>
+<PRE>
+public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</A>&lt;E&gt; <B>complementOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;&nbsp;collection,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;E&gt;&nbsp;type)</PRE>
+<DL>
+<DD>Creates an <code>EnumSet</code> consisting of all enum values that are not in
+ the specified collection. This is equivalent to
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true#complementOf(java.util.EnumSet)" title="class or interface in java.util"><CODE>EnumSet.complementOf(java.util.EnumSet<E>)</CODE></A>, but can act on any input collection, as long
+ as the elements are of enum type.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>collection</CODE> - the collection whose complement should be stored in the
+ <code>EnumSet</code><DD><CODE>type</CODE> - the type of the elements in the set
+<DT><B>Returns:</B><DD>a new, modifiable <code>EnumSet</code> initially containing all the
+ values of the enum not present in the given collection</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newSetFromMap(java.util.Map)"><!-- --></A><H3>
+newSetFromMap</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt; <B>newSetFromMap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;E,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</A>&gt;&nbsp;map)</PRE>
+<DL>
+<DD>Returns a set backed by the specified map. The resulting set displays
+ the same ordering, concurrency, and performance characteristics as the
+ backing map. In essence, this factory method provides a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>
+ implementation corresponding to any <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> implementation. There is no
+ need to use this method on a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> implementation that already has a
+ corresponding <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> implementation (such as <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> or
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util"><CODE>TreeMap</CODE></A>).
+
+ <p>Each method invocation on the set returned by this method results in
+ exactly one method invocation on the backing map or its <tt>keySet</tt>
+ view, with one exception. The <tt>addAll</tt> method is implemented as a
+ sequence of <tt>put</tt> invocations on the backing map.
+
+ <p>The specified map must be empty at the time this method is invoked,
+ and should not be accessed directly after this method returns. These
+ conditions are ensured if the map is created empty, passed directly
+ to this method, and no reference to the map is retained, as illustrated
+ in the following code fragment: <pre> <code>Set&lt;Object&gt; identityHashSet = Sets.newSetFromMap(
+ new IdentityHashMap&lt;Object, Boolean&gt;());</code></pre>
+
+ This method has the same behavior as the JDK 6 method
+ <code>Collections.newSetFromMap()</code>. The returned set is serializable if
+ the backing map is.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>map</CODE> - the backing map
+<DT><B>Returns:</B><DD>the set backed by the map
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <tt>map</tt> is not empty</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="union(java.util.Set, java.util.Set)"><!-- --></A><H3>
+union</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A>&lt;E&gt; <B>union</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;? extends E&gt;&nbsp;set1,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;? extends E&gt;&nbsp;set2)</PRE>
+<DL>
+<DD>Returns an unmodifiable <b>view</b> of the union of two sets. The returned
+ set contains all elements that are contained in either backing set.
+ Iterating over the returned set iterates first over all the elements of
+ <code>set1</code>, then over each element of <code>set2</code>, in order, that is not
+ contained in <code>set1</code>.
+
+ <p>Results are undefined if <code>set1</code> and <code>set2</code> are sets based on
+ different equivalence relations (as <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html?is-external=true" title="class or interface in java.util"><CODE>HashSet</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeSet.html?is-external=true" title="class or interface in java.util"><CODE>TreeSet</CODE></A>, and
+ the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util"><CODE>Map.keySet()</CODE></A> of an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/IdentityHashMap.html?is-external=true" title="class or interface in java.util"><CODE>IdentityHashMap</CODE></A> all are).
+
+ <p><b>Note:</b> The returned view performs better when <code>set1</code> is the
+ smaller of the two sets. If you have reason to believe one of your sets
+ will generally be smaller than the other, pass it first.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="intersection(java.util.Set, java.util.Set)"><!-- --></A><H3>
+intersection</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A>&lt;E&gt; <B>intersection</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;&nbsp;set1,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;?&gt;&nbsp;set2)</PRE>
+<DL>
+<DD>Returns an unmodifiable <b>view</b> of the intersection of two sets. The
+ returned set contains all elements that are contained by both backing sets.
+ The iteration order of the returned set matches that of <code>set1</code>.
+
+ <p>Results are undefined if <code>set1</code> and <code>set2</code> are sets based
+ on different equivalence relations (as <code>HashSet</code>, <code>TreeSet</code>,
+ and the keySet of an <code>IdentityHashMap</code> all are).
+
+ <p><b>Note:</b> The returned view performs slightly better when <code>set1</code> is the smaller of the two sets. If you have reason to believe one of
+ your sets will generally be smaller than the other, pass it first.
+ Unfortunately, since this method sets the generic type of the returned set
+ based on the type of the first set passed, this could in rare cases force
+ you to make a cast, for example: <pre> <code>Set&lt;Object&gt; aFewBadObjects = ...
+ Set&lt;String&gt; manyBadStrings = ...
+
+ // impossible for a non-String to be in the intersection
+ SuppressWarnings("unchecked")
+ Set&lt;String&gt; badStrings = (Set) Sets.intersection(
+ aFewBadObjects, manyBadStrings);</code></pre>
+
+ This is unfortunate, but should come up only very rarely.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="difference(java.util.Set, java.util.Set)"><!-- --></A><H3>
+difference</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A>&lt;E&gt; <B>difference</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;&nbsp;set1,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;?&gt;&nbsp;set2)</PRE>
+<DL>
+<DD>Returns an unmodifiable <b>view</b> of the difference of two sets. The
+ returned set contains all elements that are contained by <code>set1</code> and
+ not contained by <code>set2</code>. <code>set2</code> may also contain elements not
+ present in <code>set1</code>; these are simply ignored. The iteration order of
+ the returned set matches that of <code>set1</code>.
+
+ <p>Results are undefined if <code>set1</code> and <code>set2</code> are sets based
+ on different equivalence relations (as <code>HashSet</code>, <code>TreeSet</code>,
+ and the keySet of an <code>IdentityHashMap</code> all are).
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="filter(java.util.Set, com.google.common.base.Predicate)"><!-- --></A><H3>
+filter</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt; <B>filter</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;&nbsp;unfiltered,
+ <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super E&gt;&nbsp;predicate)</PRE>
+<DL>
+<DD>Returns the elements of <code>unfiltered</code> that satisfy a predicate. The
+ returned set is a live view of <code>unfiltered</code>; changes to one affect
+ the other.
+
+ <p>The resulting set's iterator does not support <code>remove()</code>, but all
+ other set methods are supported. The set's <code>add()</code> and
+ <code>addAll()</code> methods throw an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> if an
+ element that doesn't satisfy the predicate is provided. When methods such
+ as <code>removeAll()</code> and <code>clear()</code> are called on the filtered set,
+ only elements that satisfy the filter will be removed from the underlying
+ collection.
+
+ <p>The returned set isn't threadsafe or serializable, even if
+ <code>unfiltered</code> is.
+
+ <p>Many of the filtered set's methods, such as <code>size()</code>, iterate
+ across every element in the underlying set and determine which elements
+ satisfy the filter. When a live view is <i>not</i> needed, it may be faster
+ to copy <code>Iterables.filter(unfiltered, predicate)</code> and use the copy.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Sets.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/Sets.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Sets.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/SortedSetMultimap.html b/javadoc/com/google/common/collect/SortedSetMultimap.html
new file mode 100644
index 0000000..674ec22
--- /dev/null
+++ b/javadoc/com/google/common/collect/SortedSetMultimap.html
@@ -0,0 +1,396 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+SortedSetMultimap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="SortedSetMultimap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/SortedSetMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/SortedSetMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SortedSetMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Interface SortedSetMultimap&lt;K,V&gt;</H2>
+<DL>
+<DT><B>All Superinterfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;, <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</DD>
+</DL>
+<DL>
+<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public interface <B>SortedSetMultimap&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</DL>
+</PRE>
+
+<P>
+A <code>SetMultimap</code> whose set of values for a given key are kept sorted;
+ that is, they comprise a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A>. It cannot hold duplicate
+ key-value pairs; adding a key-value pair that's already in the multimap has
+ no effect. This interface does not specify the ordering of the multimap's
+ keys.
+
+ <p>The <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#get(K)"><CODE>get(K)</CODE></A>, <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#removeAll(java.lang.Object)"><CODE>removeAll(java.lang.Object)</CODE></A>, and <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#replaceValues(K, java.lang.Iterable)"><CODE>replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> methods
+ each return a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A> of values, while <A HREF="../../../../com/google/common/collect/Multimap.html#entries()"><CODE>Multimap.entries()</CODE></A>
+ returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> of map entries. Though the method signature doesn't say
+ so explicitly, the map returned by <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#asMap()"><CODE>asMap()</CODE></A> has <code>SortedSet</code>
+ values.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Jared Levy</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#asMap()">asMap</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map view that associates each key with the corresponding values
+ in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#get(K)">get</A></B>(<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection view of all values associated with a key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all values associated with a given key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key, replacing any existing
+ values for that key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#valueComparator()">valueComparator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the comparator that orders the multimap values, with a <code>null</code>
+ indicating that natural ordering is used.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.SetMultimap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#entries()">entries</A>, <A HREF="../../../../com/google/common/collect/SetMultimap.html#equals(java.lang.Object)">equals</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.Multimap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="get(java.lang.Object)"><!-- --></A><A NAME="get(K)"><!-- --></A><H3>
+get</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt; <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>&nbsp;key)</PRE>
+<DL>
+<DD>Returns a collection view of all values associated with a key. If no
+ mappings in the multimap have the provided key, an empty collection is
+ returned.
+
+ <p>Changes to the returned collection will update the underlying multimap,
+ and vice versa.
+
+ <p>Because a <code>SortedSetMultimap</code> has unique sorted values for a given
+ key, this method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A>, instead of the
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> specified in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap
+<DT><B>Returns:</B><DD>the collection of values that the key maps to</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
+removeAll</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt; <B>removeAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD>Removes all values associated with a given key.
+
+ <p>Because a <code>SortedSetMultimap</code> has unique sorted values for a given
+ key, this method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A>, instead of the
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> specified in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entries to remove from the multimap
+<DT><B>Returns:</B><DD>the collection of removed values, or an empty collection if no
+ values were associated with the provided key. The collection
+ <i>may</i> be modifiable, but updating it will have no effect on the
+ multimap.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="replaceValues(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="replaceValues(K, java.lang.Iterable)"><!-- --></A><H3>
+replaceValues</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt; <B>replaceValues</B>(<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;&nbsp;values)</PRE>
+<DL>
+<DD>Stores a collection of values with the same key, replacing any existing
+ values for that key.
+
+ <p>Because a <code>SortedSetMultimap</code> has unique sorted values for a given
+ key, this method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A>, instead of the
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> specified in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
+
+ <p>Any duplicates in <code>values</code> will be stored in the multimap once.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
+<DT><B>Returns:</B><DD>the collection of replaced values, or an empty collection if no
+ values were previously associated with the key. The collection
+ <i>may</i> be modifiable, but updating it will have no effect on the
+ multimap.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="asMap()"><!-- --></A><H3>
+asMap</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;&gt; <B>asMap</B>()</PRE>
+<DL>
+<DD>Returns a map view that associates each key with the corresponding values
+ in the multimap. Changes to the returned map, such as element removal,
+ will update the underlying multimap. The map never supports
+ <code>setValue()</code> on the map entries, <code>put</code>, or <code>putAll</code>.
+
+ <p>The collections returned by <code>asMap().get(Object)</code> have the same
+ behavior as those returned by <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#get(K)"><CODE>get(K)</CODE></A>.
+
+ <p>Though the method signature doesn't say so explicitly, the returned map
+ has <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A> values.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a map view from a key to its collection of values</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="valueComparator()"><!-- --></A><H3>
+valueComparator</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt; <B>valueComparator</B>()</PRE>
+<DL>
+<DD>Returns the comparator that orders the multimap values, with a <code>null</code>
+ indicating that natural ordering is used.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/SortedSetMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/SortedSetMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SortedSetMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/TreeMultimap.html b/javadoc/com/google/common/collect/TreeMultimap.html
new file mode 100644
index 0000000..9312f57
--- /dev/null
+++ b/javadoc/com/google/common/collect/TreeMultimap.html
@@ -0,0 +1,1023 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+TreeMultimap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="TreeMultimap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TreeMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/TreeMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TreeMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class TreeMultimap&lt;K,V&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.TreeMultimap&lt;K,V&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;, <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;, <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public class <B>TreeMultimap&lt;K,V&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+Implementation of <code>Multimap</code> whose keys and values are ordered by
+ their natural ordering or by supplied comparators. In all cases, this
+ implementation uses <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true#compareTo(T)" title="class or interface in java.lang"><CODE>Comparable.compareTo(T)</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true#compare(T, T)" title="class or interface in java.util"><CODE>Comparator.compare(T, T)</CODE></A> instead of <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A> to determine
+ equivalence of instances.
+
+ <p><b>Warning:</b> The comparators or comparables used must be <i>consistent
+ with equals</i> as explained by the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang"><CODE>Comparable</CODE></A> class specification.
+ Otherwise, the resulting multiset will violate the general contract of <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A>, which it is specified in terms of <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>.
+
+ <p>The collections returned by <code>keySet</code> and <code>asMap</code> iterate
+ through the keys according to the key comparator ordering or the natural
+ ordering of the keys. Similarly, <code>get</code>, <code>removeAll</code>, and <code>replaceValues</code> return collections that iterate through the values according
+ to the value comparator ordering or the natural ordering of the values. The
+ collections generated by <code>entries</code>, <code>keys</code>, and <code>values</code>
+ iterate across the keys according to the above key ordering, and for each
+ key they iterate across the values according to the value ordering.
+
+ <p>The multimap does not store duplicate key-value pairs. Adding a new
+ key-value pair equal to an existing key-value pair has no effect.
+
+ <p>Depending on the comparators, null keys and values may or may not be
+ supported. The natural ordering does not support nulls. All optional multimap
+ methods are supported, and all returned views are modifiable.
+
+ <p>This class is not threadsafe when any concurrent operations update the
+ multimap. Concurrent read operations will work correctly. To allow concurrent
+ update operations, wrap your multimap with a call to <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedSortedSetMultimap(com.google.common.collect.SortedSetMultimap)"><CODE>Multimaps.synchronizedSortedSetMultimap(com.google.common.collect.SortedSetMultimap<K, V>)</CODE></A>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Jared Levy</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.TreeMultimap">Serialized Form</A></DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#asMap()">asMap</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map view that associates each key with the corresponding values
+ in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#clear()">clear</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all key-value pairs from the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified key-value pair.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#containsKey(java.lang.Object)">containsKey</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains any values for the specified
+ key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified value for any
+ key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#create()">create</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an empty <code>TreeMultimap</code> ordered by the natural ordering of
+ its keys and values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#create(java.util.Comparator, java.util.Comparator)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super K&gt;&nbsp;keyComparator,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super V&gt;&nbsp;valueComparator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an empty <code>TreeMultimap</code> instance using explicit comparators.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a <code>TreeMultimap</code>, ordered by the natural ordering of its
+ keys and values, with the same mappings as the specified multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#entries()">entries</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all key-value pairs.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object to this multimap for equality.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;V&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#get(K)">get</A></B>(K&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection view of all values associated with a key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the hash code for this multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#isEmpty()">isEmpty</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains no key-value pairs.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#keyComparator()">keyComparator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the comparator that orders the multimap keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;K&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#keys()">keys</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection, which may contain duplicates, of all keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#keySet()">keySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of all keys, each appearing once in the returned set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#put(K, V)">put</A></B>(K&nbsp;key,
+ V&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a key-value pair in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#putAll(K, java.lang.Iterable)">putAll</A></B>(K&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all of another multimap's key-value pairs into this multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a key-value pair from the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;V&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all values associated with a given key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;V&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(K&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key, replacing any existing
+ values for that key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#size()">size</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of key-value pairs in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string representation of the multimap, generated by calling
+ <code>toString</code> on the map returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#valueComparator()">valueComparator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the comparator that orders the multimap values, with a <code>null</code>
+ indicating that natural ordering is used.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#values()">values</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all values in the multimap.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.SetMultimap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#entries()">entries</A>, <A HREF="../../../../com/google/common/collect/SetMultimap.html#equals(java.lang.Object)">equals</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.Multimap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="create()"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; <A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>&lt;K,V&gt; <B>create</B>()</PRE>
+<DL>
+<DD>Creates an empty <code>TreeMultimap</code> ordered by the natural ordering of
+ its keys and values.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="create(java.util.Comparator, java.util.Comparator)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>&lt;K,V&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super K&gt;&nbsp;keyComparator,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super V&gt;&nbsp;valueComparator)</PRE>
+<DL>
+<DD>Creates an empty <code>TreeMultimap</code> instance using explicit comparators.
+ Neither comparator may be null; use <A HREF="../../../../com/google/common/collect/Ordering.html#natural()"><CODE>Ordering.natural()</CODE></A> to specify
+ natural order.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>keyComparator</CODE> - the comparator that determines the key ordering<DD><CODE>valueComparator</CODE> - the comparator that determines the value ordering</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="create(com.google.common.collect.Multimap)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; <A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>&lt;K,V&gt; <B>create</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</PRE>
+<DL>
+<DD>Constructs a <code>TreeMultimap</code>, ordered by the natural ordering of its
+ keys and values, with the same mappings as the specified multimap.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - the multimap whose contents are copied to this multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keyComparator()"><!-- --></A><H3>
+keyComparator</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">K</A>&gt; <B>keyComparator</B>()</PRE>
+<DL>
+<DD>Returns the comparator that orders the multimap keys.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="valueComparator()"><!-- --></A><H3>
+valueComparator</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">V</A>&gt; <B>valueComparator</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#valueComparator()">SortedSetMultimap</A></CODE></B></DD>
+<DD>Returns the comparator that orders the multimap values, with a <code>null</code>
+ indicating that natural ordering is used.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keySet()"><!-- --></A><H3>
+keySet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">K</A>&gt; <B>keySet</B>()</PRE>
+<DL>
+<DD>Returns the set of all keys, each appearing once in the returned set.
+ Changes to the returned set will update the underlying multimap, and vice
+ versa.
+
+ <p>Because a <code>TreeMultimap</code> has unique sorted keys, this method
+ returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A>, instead of the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> specified in the
+ <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">K</A>,<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the collection of distinct keys</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="asMap()"><!-- --></A><H3>
+asMap</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">V</A>&gt;&gt; <B>asMap</B>()</PRE>
+<DL>
+<DD>Returns a map view that associates each key with the corresponding values
+ in the multimap. Changes to the returned map, such as element removal,
+ will update the underlying multimap. The map does not support
+ <code>setValue()</code> on its entries, <code>put</code>, or <code>putAll</code>.
+
+ <p>The collections returned by <code>asMap().get(Object)</code> have the same
+ behavior as those returned by <A HREF="../../../../com/google/common/collect/Multimap.html#get(K)"><CODE>Multimap.get(K)</CODE></A>.
+
+ <p>Because a <code>TreeMultimap</code> has unique sorted keys, this method
+ returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util"><CODE>SortedMap</CODE></A>, instead of the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> specified
+ in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">K</A>,<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">K</A>,<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">K</A>,<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">V</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a map view from a key to its collection of values</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(java.lang.Object)"><!-- --></A><A NAME="get(K)"><!-- --></A><H3>
+get</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;V&gt; <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ K&nbsp;key)</PRE>
+<DL>
+<DD>Returns a collection view of all values associated with a key. If no
+ mappings in the multimap have the provided key, an empty collection is
+ returned.
+
+ <p>Changes to the returned collection will update the underlying multimap,
+ and vice versa.
+
+ <p>The returned collection is not serializable.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap
+<DT><B>Returns:</B><DD>the collection of values that the key maps to</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
+removeAll</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;V&gt; <B>removeAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD>Removes all values associated with a given key.
+
+ <p>The returned collection is immutable.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entries to remove from the multimap
+<DT><B>Returns:</B><DD>the collection of removed values, or an empty collection if no
+ values were associated with the provided key. The collection
+ <i>may</i> be modifiable, but updating it will have no effect on the
+ multimap.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="replaceValues(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="replaceValues(K, java.lang.Iterable)"><!-- --></A><H3>
+replaceValues</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;V&gt; <B>replaceValues</B>(K&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</PRE>
+<DL>
+<DD>Stores a collection of values with the same key, replacing any existing
+ values for that key.
+
+ <p>The returned collection is immutable.
+
+ <p>Any duplicates in <code>values</code> will be stored in the multimap once.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
+<DT><B>Returns:</B><DD>the collection of replaced values, or an empty collection if no
+ values were previously associated with the key. The collection
+ <i>may</i> be modifiable, but updating it will have no effect on the
+ multimap.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="values()"><!-- --></A><H3>
+values</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt; <B>values</B>()</PRE>
+<DL>
+<DD>Returns a collection of all values in the multimap. Changes to the returned
+ collection will update the underlying multimap, and vice versa.
+
+ <p>The iterator generated by the returned collection traverses the values
+ for one key, followed by the values of a second key, and so on.
+
+ Consequently, the values do not follow their natural ordering or the
+ ordering of the value comparator.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>collection of values, which may include the same value multiple
+ times if it occurs in multiple mappings</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entries()"><!-- --></A><H3>
+entries</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt; <B>entries</B>()</PRE>
+<DL>
+<DD>Returns a collection of all key-value pairs. Changes to the returned
+ collection will update the underlying multimap, and vice versa. The entries
+ collection does not support the <code>add</code> or <code>addAll</code> operations.
+
+ <p>The iterator generated by the returned collection traverses the values
+ for one key, followed by the values of a second key, and so on.
+
+ <p>Each entry is an immutable snapshot of a key-value mapping in the
+ multimap, taken at the time the entry is returned by a method call to the
+ collection or its iterator.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#entries()">entries</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#entries()">entries</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>collection of map entries consisting of key-value pairs</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
+put</H3>
+<PRE>
+public boolean <B>put</B>(K&nbsp;key,
+ V&nbsp;value)</PRE>
+<DL>
+<DD>Stores a key-value pair in the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>value</CODE> - value to store in the multimap
+<DT><B>Returns:</B><DD><code>true</code> if the method increased the size of the multimap, or
+ <code>false</code> if the multimap already contained the key-value pair</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD>Compares the specified object to this multimap for equality.
+
+ <p>Two <code>SetMultimap</code> instances are equal if, for each key, they
+ contain the same values. Equality does not depend on the ordering of keys
+ or values.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="size()"><!-- --></A><H3>
+size</H3>
+<PRE>
+public int <B>size</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">Multimap</A></CODE></B></DD>
+<DD>Returns the number of key-value pairs in the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isEmpty()"><!-- --></A><H3>
+isEmpty</H3>
+<PRE>
+public boolean <B>isEmpty</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains no key-value pairs.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsKey(java.lang.Object)"><!-- --></A><H3>
+containsKey</H3>
+<PRE>
+public boolean <B>containsKey</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains any values for the specified
+ key.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
+containsValue</H3>
+<PRE>
+public boolean <B>containsValue</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains the specified value for any
+ key.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>value</CODE> - value to search for in multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsEntry(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
+containsEntry</H3>
+<PRE>
+public boolean <B>containsEntry</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Returns <code>true</code> if the multimap contains the specified key-value pair.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap<DD><CODE>value</CODE> - value to search for in multimap</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public boolean <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
+ <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">Multimap</A></CODE></B></DD>
+<DD>Removes a key-value pair from the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entry to remove from the multimap<DD><CODE>value</CODE> - value of entry to remove the multimap
+<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="putAll(K, java.lang.Iterable)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public boolean <B>putAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ K&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">Multimap</A></CODE></B></DD>
+<DD>Stores a collection of values with the same key.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
+<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(com.google.common.collect.Multimap)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public boolean <B>putAll</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">Multimap</A></CODE></B></DD>
+<DD>Copies all of another multimap's key-value pairs into this multimap. The
+ order in which the mappings are added is determined by
+ <code>multimap.entries()</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - mappings to store in this multimap
+<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clear()"><!-- --></A><H3>
+clear</H3>
+<PRE>
+public void <B>clear</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">Multimap</A></CODE></B></DD>
+<DD>Removes all key-value pairs from the multimap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keys()"><!-- --></A><H3>
+keys</H3>
+<PRE>
+public <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;K&gt; <B>keys</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">Multimap</A></CODE></B></DD>
+<DD>Returns a collection, which may contain duplicates, of all keys. The number
+ of times of key appears in the returned multiset equals the number of
+ mappings the key has in the multimap. Changes to the returned multiset will
+ update the underlying multimap, and vice versa.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a multiset with keys corresponding to the distinct keys of the
+ multimap and frequencies corresponding to the number of values that
+ each key maps to</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+public int <B>hashCode</B>()</PRE>
+<DL>
+<DD>Returns the hash code for this multimap.
+
+ <p>The hash code of a multimap is defined as the hash code of the map view,
+ as returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util"><CODE>Map.hashCode()</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Returns a string representation of the multimap, generated by calling
+ <code>toString</code> on the map returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a string representation of the multimap</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TreeMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/TreeMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TreeMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/TreeMultiset.html b/javadoc/com/google/common/collect/TreeMultiset.html
new file mode 100644
index 0000000..b92e63a
--- /dev/null
+++ b/javadoc/com/google/common/collect/TreeMultiset.html
@@ -0,0 +1,1189 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+TreeMultiset (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="TreeMultiset (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TreeMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/TreeMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TreeMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class TreeMultiset&lt;E&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">java.util.AbstractCollection</A>&lt;E&gt;
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.TreeMultiset&lt;E&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public final class <B>TreeMultiset&lt;E&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</DL>
+</PRE>
+
+<P>
+A multiset which maintains the ordering of its elements, according to either
+ their natural order or an explicit <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util"><CODE>Comparator</CODE></A>. In all cases, this
+ implementation uses <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true#compareTo(T)" title="class or interface in java.lang"><CODE>Comparable.compareTo(T)</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true#compare(T, T)" title="class or interface in java.util"><CODE>Comparator.compare(T, T)</CODE></A> instead of <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A> to determine
+ equivalence of instances.
+
+ <p><b>Warning:</b> The comparison must be <i>consistent with equals</i> as
+ explained by the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang"><CODE>Comparable</CODE></A> class specification. Otherwise, the
+ resulting multiset will violate the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> contract, which it is
+ specified in terms of <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Neal Kanodia, Jared Levy</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.TreeMultiset">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="nested_classes_inherited_from_class_com.google.common.collect.Multiset"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="type parameter in Multiset.Entry">E</A>&gt;</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#add(E)">add</A></B>(E&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures that this collection contains the specified element (optional
+ operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#add(E, int)">add</A></B>(E&nbsp;element,
+ int&nbsp;occurrences)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a number of occurrences of an element to this multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#addAll(java.util.Collection)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends E&gt;&nbsp;elementsToAdd)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds all of the elements in the specified collection to this collection
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#clear()">clear</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all of the elements from this collection (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#contains(java.lang.Object)">contains</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this collection contains the specified element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#containsAll(java.util.Collection)">containsAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this collection contains all of the elements
+ in the specified collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#count(java.lang.Object)">count</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of occurrences of an element in this multiset (the
+ <i>count</i> of the element).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#create()">create</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty multiset, sorted according to the elements' natural
+ order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#create(java.util.Comparator)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super E&gt;&nbsp;comparator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty multiset, sorted according to the specified
+ comparator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt;
+<BR>
+<A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#create(java.lang.Iterable)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an empty multiset containing the given initial elements, sorted
+ according to the elements' natural order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="type parameter in TreeMultiset">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#elementSet()">elementSet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of distinct elements contained in this multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;E&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#entrySet()">entrySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
+ the count of that element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indicates whether some other object is "equal to" this one.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code value for the object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#isEmpty()">isEmpty</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <tt>true</tt> if this collection contains no elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#iterator()">iterator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator over the elements contained in this collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a single instance of the specified element from this
+ collection, if it is present (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#remove(java.lang.Object, int)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
+ int&nbsp;occurrences)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a number of occurrences of the specified element from this
+ multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#removeAll(java.util.Collection)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all of this collection's elements that are also contained in the
+ specified collection (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#retainAll(java.util.Collection)">retainAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retains only the elements in this collection that are contained in the
+ specified collection (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#setCount(E, int)">setCount</A></B>(E&nbsp;element,
+ int&nbsp;count)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds or removes the necessary occurrences of an element such that the
+ element attains the desired count.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#setCount(E, int, int)">setCount</A></B>(E&nbsp;element,
+ int&nbsp;oldCount,
+ int&nbsp;newCount)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Conditionally sets the count of an element to a new value, as described in
+ <A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)"><CODE>Multiset.setCount(Object, int)</CODE></A>, provided that the element has the expected
+ current count.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#size()">size</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of elements in this collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string representation of this collection.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.AbstractCollection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Collection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="create()"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; <A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>&lt;E&gt; <B>create</B>()</PRE>
+<DL>
+<DD>Creates a new, empty multiset, sorted according to the elements' natural
+ order. All elements inserted into the multiset must implement the
+ <code>Comparable</code> interface. Furthermore, all such elements must be
+ <i>mutually comparable</i>: <code>e1.compareTo(e2)</code> must not throw a
+ <code>ClassCastException</code> for any elements <code>e1</code> and <code>e2</code> in
+ the multiset. If the user attempts to add an element to the multiset that
+ violates this constraint (for example, the user attempts to add a string
+ element to a set whose elements are integers), the <code>add(Object)</code>
+ call will throw a <code>ClassCastException</code>.
+
+ <p>The type specification is <code>&lt;E extends Comparable&gt;</code>, instead of the
+ more specific <code>&lt;E extends Comparable&lt;? super E&gt;&gt;</code>, to support
+ classes defined without generics.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="create(java.util.Comparator)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>&lt;E&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super E&gt;&nbsp;comparator)</PRE>
+<DL>
+<DD>Creates a new, empty multiset, sorted according to the specified
+ comparator. All elements inserted into the multiset must be <i>mutually
+ comparable</i> by the specified comparator: <code>comparator.compare(e1,
+ e2)</code> must not throw a <code>ClassCastException</code> for any elements <code>e1</code> and <code>e2</code> in the multiset. If the user attempts to add an element
+ to the multiset that violates this constraint, the <code>add(Object)</code> call
+ will throw a <code>ClassCastException</code>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>comparator</CODE> - the comparator that will be used to sort this multiset. A
+ null value indicates that the elements' <i>natural ordering</i> should
+ be used.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="create(java.lang.Iterable)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; <A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>&lt;E&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
+<DL>
+<DD>Creates an empty multiset containing the given initial elements, sorted
+ according to the elements' natural order.
+
+ <p>The type specification is <code>&lt;E extends Comparable&gt;</code>, instead of the
+ more specific <code>&lt;E extends Comparable&lt;? super E&gt;&gt;</code>, to support
+ classes defined without generics.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="elementSet()"><!-- --></A><H3>
+elementSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="type parameter in TreeMultiset">E</A>&gt; <B>elementSet</B>()</PRE>
+<DL>
+<DD>Returns the set of distinct elements contained in this multiset. The
+ element set is backed by the same data as the multiset, so any change to
+ either is immediately reflected in the other. The order of the elements in
+ the element set is unspecified.
+
+ <p>If the element set supports any removal operations, these necessarily
+ cause <b>all</b> occurrences of the removed element(s) to be removed from
+ the multiset. Implementations are not expected to support the add
+ operations, although this is possible.
+
+ <p>A common use for the element set is to find the number of distinct
+ elements in the multiset: <code>elementSet().size()</code>.
+
+ <p>In <code>TreeMultiset</code>, the return type of this method is narrowed
+ from <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">elementSet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="type parameter in TreeMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a view of the set of distinct elements in this multiset</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="count(java.lang.Object)"><!-- --></A><H3>
+count</H3>
+<PRE>
+public int <B>count</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">Multiset</A></CODE></B></DD>
+<DD>Returns the number of occurrences of an element in this multiset (the
+ <i>count</i> of the element). Note that for an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>-based
+ multiset, this gives the same result as <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#frequency(java.util.Collection, java.lang.Object)" title="class or interface in java.util"><CODE>Collections.frequency(java.util.Collection<?>, java.lang.Object)</CODE></A>
+ (which would presumably perform more poorly).
+
+ <p><b>Note:</b> the utility method <A HREF="../../../../com/google/common/collect/Iterables.html#frequency(java.lang.Iterable, java.lang.Object)"><CODE>Iterables.frequency(java.lang.Iterable<?>, java.lang.Object)</CODE></A> generalizes
+ this operation; it correctly delegates to this method when dealing with a
+ multiset, but it can also accept any other iterable type.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">count</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="type parameter in TreeMultiset">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to count occurrences of
+<DT><B>Returns:</B><DD>the number of occurrences of the element in this multiset; possibly
+ zero but never negative</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entrySet()"><!-- --></A><H3>
+entrySet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;E&gt;&gt; <B>entrySet</B>()</PRE>
+<DL>
+<DD>Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
+ the count of that element. This set contains exactly one entry for each
+ distinct element in the multiset (thus it always has the same size as the
+ <A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()"><CODE>Multiset.elementSet()</CODE></A>). The order of the elements in the element set is
+ unspecified.
+
+ <p>The entry set is backed by the same data as the multiset, so any change
+ to either is immediately reflected in the other. However, multiset changes
+ may or may not be reflected in any <code>Entry</code> instances already
+ retrieved from the entry set (this is implementation-dependent).
+ Furthermore, implementations are not required to support modifications to
+ the entry set at all, and the <code>Entry</code> instances themselves don't
+ even have methods for modification. See the specific implementation class
+ for more details on how its entry set handles modifications.
+
+ <p>Invoking <A HREF="../../../../com/google/common/collect/Multiset.Entry.html#getCount()"><CODE>Multiset.Entry.getCount()</CODE></A> on an entry in the returned
+ set always returns the current count of that element in the multiset, as
+ opposed to the count at the time the entry was retrieved.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()">entrySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a set of entries representing the data of this multiset</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="size()"><!-- --></A><H3>
+size</H3>
+<PRE>
+public int <B>size</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">java.util.Collection</A></CODE></B></DD>
+<DD>Returns the number of elements in this collection. If this collection
+ contains more than <tt>Integer.MAX_VALUE</tt> elements, returns
+ <tt>Integer.MAX_VALUE</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the number of elements in this collection</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="iterator()"><!-- --></A><H3>
+iterator</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt; <B>iterator</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#iterator()" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Returns an iterator over the elements contained in this collection.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#iterator()">iterator</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true#iterator()" title="class or interface in java.lang">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>an iterator over the elements contained in this collection</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="add(java.lang.Object,int)"><!-- --></A><A NAME="add(E, int)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public int <B>add</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ E&nbsp;element,
+ int&nbsp;occurrences)</PRE>
+<DL>
+<DD>Adds a number of occurrences of an element to this multiset. Note that if
+ <code>occurrences == 1</code>, this method has the identical effect to <A HREF="../../../../com/google/common/collect/Multiset.html#add(E)"><CODE>Multiset.add(Object)</CODE></A>. This method is functionally equivalent (except in the case
+ of overflow) to the call <code>addAll(Collections.nCopies(element,
+ occurrences))</code>, which would presumably perform much more poorly.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E, int)">add</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add occurrences of; may be <code>null</code> only
+ if explicitly allowed by the implementation<DD><CODE>occurrences</CODE> - the number of occurrences of the element to add. May be
+ zero, in which case no change will be made.
+<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the call would result in more than
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Integer.MAX_VALUE</CODE></A> occurrences of <code>element</code> in this
+ multiset.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object, int)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public int <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
+ int&nbsp;occurrences)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object, int)">Multiset</A></CODE></B></DD>
+<DD>Removes a number of occurrences of the specified element from this
+ multiset. If the multiset contains fewer than this number of occurrences to
+ begin with, all occurrences will be removed. Note that if
+ <code>occurrences == 1</code>, this is functionally equivalent to the call
+ <code>remove(element)</code>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object, int)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally remove occurrences of<DD><CODE>occurrences</CODE> - the number of occurrences of the element to remove. May
+ be zero, in which case no change will be made.
+<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setCount(java.lang.Object,int)"><!-- --></A><A NAME="setCount(E, int)"><!-- --></A><H3>
+setCount</H3>
+<PRE>
+public int <B>setCount</B>(E&nbsp;element,
+ int&nbsp;count)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)">Multiset</A></CODE></B></DD>
+<DD>Adds or removes the necessary occurrences of an element such that the
+ element attains the desired count.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add or remove occurrences of; may be null
+ only if explicitly allowed by the implementation<DD><CODE>count</CODE> - the desired count of the element in this multiset
+<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isEmpty()"><!-- --></A><H3>
+isEmpty</H3>
+<PRE>
+public boolean <B>isEmpty</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#isEmpty()" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this collection contains no elements.
+
+ <p>This implementation returns <tt>size() == 0</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection contains no elements</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="contains(java.lang.Object)"><!-- --></A><H3>
+contains</H3>
+<PRE>
+public boolean <B>contains</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this collection contains the specified element.
+ More formally, returns <tt>true</tt> if and only if this collection
+ contains at least one element <tt>e</tt> such that
+ <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>.
+
+ <p>This implementation iterates over the elements in the collection,
+ checking each element in turn for equality with the specified element.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#contains(java.lang.Object)">contains</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - element whose presence in this collection is to be tested
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection contains the specified
+ element</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="add(java.lang.Object)"><!-- --></A><A NAME="add(E)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public boolean <B>add</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ E&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#add(E)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Ensures that this collection contains the specified element (optional
+ operation). Returns <tt>true</tt> if this collection changed as a
+ result of the call. (Returns <tt>false</tt> if this collection does
+ not permit duplicates and already contains the specified element.)<p>
+
+ Collections that support this operation may place limitations on what
+ elements may be added to this collection. In particular, some
+ collections will refuse to add <tt>null</tt> elements, and others will
+ impose restrictions on the type of elements that may be added.
+ Collection classes should clearly specify in their documentation any
+ restrictions on what elements may be added.<p>
+
+ If a collection refuses to add a particular element for any reason
+ other than that it already contains the element, it <i>must</i> throw
+ an exception (rather than returning <tt>false</tt>). This preserves
+ the invariant that a collection always contains the specified element
+ after this call returns.
+
+ <p>This implementation always throws an
+ <tt>UnsupportedOperationException</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E)">add</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - element whose presence in this collection is to be ensured
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the
+ call</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public boolean <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Removes a single instance of the specified element from this
+ collection, if it is present (optional operation). More formally,
+ removes an element <tt>e</tt> such that
+ <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>, if
+ this collection contains one or more such elements. Returns
+ <tt>true</tt> if this collection contained the specified element (or
+ equivalently, if this collection changed as a result of the call).
+
+ <p>This implementation iterates over the collection looking for the
+ specified element. If it finds the element, it removes the element
+ from the collection using the iterator's remove method.
+
+ <p>Note that this implementation throws an
+ <tt>UnsupportedOperationException</tt> if the iterator returned by this
+ collection's iterator method does not implement the <tt>remove</tt>
+ method and this collection contains the specified object.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - element to be removed from this collection, if present
+<DT><B>Returns:</B><DD><tt>true</tt> if an element was removed as a result of this call</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setCount(java.lang.Object,int,int)"><!-- --></A><A NAME="setCount(E, int, int)"><!-- --></A><H3>
+setCount</H3>
+<PRE>
+public boolean <B>setCount</B>(E&nbsp;element,
+ int&nbsp;oldCount,
+ int&nbsp;newCount)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int, int)">Multiset</A></CODE></B></DD>
+<DD>Conditionally sets the count of an element to a new value, as described in
+ <A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)"><CODE>Multiset.setCount(Object, int)</CODE></A>, provided that the element has the expected
+ current count. If the current count is not <code>oldCount</code>, no change is
+ made.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally set the count of; may be null
+ only if explicitly allowed by the implementation<DD><CODE>oldCount</CODE> - the expected present count of the element in this multiset<DD><CODE>newCount</CODE> - the desired count of the element in this multiset
+<DT><B>Returns:</B><DD><code>true</code> if the condition for modification was met. This
+ implies that the multiset was indeed modified, unless
+ <code>oldCount == newCount</code>.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsAll(java.util.Collection)"><!-- --></A><H3>
+containsAll</H3>
+<PRE>
+public boolean <B>containsAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elements)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Returns <tt>true</tt> if this collection contains all of the elements
+ in the specified collection.
+
+ <p>This implementation iterates over the specified collection,
+ checking each element returned by the iterator in turn to see
+ if it's contained in this collection. If all elements are so
+ contained <tt>true</tt> is returned, otherwise <tt>false</tt>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#containsAll(java.util.Collection)">containsAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elements</CODE> - collection to be checked for containment in this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection contains all of the elements
+ in the specified collection<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>AbstractCollection.contains(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addAll(java.util.Collection)"><!-- --></A><H3>
+addAll</H3>
+<PRE>
+public boolean <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends E&gt;&nbsp;elementsToAdd)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Adds all of the elements in the specified collection to this collection
+ (optional operation). The behavior of this operation is undefined if
+ the specified collection is modified while the operation is in progress.
+ (This implies that the behavior of this call is undefined if the
+ specified collection is this collection, and this collection is
+ nonempty.)
+
+ <p>This implementation iterates over the specified collection, and adds
+ each object returned by the iterator to this collection, in turn.
+
+ <p>Note that this implementation will throw an
+ <tt>UnsupportedOperationException</tt> unless <tt>add</tt> is
+ overridden (assuming the specified collection is non-empty).
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elementsToAdd</CODE> - collection containing elements to be added to this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the call<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#add(E)" title="class or interface in java.util"><CODE>AbstractCollection.add(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="removeAll(java.util.Collection)"><!-- --></A><H3>
+removeAll</H3>
+<PRE>
+public boolean <B>removeAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Removes all of this collection's elements that are also contained in the
+ specified collection (optional operation). After this call returns,
+ this collection will contain no elements in common with the specified
+ collection.
+
+ <p>This implementation iterates over this collection, checking each
+ element returned by the iterator in turn to see if it's contained
+ in the specified collection. If it's so contained, it's removed from
+ this collection with the iterator's <tt>remove</tt> method.
+
+ <p>Note that this implementation will throw an
+ <tt>UnsupportedOperationException</tt> if the iterator returned by the
+ <tt>iterator</tt> method does not implement the <tt>remove</tt> method
+ and this collection contains one or more elements in common with the
+ specified collection.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#removeAll(java.util.Collection)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elementsToRemove</CODE> - collection containing elements to be removed from this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the
+ call<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util"><CODE>AbstractCollection.remove(Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>AbstractCollection.contains(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="retainAll(java.util.Collection)"><!-- --></A><H3>
+retainAll</H3>
+<PRE>
+public boolean <B>retainAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Retains only the elements in this collection that are contained in the
+ specified collection (optional operation). In other words, removes from
+ this collection all of its elements that are not contained in the
+ specified collection.
+
+ <p>This implementation iterates over this collection, checking each
+ element returned by the iterator in turn to see if it's contained
+ in the specified collection. If it's not so contained, it's removed
+ from this collection with the iterator's <tt>remove</tt> method.
+
+ <p>Note that this implementation will throw an
+ <tt>UnsupportedOperationException</tt> if the iterator returned by the
+ <tt>iterator</tt> method does not implement the <tt>remove</tt> method
+ and this collection contains one or more elements not present in the
+ specified collection.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#retainAll(java.util.Collection)">retainAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>elementsToRetain</CODE> - collection containing elements to be retained in this collection
+<DT><B>Returns:</B><DD><tt>true</tt> if this collection changed as a result of the call<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util"><CODE>AbstractCollection.remove(Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>AbstractCollection.contains(Object)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clear()"><!-- --></A><H3>
+clear</H3>
+<PRE>
+public void <B>clear</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#clear()" title="class or interface in java.util">java.util.AbstractCollection</A></CODE></B></DD>
+<DD>Removes all of the elements from this collection (optional operation).
+ The collection will be empty after this method returns.
+
+ <p>This implementation iterates over this collection, removing each
+ element using the <tt>Iterator.remove</tt> operation. Most
+ implementations will probably choose to override this method for
+ efficiency.
+
+ <p>Note that this implementation will throw an
+ <tt>UnsupportedOperationException</tt> if the iterator returned by this
+ collection's <tt>iterator</tt> method does not implement the
+ <tt>remove</tt> method and this collection is non-empty.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD>Indicates whether some other object is "equal to" this one.
+ <p>
+ The <code>equals</code> method implements an equivalence relation
+ on non-null object references:
+ <ul>
+ <li>It is <i>reflexive</i>: for any non-null reference value
+ <code>x</code>, <code>x.equals(x)</code> should return
+ <code>true</code>.
+ <li>It is <i>symmetric</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, <code>x.equals(y)</code>
+ should return <code>true</code> if and only if
+ <code>y.equals(x)</code> returns <code>true</code>.
+ <li>It is <i>transitive</i>: for any non-null reference values
+ <code>x</code>, <code>y</code>, and <code>z</code>, if
+ <code>x.equals(y)</code> returns <code>true</code> and
+ <code>y.equals(z)</code> returns <code>true</code>, then
+ <code>x.equals(z)</code> should return <code>true</code>.
+ <li>It is <i>consistent</i>: for any non-null reference values
+ <code>x</code> and <code>y</code>, multiple invocations of
+ <tt>x.equals(y)</tt> consistently return <code>true</code>
+ or consistently return <code>false</code>, provided no
+ information used in <code>equals</code> comparisons on the
+ objects is modified.
+ <li>For any non-null reference value <code>x</code>,
+ <code>x.equals(null)</code> should return <code>false</code>.
+ </ul>
+ <p>
+ The <tt>equals</tt> method for class <code>Object</code> implements
+ the most discriminating possible equivalence relation on objects;
+ that is, for any non-null reference values <code>x</code> and
+ <code>y</code>, this method returns <code>true</code> if and only
+ if <code>x</code> and <code>y</code> refer to the same object
+ (<code>x == y</code> has the value <code>true</code>).
+ <p>
+ Note that it is generally necessary to override the <tt>hashCode</tt>
+ method whenever this method is overridden, so as to maintain the
+ general contract for the <tt>hashCode</tt> method, which states
+ that equal objects must have equal hash codes.
+
+ <p>This implementation returns <code>true</code> if <code>other</code> is a multiset
+ of the same size and if, for each element, the two multisets have the same
+ count.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - the reference object with which to compare.
+<DT><B>Returns:</B><DD><code>true</code> if this object is the same as the obj
+ argument; <code>false</code> otherwise.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+public int <B>hashCode</B>()</PRE>
+<DL>
+<DD>Returns a hash code value for the object. This method is
+ supported for the benefit of hashtables such as those provided by
+ <code>java.util.Hashtable</code>.
+ <p>
+ The general contract of <code>hashCode</code> is:
+ <ul>
+ <li>Whenever it is invoked on the same object more than once during
+ an execution of a Java application, the <tt>hashCode</tt> method
+ must consistently return the same integer, provided no information
+ used in <tt>equals</tt> comparisons on the object is modified.
+ This integer need not remain consistent from one execution of an
+ application to another execution of the same application.
+ <li>If two objects are equal according to the <tt>equals(Object)</tt>
+ method, then calling the <code>hashCode</code> method on each of
+ the two objects must produce the same integer result.
+ <li>It is <em>not</em> required that if two objects are unequal
+ according to the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>
+ method, then calling the <tt>hashCode</tt> method on each of the
+ two objects must produce distinct integer results. However, the
+ programmer should be aware that producing distinct integer results
+ for unequal objects may improve the performance of hashtables.
+ </ul>
+ <p>
+ As much as is reasonably practical, the hashCode method defined by
+ class <tt>Object</tt> does return distinct integers for distinct
+ objects. (This is typically implemented by converting the internal
+ address of the object into an integer, but this implementation
+ technique is not required by the
+ Java<font size="-2"><sup>TM</sup></font> programming language.)
+
+ <p>This implementation returns the hash code of <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a hash code value for this object.<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>,
+<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html?is-external=true" title="class or interface in java.util"><CODE>Hashtable</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Returns a string representation of this collection. The string
+ representation consists of a list of the collection's elements in the
+ order they are returned by its iterator, enclosed in square brackets
+ (<tt>"[]"</tt>). Adjacent elements are separated by the characters
+ <tt>", "</tt> (comma and space). Elements are converted to strings as
+ by <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true#valueOf(java.lang.Object)" title="class or interface in java.lang"><CODE>String.valueOf(Object)</CODE></A>.
+
+ <p>This implementation returns the result of invoking <code>toString</code> on
+ <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#toString()">toString</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toString()" title="class or interface in java.util">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a string representation of this collection</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TreeMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/TreeMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TreeMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/UnmodifiableIterator.html b/javadoc/com/google/common/collect/UnmodifiableIterator.html
new file mode 100644
index 0000000..afd0d25
--- /dev/null
+++ b/javadoc/com/google/common/collect/UnmodifiableIterator.html
@@ -0,0 +1,282 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+UnmodifiableIterator (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="UnmodifiableIterator (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/UnmodifiableIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/UnmodifiableIterator.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="UnmodifiableIterator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.common.collect</FONT>
+<BR>
+Class UnmodifiableIterator&lt;E&gt;</H2>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.UnmodifiableIterator&lt;E&gt;</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;</DD>
+</DL>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect">AbstractIterator</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public abstract class <B>UnmodifiableIterator&lt;E&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;</DL>
+</PRE>
+
+<P>
+An iterator that does not support <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html#remove()"><CODE>remove()</CODE></A>.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+ <DD>Jared Levy</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html#UnmodifiableIterator()">UnmodifiableIterator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html#remove()">remove</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the underlying data unmodified.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Iterator"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#hasNext()" title="class or interface in java.util">hasNext</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#next()" title="class or interface in java.util">next</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="UnmodifiableIterator()"><!-- --></A><H3>
+UnmodifiableIterator</H3>
+<PRE>
+public <B>UnmodifiableIterator</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="remove()"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public final void <B>remove</B>()</PRE>
+<DL>
+<DD>Guaranteed to throw an exception and leave the underlying data unmodified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#remove()" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;<A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="type parameter in UnmodifiableIterator">E</A>&gt;</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/UnmodifiableIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/UnmodifiableIterator.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="UnmodifiableIterator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/AbstractIterator.html b/javadoc/com/google/common/collect/class-use/AbstractIterator.html
new file mode 100644
index 0000000..2fcc332
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/AbstractIterator.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.AbstractIterator (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.AbstractIterator (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useAbstractIterator.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="AbstractIterator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.AbstractIterator</B></H2>
+</CENTER>
+No usage of com.google.common.collect.AbstractIterator
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useAbstractIterator.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="AbstractIterator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ArrayListMultimap.html b/javadoc/com/google/common/collect/class-use/ArrayListMultimap.html
new file mode 100644
index 0000000..402f4f5
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ArrayListMultimap.html
@@ -0,0 +1,222 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ArrayListMultimap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ArrayListMultimap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useArrayListMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ArrayListMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ArrayListMultimap</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ArrayListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html#create()">create</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>ArrayListMultimap</code> with the default initial
+ capacities.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ArrayListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html#create(int, int)">create</A></B>(int&nbsp;expectedKeys,
+ int&nbsp;expectedValuesPerKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an empty <code>ArrayListMultimap</code> with enough capacity to hold
+ the specified numbers of keys and values without resizing.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ArrayListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an <code>ArrayListMultimap</code> with the same mappings as the
+ specified multimap.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useArrayListMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ArrayListMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/AsynchronousComputationException.html b/javadoc/com/google/common/collect/class-use/AsynchronousComputationException.html
new file mode 100644
index 0000000..41786c7
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/AsynchronousComputationException.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.AsynchronousComputationException (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.AsynchronousComputationException (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useAsynchronousComputationException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="AsynchronousComputationException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.AsynchronousComputationException</B></H2>
+</CENTER>
+No usage of com.google.common.collect.AsynchronousComputationException
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useAsynchronousComputationException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="AsynchronousComputationException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/BiMap.html b/javadoc/com/google/common/collect/class-use/BiMap.html
new file mode 100644
index 0000000..3c699c8
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/BiMap.html
@@ -0,0 +1,291 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Interface com.google.common.collect.BiMap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Interface com.google.common.collect.BiMap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useBiMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="BiMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.google.common.collect.BiMap</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that implement <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap&lt;K extends Enum&lt;K&gt;,V extends Enum&lt;V&gt;&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>BiMap</code> backed by two <code>EnumMap</code> instances.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap&lt;K extends Enum&lt;K&gt;,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>BiMap</code> backed by an <code>EnumMap</code> instance for keys-to-values, and
+ a <code>HashMap</code> instance for values-to-keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> backed by two <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> instances.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> with reliable user-specified iteration order.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;<A HREF="../../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>,<A HREF="../../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>BiMap.</B><B><A HREF="../../../../../com/google/common/collect/BiMap.html#inverse()">inverse</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the inverse view of this bimap, which maps each of this bimap's
+ values to its associated key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Maps.</B><B><A HREF="../../../../../com/google/common/collect/Maps.html#synchronizedBiMap(com.google.common.collect.BiMap)">synchronizedBiMap</A></B>(<A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;&nbsp;bimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) bimap backed by the specified bimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Maps.</B><B><A HREF="../../../../../com/google/common/collect/Maps.html#unmodifiableBiMap(com.google.common.collect.BiMap)">unmodifiableBiMap</A></B>(<A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;? extends K,? extends V&gt;&nbsp;bimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified bimap.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with parameters of type <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Maps.</B><B><A HREF="../../../../../com/google/common/collect/Maps.html#synchronizedBiMap(com.google.common.collect.BiMap)">synchronizedBiMap</A></B>(<A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;&nbsp;bimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) bimap backed by the specified bimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Maps.</B><B><A HREF="../../../../../com/google/common/collect/Maps.html#unmodifiableBiMap(com.google.common.collect.BiMap)">unmodifiableBiMap</A></B>(<A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;? extends K,? extends V&gt;&nbsp;bimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified bimap.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useBiMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="BiMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ClassToInstanceMap.html b/javadoc/com/google/common/collect/class-use/ClassToInstanceMap.html
new file mode 100644
index 0000000..afe875b
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ClassToInstanceMap.html
@@ -0,0 +1,189 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Interface com.google.common.collect.ClassToInstanceMap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Interface com.google.common.collect.ClassToInstanceMap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useClassToInstanceMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ClassToInstanceMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.google.common.collect.ClassToInstanceMap</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that implement <A HREF="../../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap&lt;B&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A class-to-instance map backed by an <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><CODE>ImmutableMap</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap&lt;B&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A mutable class-to-instance map backed by an arbitrary user-provided map.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useClassToInstanceMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ClassToInstanceMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/Collections2.html b/javadoc/com/google/common/collect/class-use/Collections2.html
new file mode 100644
index 0000000..f5f53bf
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/Collections2.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.Collections2 (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.Collections2 (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/Collections2.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useCollections2.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Collections2.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.Collections2</B></H2>
+</CENTER>
+No usage of com.google.common.collect.Collections2
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/Collections2.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useCollections2.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Collections2.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ComputationException.html b/javadoc/com/google/common/collect/class-use/ComputationException.html
new file mode 100644
index 0000000..3098079
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ComputationException.html
@@ -0,0 +1,181 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ComputationException (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ComputationException (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useComputationException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ComputationException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ComputationException</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect">ComputationException</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect">ComputationException</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect">ComputationException</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect">AsynchronousComputationException</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wraps an exception that occured during a computation in a different thread.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useComputationException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ComputationException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ConcurrentHashMultiset.html b/javadoc/com/google/common/collect/class-use/ConcurrentHashMultiset.html
new file mode 100644
index 0000000..03781db
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ConcurrentHashMultiset.html
@@ -0,0 +1,206 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ConcurrentHashMultiset (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ConcurrentHashMultiset (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useConcurrentHashMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ConcurrentHashMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ConcurrentHashMultiset</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ConcurrentHashMultiset.</B><B><A HREF="../../../../../com/google/common/collect/ConcurrentHashMultiset.html#create()">create</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>ConcurrentHashMultiset</code> using the default
+ initial capacity, load factor, and concurrency settings.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ConcurrentHashMultiset.</B><B><A HREF="../../../../../com/google/common/collect/ConcurrentHashMultiset.html#create(java.lang.Iterable)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ConcurrentHashMultiset</code> containing the specified
+ elements, using the default initial capacity, load factor, and concurrency
+ settings.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useConcurrentHashMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ConcurrentHashMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/EnumBiMap.html b/javadoc/com/google/common/collect/class-use/EnumBiMap.html
new file mode 100644
index 0000000..92ad415
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/EnumBiMap.html
@@ -0,0 +1,209 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.EnumBiMap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.EnumBiMap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useEnumBiMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="EnumBiMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.EnumBiMap</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;V&gt;&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>EnumBiMap.</B><B><A HREF="../../../../../com/google/common/collect/EnumBiMap.html#create(java.lang.Class, java.lang.Class)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;K&gt;&nbsp;keyType,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;V&gt;&nbsp;valueType)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new, empty <code>EnumBiMap</code> using the specified key and value
+ types.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;V&gt;&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>EnumBiMap.</B><B><A HREF="../../../../../com/google/common/collect/EnumBiMap.html#create(java.util.Map)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new bimap with the same mappings as the specified map.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useEnumBiMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="EnumBiMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/EnumHashBiMap.html b/javadoc/com/google/common/collect/class-use/EnumHashBiMap.html
new file mode 100644
index 0000000..f79aaf3
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/EnumHashBiMap.html
@@ -0,0 +1,207 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.EnumHashBiMap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.EnumHashBiMap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useEnumHashBiMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="EnumHashBiMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.EnumHashBiMap</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>EnumHashBiMap.</B><B><A HREF="../../../../../com/google/common/collect/EnumHashBiMap.html#create(java.lang.Class)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;K&gt;&nbsp;keyType)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new, empty <code>EnumHashBiMap</code> using the specified key type.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>EnumHashBiMap.</B><B><A HREF="../../../../../com/google/common/collect/EnumHashBiMap.html#create(java.util.Map)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,? extends V&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new bimap with the same mappings as the specified map.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useEnumHashBiMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="EnumHashBiMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/EnumMultiset.html b/javadoc/com/google/common/collect/class-use/EnumMultiset.html
new file mode 100644
index 0000000..024e632
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/EnumMultiset.html
@@ -0,0 +1,207 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.EnumMultiset (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.EnumMultiset (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useEnumMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="EnumMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.EnumMultiset</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>EnumMultiset.</B><B><A HREF="../../../../../com/google/common/collect/EnumMultiset.html#create(java.lang.Class)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;E&gt;&nbsp;type)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an empty <code>EnumMultiset</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>EnumMultiset.</B><B><A HREF="../../../../../com/google/common/collect/EnumMultiset.html#create(java.lang.Iterable)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>EnumMultiset</code> containing the specified elements.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useEnumMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="EnumMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingCollection.html b/javadoc/com/google/common/collect/class-use/ForwardingCollection.html
new file mode 100644
index 0000000..edab98a
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ForwardingCollection.html
@@ -0,0 +1,213 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ForwardingCollection (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ForwardingCollection (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingCollection.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingCollection.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ForwardingCollection</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A list which forwards all its method calls to another list.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A multiset which forwards all its method calls to another multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect">ForwardingQueue&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A queue which forwards all its method calls to another queue.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A set which forwards all its method calls to another set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A sorted set which forwards all its method calls to another sorted set.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingCollection.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingCollection.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingConcurrentMap.html b/javadoc/com/google/common/collect/class-use/ForwardingConcurrentMap.html
new file mode 100644
index 0000000..5e4d84e
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ForwardingConcurrentMap.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ForwardingConcurrentMap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ForwardingConcurrentMap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingConcurrentMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingConcurrentMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ForwardingConcurrentMap</B></H2>
+</CENTER>
+No usage of com.google.common.collect.ForwardingConcurrentMap
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingConcurrentMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingConcurrentMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingIterator.html b/javadoc/com/google/common/collect/class-use/ForwardingIterator.html
new file mode 100644
index 0000000..e17a183
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ForwardingIterator.html
@@ -0,0 +1,182 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ForwardingIterator (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ForwardingIterator (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingIterator.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingIterator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ForwardingIterator</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A list iterator which forwards all its method calls to another list
+ iterator.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingIterator.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingIterator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingList.html b/javadoc/com/google/common/collect/class-use/ForwardingList.html
new file mode 100644
index 0000000..8a0cd1f
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ForwardingList.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ForwardingList (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ForwardingList (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingList.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingList.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ForwardingList</B></H2>
+</CENTER>
+No usage of com.google.common.collect.ForwardingList
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingList.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingList.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingListIterator.html b/javadoc/com/google/common/collect/class-use/ForwardingListIterator.html
new file mode 100644
index 0000000..61acfb4
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ForwardingListIterator.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ForwardingListIterator (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ForwardingListIterator (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingListIterator.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingListIterator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ForwardingListIterator</B></H2>
+</CENTER>
+No usage of com.google.common.collect.ForwardingListIterator
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingListIterator.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingListIterator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingMap.html b/javadoc/com/google/common/collect/class-use/ForwardingMap.html
new file mode 100644
index 0000000..97cac25
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ForwardingMap.html
@@ -0,0 +1,231 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ForwardingMap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ForwardingMap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ForwardingMap</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap&lt;K extends Enum&lt;K&gt;,V extends Enum&lt;V&gt;&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>BiMap</code> backed by two <code>EnumMap</code> instances.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap&lt;K extends Enum&lt;K&gt;,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>BiMap</code> backed by an <code>EnumMap</code> instance for keys-to-values, and
+ a <code>HashMap</code> instance for values-to-keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect">ForwardingConcurrentMap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concurrent map which forwards all its method calls to another concurrent
+ map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A sorted map which forwards all its method calls to another sorted map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> backed by two <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> instances.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap&lt;B&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A class-to-instance map backed by an <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><CODE>ImmutableMap</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap&lt;B&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A mutable class-to-instance map backed by an arbitrary user-provided map.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingMapEntry.html b/javadoc/com/google/common/collect/class-use/ForwardingMapEntry.html
new file mode 100644
index 0000000..ac612a0
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ForwardingMapEntry.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ForwardingMapEntry (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ForwardingMapEntry (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingMapEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingMapEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ForwardingMapEntry</B></H2>
+</CENTER>
+No usage of com.google.common.collect.ForwardingMapEntry
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingMapEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingMapEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingMultimap.html b/javadoc/com/google/common/collect/class-use/ForwardingMultimap.html
new file mode 100644
index 0000000..df6bb06
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ForwardingMultimap.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ForwardingMultimap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ForwardingMultimap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ForwardingMultimap</B></H2>
+</CENTER>
+No usage of com.google.common.collect.ForwardingMultimap
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingMultiset.html b/javadoc/com/google/common/collect/class-use/ForwardingMultiset.html
new file mode 100644
index 0000000..c1b9244
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ForwardingMultiset.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ForwardingMultiset (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ForwardingMultiset (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ForwardingMultiset</B></H2>
+</CENTER>
+No usage of com.google.common.collect.ForwardingMultiset
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingObject.html b/javadoc/com/google/common/collect/class-use/ForwardingObject.html
new file mode 100644
index 0000000..084781d
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ForwardingObject.html
@@ -0,0 +1,320 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ForwardingObject (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ForwardingObject (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingObject.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingObject.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ForwardingObject</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap&lt;K extends Enum&lt;K&gt;,V extends Enum&lt;V&gt;&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>BiMap</code> backed by two <code>EnumMap</code> instances.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap&lt;K extends Enum&lt;K&gt;,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>BiMap</code> backed by an <code>EnumMap</code> instance for keys-to-values, and
+ a <code>HashMap</code> instance for values-to-keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A collection which forwards all its method calls to another collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect">ForwardingConcurrentMap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concurrent map which forwards all its method calls to another concurrent
+ map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator&lt;T&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An iterator which forwards all its method calls to another iterator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A list which forwards all its method calls to another list.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A list iterator which forwards all its method calls to another list
+ iterator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A map which forwards all its method calls to another map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect">ForwardingMapEntry&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A map entry which forwards all its method calls to another map entry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A multimap which forwards all its method calls to another multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A multiset which forwards all its method calls to another multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect">ForwardingQueue&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A queue which forwards all its method calls to another queue.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A set which forwards all its method calls to another set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A sorted map which forwards all its method calls to another sorted map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A sorted set which forwards all its method calls to another sorted set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> backed by two <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> instances.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap&lt;B&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A class-to-instance map backed by an <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><CODE>ImmutableMap</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap&lt;B&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A mutable class-to-instance map backed by an arbitrary user-provided map.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingObject.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingObject.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingQueue.html b/javadoc/com/google/common/collect/class-use/ForwardingQueue.html
new file mode 100644
index 0000000..4a8e575
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ForwardingQueue.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ForwardingQueue (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ForwardingQueue (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingQueue.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingQueue.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ForwardingQueue</B></H2>
+</CENTER>
+No usage of com.google.common.collect.ForwardingQueue
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingQueue.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingQueue.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingSet.html b/javadoc/com/google/common/collect/class-use/ForwardingSet.html
new file mode 100644
index 0000000..8c349d5
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ForwardingSet.html
@@ -0,0 +1,181 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ForwardingSet (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ForwardingSet (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingSet.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingSet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ForwardingSet</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A sorted set which forwards all its method calls to another sorted set.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingSet.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingSet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingSortedMap.html b/javadoc/com/google/common/collect/class-use/ForwardingSortedMap.html
new file mode 100644
index 0000000..10d2c66
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ForwardingSortedMap.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ForwardingSortedMap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ForwardingSortedMap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingSortedMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingSortedMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ForwardingSortedMap</B></H2>
+</CENTER>
+No usage of com.google.common.collect.ForwardingSortedMap
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingSortedMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingSortedMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingSortedSet.html b/javadoc/com/google/common/collect/class-use/ForwardingSortedSet.html
new file mode 100644
index 0000000..51addb4
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ForwardingSortedSet.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ForwardingSortedSet (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ForwardingSortedSet (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingSortedSet.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingSortedSet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ForwardingSortedSet</B></H2>
+</CENTER>
+No usage of com.google.common.collect.ForwardingSortedSet
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingSortedSet.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForwardingSortedSet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/HashBiMap.html b/javadoc/com/google/common/collect/class-use/HashBiMap.html
new file mode 100644
index 0000000..d18991a
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/HashBiMap.html
@@ -0,0 +1,219 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.HashBiMap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.HashBiMap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useHashBiMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="HashBiMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.HashBiMap</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>HashBiMap.</B><B><A HREF="../../../../../com/google/common/collect/HashBiMap.html#create()">create</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new, empty <code>HashBiMap</code> with the default initial capacity
+ (16).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>HashBiMap.</B><B><A HREF="../../../../../com/google/common/collect/HashBiMap.html#create(int)">create</A></B>(int&nbsp;expectedSize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new, empty bimap with the specified expected size.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>HashBiMap.</B><B><A HREF="../../../../../com/google/common/collect/HashBiMap.html#create(java.util.Map)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new bimap containing initial values from <code>map</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useHashBiMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="HashBiMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/HashMultimap.html b/javadoc/com/google/common/collect/class-use/HashMultimap.html
new file mode 100644
index 0000000..4f352bc
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/HashMultimap.html
@@ -0,0 +1,222 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.HashMultimap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.HashMultimap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useHashMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="HashMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.HashMultimap</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>HashMultimap.</B><B><A HREF="../../../../../com/google/common/collect/HashMultimap.html#create()">create</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>HashMultimap</code> with the default initial
+ capacities.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>HashMultimap.</B><B><A HREF="../../../../../com/google/common/collect/HashMultimap.html#create(int, int)">create</A></B>(int&nbsp;expectedKeys,
+ int&nbsp;expectedValuesPerKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an empty <code>HashMultimap</code> with enough capacity to hold the
+ specified numbers of keys and values without rehashing.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>HashMultimap.</B><B><A HREF="../../../../../com/google/common/collect/HashMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a <code>HashMultimap</code> with the same mappings as the specified
+ multimap.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useHashMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="HashMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/HashMultiset.html b/javadoc/com/google/common/collect/class-use/HashMultiset.html
new file mode 100644
index 0000000..33e69a9
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/HashMultiset.html
@@ -0,0 +1,220 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.HashMultiset (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.HashMultiset (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useHashMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="HashMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.HashMultiset</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>HashMultiset.</B><B><A HREF="../../../../../com/google/common/collect/HashMultiset.html#create()">create</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>HashMultiset</code> using the default initial
+ capacity.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>HashMultiset.</B><B><A HREF="../../../../../com/google/common/collect/HashMultiset.html#create(int)">create</A></B>(int&nbsp;distinctElements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>HashMultiset</code> with the specified expected
+ number of distinct elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>HashMultiset.</B><B><A HREF="../../../../../com/google/common/collect/HashMultiset.html#create(java.lang.Iterable)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>HashMultiset</code> containing the specified elements.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useHashMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="HashMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableBiMap.Builder.html b/javadoc/com/google/common/collect/class-use/ImmutableBiMap.Builder.html
new file mode 100644
index 0000000..8a789d8
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ImmutableBiMap.Builder.html
@@ -0,0 +1,205 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ImmutableBiMap.Builder (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ImmutableBiMap.Builder (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableBiMap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableBiMap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ImmutableBiMap.Builder</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableBiMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html#builder()">builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableBiMap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html#put(K, V)">put</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates <code>key</code> with <code>value</code> in the built bimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableBiMap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,? extends <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates all of the given map's keys and values in the built bimap.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableBiMap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableBiMap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableBiMap.html b/javadoc/com/google/common/collect/class-use/ImmutableBiMap.html
new file mode 100644
index 0000000..92fc9bc
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ImmutableBiMap.html
@@ -0,0 +1,320 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ImmutableBiMap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ImmutableBiMap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableBiMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableBiMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ImmutableBiMap</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableBiMap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html#build()">build</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created immutable bimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableBiMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html#copyOf(java.util.Map)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable bimap containing the same entries as <code>map</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>,<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableBiMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html#inverse()">inverse</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the inverse view of this bimap, which maps each of this bimap's
+ values to its associated key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableBiMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html#of()">of</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty bimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableBiMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html#of(K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable bimap containing a single entry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableBiMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html#of(K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableBiMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html#of(K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableBiMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html#of(K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableBiMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html#of(K, V, K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4,
+ K&nbsp;k5,
+ V&nbsp;v5)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableBiMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableBiMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableClassToInstanceMap.Builder.html b/javadoc/com/google/common/collect/class-use/ImmutableClassToInstanceMap.Builder.html
new file mode 100644
index 0000000..b811227
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ImmutableClassToInstanceMap.Builder.html
@@ -0,0 +1,223 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ImmutableClassToInstanceMap.Builder (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ImmutableClassToInstanceMap.Builder (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableClassToInstanceMap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableClassToInstanceMap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ImmutableClassToInstanceMap.Builder</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;B&gt; <A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>&lt;B&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableClassToInstanceMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.html#builder()">builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T extends <A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableClassToInstanceMap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#put(java.lang.Class, T)">put</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type,
+ T&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates <code>key</code> with <code>value</code> in the built map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T extends <A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableClassToInstanceMap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends T&gt;,? extends T&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates all of <code>map's</code> keys and values in the built map.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableClassToInstanceMap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableClassToInstanceMap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableClassToInstanceMap.html b/javadoc/com/google/common/collect/class-use/ImmutableClassToInstanceMap.html
new file mode 100644
index 0000000..9fff5eb
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ImmutableClassToInstanceMap.html
@@ -0,0 +1,199 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ImmutableClassToInstanceMap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ImmutableClassToInstanceMap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableClassToInstanceMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableClassToInstanceMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ImmutableClassToInstanceMap</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableClassToInstanceMap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#build()">build</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new immutable class-to-instance map containing the entries
+ provided to this builder.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;B,S extends B&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>&lt;B&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableClassToInstanceMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.html#copyOf(java.util.Map)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends S&gt;,? extends S&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the same entries as <code>map</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableClassToInstanceMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableClassToInstanceMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableCollection.html b/javadoc/com/google/common/collect/class-use/ImmutableCollection.html
new file mode 100644
index 0000000..eb1fb4a
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ImmutableCollection.html
@@ -0,0 +1,272 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ImmutableCollection (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ImmutableCollection (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableCollection.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableCollection.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ImmutableCollection</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A high-performance, immutable, random-access <code>List</code> implementation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable hash-based multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A high-performance, immutable <code>Set</code> with reliable, user-specified
+ iteration order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <code>SortedSet</code> that stores its elements in a sorted array.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#entries()">entries</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable collection of all key-value pairs in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#get(K)">get</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable collection of the values for the given key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.html#values()">values</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable collection of the values in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#values()">values</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable collection of the values in this map, sorted by the
+ ordering of the corresponding keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#values()">values</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable collection of the values in this multimap.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableCollection.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableCollection.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableList.Builder.html b/javadoc/com/google/common/collect/class-use/ImmutableList.Builder.html
new file mode 100644
index 0000000..f7799b3
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ImmutableList.Builder.html
@@ -0,0 +1,220 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ImmutableList.Builder (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ImmutableList.Builder (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableList.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableList.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ImmutableList.Builder</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableList.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html#add(E...)">add</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>...&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableList</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableList.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html#add(E)">add</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds <code>element</code> to the <code>ImmutableList</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableList.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html#addAll(java.lang.Iterable)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableList</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableList.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html#addAll(java.util.Iterator)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableList</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#builder()">builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableList.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableList.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableList.html b/javadoc/com/google/common/collect/class-use/ImmutableList.html
new file mode 100644
index 0000000..6595f3f
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ImmutableList.html
@@ -0,0 +1,496 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ImmutableList (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ImmutableList (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableList.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableList.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ImmutableList</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableList.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html#build()">build</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created <code>ImmutableList</code> based on the contents of
+ the <code>Builder</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#copyOf(java.lang.Iterable)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable list containing the given elements, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#copyOf(java.util.Iterator)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable list containing the given elements, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html#get(K)">get</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable list of the values for the given key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#of()">of</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty immutable list.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E...)">of</A></B>(E...&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable list containing the given elements, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E)">of</A></B>(E&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable list containing a single element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5,
+ E&nbsp;e6)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5,
+ E&nbsp;e6,
+ E&nbsp;e7)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5,
+ E&nbsp;e6,
+ E&nbsp;e7,
+ E&nbsp;e8)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5,
+ E&nbsp;e6,
+ E&nbsp;e7,
+ E&nbsp;e8,
+ E&nbsp;e9)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E, E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5,
+ E&nbsp;e6,
+ E&nbsp;e7,
+ E&nbsp;e8,
+ E&nbsp;e9,
+ E&nbsp;e10)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E, E, E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5,
+ E&nbsp;e6,
+ E&nbsp;e7,
+ E&nbsp;e8,
+ E&nbsp;e9,
+ E&nbsp;e10,
+ E&nbsp;e11)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#subList(int, int)">subList</A></B>(int&nbsp;fromIndex,
+ int&nbsp;toIndex)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable list of the elements between the specified <code>fromIndex</code>, inclusive, and <code>toIndex</code>, exclusive.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableList.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableList.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableListMultimap.Builder.html b/javadoc/com/google/common/collect/class-use/ImmutableListMultimap.Builder.html
new file mode 100644
index 0000000..b80865d
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ImmutableListMultimap.Builder.html
@@ -0,0 +1,223 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ImmutableListMultimap.Builder (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ImmutableListMultimap.Builder (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableListMultimap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableListMultimap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ImmutableListMultimap.Builder</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html#builder()">builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableListMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html#put(K, V)">put</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a key-value mapping to the built multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableListMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html#putAll(K, java.lang.Iterable)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key in the built multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableListMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html#putAll(K, V...)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>...&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores an array of values with the same key in the built multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableListMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,? extends <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores another multimap's entries in the built multimap.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableListMultimap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableListMultimap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableListMultimap.html b/javadoc/com/google/common/collect/class-use/ImmutableListMultimap.html
new file mode 100644
index 0000000..ced7a95
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ImmutableListMultimap.html
@@ -0,0 +1,330 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ImmutableListMultimap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ImmutableListMultimap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableListMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableListMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ImmutableListMultimap</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableListMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html#build()">build</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created immutable multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html#copyOf(com.google.common.collect.Multimap)">copyOf</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the same mappings as
+ <code>multimap</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#index(java.lang.Iterable, com.google.common.base.Function)">index</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;V&gt;&nbsp;values,
+ <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V,K&gt;&nbsp;keyFunction)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an index <code>ImmutableMultimap</code> that contains the results of
+ applying a specified function to each item in an <code>Iterable</code> of
+ values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html#of()">of</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html#of(K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing a single entry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html#of(K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html#of(K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html#of(K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html#of(K, V, K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4,
+ K&nbsp;k5,
+ V&nbsp;v5)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableListMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableListMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableMap.Builder.html b/javadoc/com/google/common/collect/class-use/ImmutableMap.Builder.html
new file mode 100644
index 0000000..c1bc161
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ImmutableMap.Builder.html
@@ -0,0 +1,230 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ImmutableMap.Builder (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ImmutableMap.Builder (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableMap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableMap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ImmutableMap.Builder</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable bimap instances, especially <code>public
+ static final</code> bimaps ("constant bimaps").</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable sorted map instances, especially <code>public static final</code> maps ("constant maps").</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.html#builder()">builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html#put(K, V)">put</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates <code>key</code> with <code>value</code> in the built map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,? extends <A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates all of the given map's keys and values in the built map.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableMap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableMap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableMap.html b/javadoc/com/google/common/collect/class-use/ImmutableMap.html
new file mode 100644
index 0000000..d43badd
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ImmutableMap.html
@@ -0,0 +1,371 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ImmutableMap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ImmutableMap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ImmutableMap</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> with reliable user-specified iteration order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util"><CODE>SortedMap</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#asMap()">asMap</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map that associates each key with its corresponding
+ values in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html#build()">build</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created immutable map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.html#copyOf(java.util.Map)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the same entries as <code>map</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>Maps.</B><B><A HREF="../../../../../com/google/common/collect/Maps.html#fromProperties(java.util.Properties)">fromProperties</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Properties.html?is-external=true" title="class or interface in java.util">Properties</A>&nbsp;properties)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an <code>ImmutableMap&lt;String, String&gt;</code> from a <code>Properties</code>
+ instance.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.html#of()">of</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.html#of(K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing a single entry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.html#of(K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.html#of(K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.html#of(K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.html#of(K, V, K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4,
+ K&nbsp;k5,
+ V&nbsp;v5)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Maps.</B><B><A HREF="../../../../../com/google/common/collect/Maps.html#uniqueIndex(java.lang.Iterable, com.google.common.base.Function)">uniqueIndex</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;V&gt;&nbsp;values,
+ <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V,K&gt;&nbsp;keyFunction)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map for which the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util"><CODE>Map.values()</CODE></A> are the given
+ elements in the given order, and each key is the product of invoking a
+ supplied function on its corresponding value.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableMultimap.Builder.html b/javadoc/com/google/common/collect/class-use/ImmutableMultimap.Builder.html
new file mode 100644
index 0000000..70ec08f
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ImmutableMultimap.Builder.html
@@ -0,0 +1,249 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ImmutableMultimap.Builder (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ImmutableMultimap.Builder (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableMultimap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableMultimap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ImmutableMultimap.Builder</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable <code>ListMultimap</code> instances, especially
+ <code>public static final</code> multimaps ("constant multimaps").</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable <code>SetMultimap</code> instances, especially
+ <code>public static final</code> multimaps ("constant multimaps").</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#builder()">builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html#put(K, V)">put</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a key-value mapping to the built multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html#putAll(K, java.lang.Iterable)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key in the built multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html#putAll(K, V...)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>...&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores an array of values with the same key in the built multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,? extends <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores another multimap's entries in the built multimap.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableMultimap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableMultimap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableMultimap.html b/javadoc/com/google/common/collect/class-use/ImmutableMultimap.html
new file mode 100644
index 0000000..4edab81
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ImmutableMultimap.html
@@ -0,0 +1,338 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ImmutableMultimap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ImmutableMultimap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ImmutableMultimap</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A> with reliable user-specified key and value
+ iteration order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A> with reliable user-specified key and value
+ iteration order.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html#build()">build</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created immutable multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#copyOf(com.google.common.collect.Multimap)">copyOf</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the same mappings as
+ <code>multimap</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#of()">of</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an empty multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#of(K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing a single entry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#of(K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#of(K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#of(K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#of(K, V, K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4,
+ K&nbsp;k5,
+ V&nbsp;v5)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableMultiset.Builder.html b/javadoc/com/google/common/collect/class-use/ImmutableMultiset.Builder.html
new file mode 100644
index 0000000..3c7f667
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ImmutableMultiset.Builder.html
@@ -0,0 +1,239 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ImmutableMultiset.Builder (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ImmutableMultiset.Builder (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableMultiset.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableMultiset.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ImmutableMultiset.Builder</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultiset.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html#add(E...)">add</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>...&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultiset.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html#add(E)">add</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds <code>element</code> to the <code>ImmutableMultiset</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultiset.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html#addAll(java.lang.Iterable)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultiset.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html#addAll(java.util.Iterator)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultiset.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html#addCopies(E, int)">addCopies</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&nbsp;element,
+ int&nbsp;occurrences)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a number of occurrences of an element to this <code>ImmutableMultiset</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultiset.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html#builder()">builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultiset.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html#setCount(E, int)">setCount</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&nbsp;element,
+ int&nbsp;count)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds or removes the necessary occurrences of an element such that the
+ element attains the desired count.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableMultiset.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableMultiset.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableMultiset.html b/javadoc/com/google/common/collect/class-use/ImmutableMultiset.html
new file mode 100644
index 0000000..003f463
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ImmutableMultiset.html
@@ -0,0 +1,250 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ImmutableMultiset (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ImmutableMultiset (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ImmutableMultiset</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultiset.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html#build()">build</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created <code>ImmutableMultiset</code> based on the contents
+ of the <code>Builder</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultiset.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html#copyOf(java.lang.Iterable)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multiset containing the given elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultiset.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html#copyOf(java.util.Iterator)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multiset containing the given elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#keys()">keys</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection, which may contain duplicates, of all keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultiset.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html#of()">of</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty immutable multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultiset.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html#of(E...)">of</A></B>(E...&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multiset containing the given elements.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableSet.Builder.html b/javadoc/com/google/common/collect/class-use/ImmutableSet.Builder.html
new file mode 100644
index 0000000..ca89d9d
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ImmutableSet.Builder.html
@@ -0,0 +1,241 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ImmutableSet.Builder (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ImmutableSet.Builder (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSet.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSet.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ImmutableSet.Builder</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable sorted set instances, especially
+ <code>public static final</code> sets ("constant sets"), with a given
+ comparator.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSet.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html#add(E...)">add</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>...&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableSet</code>,
+ ignoring duplicate elements (only the first duplicate element is added).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSet.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html#add(E)">add</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds <code>element</code> to the <code>ImmutableSet</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSet.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html#addAll(java.lang.Iterable)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableSet</code>,
+ ignoring duplicate elements (only the first duplicate element is added).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSet.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html#addAll(java.util.Iterator)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableSet</code>,
+ ignoring duplicate elements (only the first duplicate element is added).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.html#builder()">builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSet.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSet.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableSet.html b/javadoc/com/google/common/collect/class-use/ImmutableSet.html
new file mode 100644
index 0000000..b2f083a
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ImmutableSet.html
@@ -0,0 +1,476 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ImmutableSet (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ImmutableSet (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSet.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ImmutableSet</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <code>SortedSet</code> that stores its elements in a sorted array.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSet.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html#build()">build</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created <code>ImmutableSet</code> based on the contents of
+ the <code>Builder</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.html#copyOf(java.lang.Iterable)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.html#copyOf(java.util.Iterator)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSetMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html#entries()">entries</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable collection of all key-value pairs in the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.html#entrySet()">entrySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the mappings in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableBiMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html#entrySet()">entrySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#entrySet()">entrySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the mappings in this map, sorted by the key
+ ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSetMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html#get(K)">get</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the values for the given key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../../com/google/common/collect/Sets.SetView.html" title="type parameter in Sets.SetView">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>Sets.SetView.</B><B><A HREF="../../../../../com/google/common/collect/Sets.SetView.html#immutableCopy()">immutableCopy</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable copy of the current contents of this set view.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Sets.</B><B><A HREF="../../../../../com/google/common/collect/Sets.html#immutableEnumSet(E, E...)">immutableEnumSet</A></B>(E&nbsp;anElement,
+ E...&nbsp;otherElements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set instance containing the given enum elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Sets.</B><B><A HREF="../../../../../com/google/common/collect/Sets.html#immutableEnumSet(java.lang.Iterable)">immutableEnumSet</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set instance containing the given enum elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.html#keySet()">keySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the keys in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableBiMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html#keySet()">keySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#keySet()">keySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the distinct keys in this multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.html#of()">of</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty immutable set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.html#of(E...)">of</A></B>(E...&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.html#of(E)">of</A></B>(E&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing a single element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.html#of(E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.html#of(E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.html#of(E, E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.html#of(E, E, E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSetMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSetMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableBiMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html#values()">values</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the values in this map.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSet.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableSetMultimap.Builder.html b/javadoc/com/google/common/collect/class-use/ImmutableSetMultimap.Builder.html
new file mode 100644
index 0000000..800d18f
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ImmutableSetMultimap.Builder.html
@@ -0,0 +1,224 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ImmutableSetMultimap.Builder (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ImmutableSetMultimap.Builder (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSetMultimap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSetMultimap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ImmutableSetMultimap.Builder</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSetMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html#builder()">builder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableSetMultimap.Builder</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSetMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html#put(K, V)">put</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a key-value mapping to the built multimap if it is not already
+ present.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSetMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html#putAll(K, java.lang.Iterable)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key in the built multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSetMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html#putAll(K, V...)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>...&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores an array of values with the same key in the built multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSetMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,? extends <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores another multimap's entries in the built multimap.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSetMultimap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSetMultimap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableSetMultimap.html b/javadoc/com/google/common/collect/class-use/ImmutableSetMultimap.html
new file mode 100644
index 0000000..fc1f0a8
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ImmutableSetMultimap.html
@@ -0,0 +1,312 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ImmutableSetMultimap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ImmutableSetMultimap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSetMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSetMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ImmutableSetMultimap</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSetMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html#build()">build</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created immutable set multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSetMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html#copyOf(com.google.common.collect.Multimap)">copyOf</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set multimap containing the same mappings as
+ <code>multimap</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSetMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html#of()">of</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSetMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html#of(K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing a single entry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSetMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html#of(K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSetMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html#of(K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSetMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html#of(K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSetMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html#of(K, V, K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4,
+ K&nbsp;k5,
+ V&nbsp;v5)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSetMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSetMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableSortedMap.Builder.html b/javadoc/com/google/common/collect/class-use/ImmutableSortedMap.Builder.html
new file mode 100644
index 0000000..3944827
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ImmutableSortedMap.Builder.html
@@ -0,0 +1,242 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ImmutableSortedMap.Builder (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ImmutableSortedMap.Builder (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSortedMap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSortedMap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ImmutableSortedMap.Builder</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;K&gt;,V&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#naturalOrder()">naturalOrder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a builder that creates immutable sorted maps whose keys are
+ ordered by their natural ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#orderedBy(java.util.Comparator)">orderedBy</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;K&gt;&nbsp;comparator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a builder that creates immutable sorted maps with an explicit
+ comparator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedMap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html#put(K, V)">put</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>&nbsp;key,
+ <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates <code>key</code> with <code>value</code> in the built map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedMap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,? extends <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates all of the given map's keys and values in the built map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;K&gt;,V&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#reverseOrder()">reverseOrder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a builder that creates immutable sorted maps whose keys are
+ ordered by the reverse of their natural ordering.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSortedMap.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSortedMap.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableSortedMap.html b/javadoc/com/google/common/collect/class-use/ImmutableSortedMap.html
new file mode 100644
index 0000000..cc5866a
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ImmutableSortedMap.html
@@ -0,0 +1,388 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ImmutableSortedMap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ImmutableSortedMap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSortedMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSortedMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ImmutableSortedMap</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedMap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html#build()">build</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created immutable sorted map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#copyOf(java.util.Map)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the same entries as <code>map</code>, sorted
+ by the natural ordering of the keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#copyOf(java.util.Map, java.util.Comparator)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super K&gt;&nbsp;comparator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the same entries as <code>map</code>, with
+ keys sorted by the provided comparator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#copyOfSorted(java.util.SortedMap)">copyOfSorted</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;K,? extends V&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the same entries as the provided sorted
+ map, with the same ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#headMap(K)">headMap</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&nbsp;toKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method returns a <code>ImmutableSortedMap</code>, consisting of the entries
+ whose keys are less than <code>toKey</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#of()">of</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty sorted map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#of(K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing a single entry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#of(K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted map containing the given entries, sorted by the
+ natural ordering of their keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#of(K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted map containing the given entries, sorted by the
+ natural ordering of their keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#of(K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted map containing the given entries, sorted by the
+ natural ordering of their keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#of(K, V, K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
+ V&nbsp;v1,
+ K&nbsp;k2,
+ V&nbsp;v2,
+ K&nbsp;k3,
+ V&nbsp;v3,
+ K&nbsp;k4,
+ V&nbsp;v4,
+ K&nbsp;k5,
+ V&nbsp;v5)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted map containing the given entries, sorted by the
+ natural ordering of their keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#subMap(K, K)">subMap</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&nbsp;fromKey,
+ <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&nbsp;toKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method returns a <code>ImmutableSortedMap</code>, consisting of the entries
+ whose keys ranges from <code>fromKey</code>, inclusive, to <code>toKey</code>,
+ exclusive.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#tailMap(K)">tailMap</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&nbsp;fromKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method returns a <code>ImmutableSortedMap</code>, consisting of the entries
+ whose keys are greater than or equals to <code>fromKey</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSortedMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSortedMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableSortedSet.Builder.html b/javadoc/com/google/common/collect/class-use/ImmutableSortedSet.Builder.html
new file mode 100644
index 0000000..2fd9bdf
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ImmutableSortedSet.Builder.html
@@ -0,0 +1,260 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ImmutableSortedSet.Builder (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ImmutableSortedSet.Builder (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSortedSet.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSortedSet.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ImmutableSortedSet.Builder</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedSet.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html#add(E...)">add</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>...&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableSortedSet</code>,
+ ignoring duplicate elements (only the first duplicate element is added).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedSet.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html#add(E)">add</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds <code>element</code> to the <code>ImmutableSortedSet</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedSet.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html#addAll(java.lang.Iterable)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableSortedSet</code>,
+ ignoring duplicate elements (only the first duplicate element is added).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedSet.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html#addAll(java.util.Iterator)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableSortedSet</code>,
+ ignoring duplicate elements (only the first duplicate element is added).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;E&gt;&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#naturalOrder()">naturalOrder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a builder that creates immutable sorted sets whose elements are
+ ordered by their natural ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#orderedBy(java.util.Comparator)">orderedBy</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;E&gt;&nbsp;comparator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a builder that creates immutable sorted sets with an explicit
+ comparator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;E&gt;&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#reverseOrder()">reverseOrder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a builder that creates immutable sorted sets whose elements are
+ ordered by the reverse of their natural ordering.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSortedSet.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSortedSet.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableSortedSet.html b/javadoc/com/google/common/collect/class-use/ImmutableSortedSet.html
new file mode 100644
index 0000000..16e8365
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ImmutableSortedSet.html
@@ -0,0 +1,433 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ImmutableSortedSet (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ImmutableSortedSet (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSortedSet.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSortedSet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ImmutableSortedSet</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedSet.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html#build()">build</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created <code>ImmutableSortedSet</code> based on the contents
+ of the <code>Builder</code> and its comparator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#copyOf(java.util.Comparator, java.lang.Iterable)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super E&gt;&nbsp;comparator,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
+ the given <code>Comparator</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#copyOf(java.util.Comparator, java.util.Iterator)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super E&gt;&nbsp;comparator,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
+ the given <code>Comparator</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#copyOf(java.lang.Iterable)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#copyOf(java.util.Iterator)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#copyOfSorted(java.util.SortedSet)">copyOfSorted</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;E&gt;&nbsp;sortedSet)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the elements of a sorted set,
+ sorted by the same <code>Comparator</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#headSet(E)">headSet</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&nbsp;toElement)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this set whose elements are
+ strictly less than <tt>toElement</tt>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#keySet()">keySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set of the keys in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#of()">of</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty immutable sorted set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#of(E...)">of</A></B>(E...&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#of(E)">of</A></B>(E&nbsp;element)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing a single element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#of(E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#of(E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#of(E, E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#of(E, E, E, E, E)">of</A></B>(E&nbsp;e1,
+ E&nbsp;e2,
+ E&nbsp;e3,
+ E&nbsp;e4,
+ E&nbsp;e5)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#subSet(E, E)">subSet</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&nbsp;fromElement,
+ <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&nbsp;toElement)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this set whose elements range
+ from <tt>fromElement</tt>, inclusive, to <tt>toElement</tt>,
+ exclusive.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#tailSet(E)">tailSet</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&nbsp;fromElement)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this set whose elements are
+ greater than or equal to <tt>fromElement</tt>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSortedSet.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ImmutableSortedSet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/Iterables.html b/javadoc/com/google/common/collect/class-use/Iterables.html
new file mode 100644
index 0000000..9bae082
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/Iterables.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.Iterables (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.Iterables (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/Iterables.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useIterables.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Iterables.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.Iterables</B></H2>
+</CENTER>
+No usage of com.google.common.collect.Iterables
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/Iterables.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useIterables.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Iterables.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/Iterators.html b/javadoc/com/google/common/collect/class-use/Iterators.html
new file mode 100644
index 0000000..b8b5ed7
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/Iterators.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.Iterators (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.Iterators (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/Iterators.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useIterators.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Iterators.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.Iterators</B></H2>
+</CENTER>
+No usage of com.google.common.collect.Iterators
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/Iterators.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useIterators.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Iterators.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/LinkedHashMultimap.html b/javadoc/com/google/common/collect/class-use/LinkedHashMultimap.html
new file mode 100644
index 0000000..63b3061
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/LinkedHashMultimap.html
@@ -0,0 +1,222 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.LinkedHashMultimap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.LinkedHashMultimap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useLinkedHashMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="LinkedHashMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.LinkedHashMultimap</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>LinkedHashMultimap.</B><B><A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html#create()">create</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>LinkedHashMultimap</code> with the default initial
+ capacities.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>LinkedHashMultimap.</B><B><A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html#create(int, int)">create</A></B>(int&nbsp;expectedKeys,
+ int&nbsp;expectedValuesPerKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an empty <code>LinkedHashMultimap</code> with enough capacity to hold
+ the specified numbers of keys and values without rehashing.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>LinkedHashMultimap.</B><B><A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a <code>LinkedHashMultimap</code> with the same mappings as the
+ specified multimap.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useLinkedHashMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="LinkedHashMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/LinkedHashMultiset.html b/javadoc/com/google/common/collect/class-use/LinkedHashMultiset.html
new file mode 100644
index 0000000..abba2d4
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/LinkedHashMultiset.html
@@ -0,0 +1,220 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.LinkedHashMultiset (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.LinkedHashMultiset (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useLinkedHashMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="LinkedHashMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.LinkedHashMultiset</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>LinkedHashMultiset.</B><B><A HREF="../../../../../com/google/common/collect/LinkedHashMultiset.html#create()">create</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>LinkedHashMultiset</code> using the default initial
+ capacity.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>LinkedHashMultiset.</B><B><A HREF="../../../../../com/google/common/collect/LinkedHashMultiset.html#create(int)">create</A></B>(int&nbsp;distinctElements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>LinkedHashMultiset</code> with the specified expected
+ number of distinct elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>LinkedHashMultiset.</B><B><A HREF="../../../../../com/google/common/collect/LinkedHashMultiset.html#create(java.lang.Iterable)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>LinkedHashMultiset</code> containing the specified elements.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useLinkedHashMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="LinkedHashMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/LinkedListMultimap.html b/javadoc/com/google/common/collect/class-use/LinkedListMultimap.html
new file mode 100644
index 0000000..b741866
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/LinkedListMultimap.html
@@ -0,0 +1,221 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.LinkedListMultimap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.LinkedListMultimap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useLinkedListMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="LinkedListMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.LinkedListMultimap</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>LinkedListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html#create()">create</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>LinkedListMultimap</code> with the default initial
+ capacity.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>LinkedListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html#create(int)">create</A></B>(int&nbsp;expectedKeys)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an empty <code>LinkedListMultimap</code> with enough capacity to hold
+ the specified number of keys without rehashing.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>LinkedListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a <code>LinkedListMultimap</code> with the same mappings as the
+ specified <code>Multimap</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useLinkedListMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="LinkedListMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ListMultimap.html b/javadoc/com/google/common/collect/class-use/ListMultimap.html
new file mode 100644
index 0000000..28a41c3
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ListMultimap.html
@@ -0,0 +1,294 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Interface com.google.common.collect.ListMultimap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Interface com.google.common.collect.ListMultimap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useListMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ListMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.google.common.collect.ListMultimap</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that implement <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <code>Multimap</code> that uses an <code>ArrayList</code> to store
+ the values for a given key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A> with reliable user-specified key and value
+ iteration order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An implementation of <code>ListMultimap</code> that supports deterministic
+ iteration order for both keys and values.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#newListMultimap(java.util.Map, com.google.common.base.Supplier)">newListMultimap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
+ <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ListMultimap</code> that uses the provided map and factory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#synchronizedListMultimap(com.google.common.collect.ListMultimap)">synchronizedListMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) <code>ListMultimap</code> backed by the
+ specified multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#unmodifiableListMultimap(com.google.common.collect.ListMultimap)">unmodifiableListMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified <code>ListMultimap</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with parameters of type <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#synchronizedListMultimap(com.google.common.collect.ListMultimap)">synchronizedListMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) <code>ListMultimap</code> backed by the
+ specified multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#unmodifiableListMultimap(com.google.common.collect.ListMultimap)">unmodifiableListMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified <code>ListMultimap</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useListMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ListMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/Lists.html b/javadoc/com/google/common/collect/class-use/Lists.html
new file mode 100644
index 0000000..e346eda
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/Lists.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.Lists (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.Lists (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/Lists.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useLists.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Lists.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.Lists</B></H2>
+</CENTER>
+No usage of com.google.common.collect.Lists
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/Lists.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useLists.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Lists.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/MapDifference.ValueDifference.html b/javadoc/com/google/common/collect/class-use/MapDifference.ValueDifference.html
new file mode 100644
index 0000000..8571a8a
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/MapDifference.ValueDifference.html
@@ -0,0 +1,182 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Interface com.google.common.collect.MapDifference.ValueDifference (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Interface com.google.common.collect.MapDifference.ValueDifference (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useMapDifference.ValueDifference.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MapDifference.ValueDifference.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.google.common.collect.MapDifference.ValueDifference</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect">MapDifference.ValueDifference</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect">MapDifference.ValueDifference</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return types with arguments of type <A HREF="../../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect">MapDifference.ValueDifference</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">K</A>,<A HREF="../../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect">MapDifference.ValueDifference</A>&lt;<A HREF="../../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">V</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B>MapDifference.</B><B><A HREF="../../../../../com/google/common/collect/MapDifference.html#entriesDiffering()">entriesDiffering</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable map describing keys that appear in both maps, but
+ with different values.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useMapDifference.ValueDifference.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MapDifference.ValueDifference.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/MapDifference.html b/javadoc/com/google/common/collect/class-use/MapDifference.html
new file mode 100644
index 0000000..2863517
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/MapDifference.html
@@ -0,0 +1,189 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Interface com.google.common.collect.MapDifference (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Interface com.google.common.collect.MapDifference (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useMapDifference.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MapDifference.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.google.common.collect.MapDifference</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Maps.</B><B><A HREF="../../../../../com/google/common/collect/Maps.html#difference(java.util.Map, java.util.Map)">difference</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;left,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;right)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Computes the difference between two maps.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useMapDifference.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MapDifference.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/MapMaker.html b/javadoc/com/google/common/collect/class-use/MapMaker.html
new file mode 100644
index 0000000..fef2329
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/MapMaker.html
@@ -0,0 +1,239 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.MapMaker (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.MapMaker (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useMapMaker.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MapMaker.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.MapMaker</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
+<TD><CODE><B>MapMaker.</B><B><A HREF="../../../../../com/google/common/collect/MapMaker.html#concurrencyLevel(int)">concurrencyLevel</A></B>(int&nbsp;concurrencyLevel)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guides the allowed concurrency among update operations.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
+<TD><CODE><B>MapMaker.</B><B><A HREF="../../../../../com/google/common/collect/MapMaker.html#expiration(long, java.util.concurrent.TimeUnit)">expiration</A></B>(long&nbsp;duration,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;unit)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each entry should be automatically removed from the
+ map once a fixed duration has passed since the entry's creation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
+<TD><CODE><B>MapMaker.</B><B><A HREF="../../../../../com/google/common/collect/MapMaker.html#initialCapacity(int)">initialCapacity</A></B>(int&nbsp;initialCapacity)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets a custom initial capacity (defaults to 16).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
+<TD><CODE><B>MapMaker.</B><B><A HREF="../../../../../com/google/common/collect/MapMaker.html#softKeys()">softKeys</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each key (not value) stored in the map should be
+ wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>SoftReference</CODE></A> (by default, strong references
+ are used).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
+<TD><CODE><B>MapMaker.</B><B><A HREF="../../../../../com/google/common/collect/MapMaker.html#softValues()">softValues</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each value (not key) stored in the map should be
+ wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>SoftReference</CODE></A> (by default, strong references
+ are used).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
+<TD><CODE><B>MapMaker.</B><B><A HREF="../../../../../com/google/common/collect/MapMaker.html#weakKeys()">weakKeys</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each key (not value) stored in the map should be
+ wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>WeakReference</CODE></A> (by default, strong references
+ are used).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
+<TD><CODE><B>MapMaker.</B><B><A HREF="../../../../../com/google/common/collect/MapMaker.html#weakValues()">weakValues</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each value (not key) stored in the map should be
+ wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>WeakReference</CODE></A> (by default, strong references
+ are used).</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useMapMaker.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MapMaker.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/Maps.html b/javadoc/com/google/common/collect/class-use/Maps.html
new file mode 100644
index 0000000..4f932c9
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/Maps.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.Maps (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.Maps (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/Maps.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useMaps.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Maps.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.Maps</B></H2>
+</CENTER>
+No usage of com.google.common.collect.Maps
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/Maps.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useMaps.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Maps.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/Multimap.html b/javadoc/com/google/common/collect/class-use/Multimap.html
new file mode 100644
index 0000000..e840345
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/Multimap.html
@@ -0,0 +1,620 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Interface com.google.common.collect.Multimap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Interface com.google.common.collect.Multimap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Multimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.google.common.collect.Multimap</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Subinterfaces of <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;interface</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>Multimap</code> that can hold duplicate key-value pairs and that maintains
+ the insertion ordering of values for a given key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;interface</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>Multimap</code> that cannot hold duplicate key-value pairs.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;interface</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>SetMultimap</code> whose set of values for a given key are kept sorted;
+ that is, they comprise a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that implement <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <code>Multimap</code> that uses an <code>ArrayList</code> to store
+ the values for a given key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A multimap which forwards all its method calls to another multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> using hash tables.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A> with reliable user-specified key and value
+ iteration order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A> with reliable user-specified key and value
+ iteration order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <code>Multimap</code> that does not allow duplicate key-value
+ entries and that returns collections whose iterators follow the ordering in
+ which the data was added to the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An implementation of <code>ListMultimap</code> that supports deterministic
+ iteration order for both keys and values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <code>Multimap</code> whose keys and values are ordered by
+ their natural ordering or by supplied comparators.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with type parameters of type <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V,M extends <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&gt;
+<BR>
+M</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#invertFrom(com.google.common.collect.Multimap, M)">invertFrom</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends V,? extends K&gt;&nbsp;source,
+ M&nbsp;dest)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies each key-value mapping in <code>source</code> into <code>dest</code>, with
+ its key and value reversed.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected abstract &nbsp;<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ForwardingMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ForwardingMultimap.html#delegate()">delegate</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#newMultimap(java.util.Map, com.google.common.base.Supplier)">newMultimap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
+ <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>Multimap</code> that uses the provided map and factory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#synchronizedMultimap(com.google.common.collect.Multimap)">synchronizedMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) multimap backed by the specified
+ multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#unmodifiableMultimap(com.google.common.collect.Multimap)">unmodifiableMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified multimap.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with parameters of type <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html#copyOf(com.google.common.collect.Multimap)">copyOf</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the same mappings as
+ <code>multimap</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSetMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html#copyOf(com.google.common.collect.Multimap)">copyOf</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set multimap containing the same mappings as
+ <code>multimap</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#copyOf(com.google.common.collect.Multimap)">copyOf</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the same mappings as
+ <code>multimap</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>TreeMultimap.</B><B><A HREF="../../../../../com/google/common/collect/TreeMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a <code>TreeMultimap</code>, ordered by the natural ordering of its
+ keys and values, with the same mappings as the specified multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>HashMultimap.</B><B><A HREF="../../../../../com/google/common/collect/HashMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a <code>HashMultimap</code> with the same mappings as the specified
+ multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>ArrayListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an <code>ArrayListMultimap</code> with the same mappings as the
+ specified multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>LinkedListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a <code>LinkedListMultimap</code> with the same mappings as the
+ specified <code>Multimap</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>LinkedHashMultimap.</B><B><A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a <code>LinkedHashMultimap</code> with the same mappings as the
+ specified multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V,M extends <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&gt;
+<BR>
+M</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#invertFrom(com.google.common.collect.Multimap, M)">invertFrom</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends V,? extends K&gt;&nbsp;source,
+ M&nbsp;dest)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies each key-value mapping in <code>source</code> into <code>dest</code>, with
+ its key and value reversed.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableListMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,? extends <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores another multimap's entries in the built multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSetMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,? extends <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores another multimap's entries in the built multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>ForwardingMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ForwardingMultimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,? extends <A HREF="../../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>Multimap.</B><B><A HREF="../../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>,? extends <A HREF="../../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all of another multimap's key-value pairs into this multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>LinkedListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,? extends <A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,? extends <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,? extends <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores another multimap's entries in the built multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#synchronizedMultimap(com.google.common.collect.Multimap)">synchronizedMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) multimap backed by the specified
+ multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#unmodifiableMultimap(com.google.common.collect.Multimap)">unmodifiableMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified multimap.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Multimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/Multimaps.html b/javadoc/com/google/common/collect/class-use/Multimaps.html
new file mode 100644
index 0000000..7cace43
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/Multimaps.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.Multimaps (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.Multimaps (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/Multimaps.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useMultimaps.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Multimaps.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.Multimaps</B></H2>
+</CENTER>
+No usage of com.google.common.collect.Multimaps
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/Multimaps.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useMultimaps.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Multimaps.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/Multiset.Entry.html b/javadoc/com/google/common/collect/class-use/Multiset.Entry.html
new file mode 100644
index 0000000..088104a
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/Multiset.Entry.html
@@ -0,0 +1,230 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Interface com.google.common.collect.Multiset.Entry (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Interface com.google.common.collect.Multiset.Entry (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useMultiset.Entry.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Multiset.Entry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.google.common.collect.Multiset.Entry</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multisets.</B><B><A HREF="../../../../../com/google/common/collect/Multisets.html#immutableEntry(E, int)">immutableEntry</A></B>(E&nbsp;e,
+ int&nbsp;n)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multiset entry with the specified element and count.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return types with arguments of type <A HREF="../../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultiset.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html#entrySet()">entrySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B>ForwardingMultiset.</B><B><A HREF="../../../../../com/google/common/collect/ForwardingMultiset.html#entrySet()">entrySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B>Multiset.</B><B><A HREF="../../../../../com/google/common/collect/Multiset.html#entrySet()">entrySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
+ the count of that element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;&gt;</CODE></FONT></TD>
+<TD><CODE><B>ConcurrentHashMultiset.</B><B><A HREF="../../../../../com/google/common/collect/ConcurrentHashMultiset.html#entrySet()">entrySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useMultiset.Entry.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Multiset.Entry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/Multiset.html b/javadoc/com/google/common/collect/class-use/Multiset.html
new file mode 100644
index 0000000..e4dc714
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/Multiset.html
@@ -0,0 +1,309 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Interface com.google.common.collect.Multiset (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Interface com.google.common.collect.Multiset (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Multiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.google.common.collect.Multiset</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that implement <A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A multiset that supports concurrent modifications and that provides atomic
+ versions of most <code>Multiset</code> operations (exceptions where noted).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset&lt;E extends Enum&lt;E&gt;&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Multiset implementation backed by an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumMap.html?is-external=true" title="class or interface in java.util"><CODE>EnumMap</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A multiset which forwards all its method calls to another multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Multiset implementation backed by a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable hash-based multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>Multiset</code> implementation with predictable iteration order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset&lt;E&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A multiset which maintains the ordering of its elements, according to either
+ their natural order or an explicit <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util"><CODE>Comparator</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected abstract &nbsp;<A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ForwardingMultiset.</B><B><A HREF="../../../../../com/google/common/collect/ForwardingMultiset.html#delegate()">delegate</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ForwardingMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ForwardingMultimap.html#keys()">keys</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>Multimap.</B><B><A HREF="../../../../../com/google/common/collect/Multimap.html#keys()">keys</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection, which may contain duplicates, of all keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>LinkedListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html#keys()">keys</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multisets.</B><B><A HREF="../../../../../com/google/common/collect/Multisets.html#unmodifiableMultiset(com.google.common.collect.Multiset)">unmodifiableMultiset</A></B>(<A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;? extends E&gt;&nbsp;multiset)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified multiset.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with parameters of type <A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multisets.</B><B><A HREF="../../../../../com/google/common/collect/Multisets.html#unmodifiableMultiset(com.google.common.collect.Multiset)">unmodifiableMultiset</A></B>(<A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;? extends E&gt;&nbsp;multiset)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified multiset.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Multiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/Multisets.html b/javadoc/com/google/common/collect/class-use/Multisets.html
new file mode 100644
index 0000000..e64cb9d
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/Multisets.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.Multisets (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.Multisets (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/Multisets.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useMultisets.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Multisets.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.Multisets</B></H2>
+</CENTER>
+No usage of com.google.common.collect.Multisets
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/Multisets.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useMultisets.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Multisets.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/MutableClassToInstanceMap.html b/javadoc/com/google/common/collect/class-use/MutableClassToInstanceMap.html
new file mode 100644
index 0000000..105c9f7
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/MutableClassToInstanceMap.html
@@ -0,0 +1,204 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.MutableClassToInstanceMap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.MutableClassToInstanceMap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useMutableClassToInstanceMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MutableClassToInstanceMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.MutableClassToInstanceMap</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;B&gt; <A HREF="../../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A>&lt;B&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>MutableClassToInstanceMap.</B><B><A HREF="../../../../../com/google/common/collect/MutableClassToInstanceMap.html#create()">create</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new <code>MutableClassToInstanceMap</code> instance backed by a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> using the default initial capacity and load factor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;B&gt; <A HREF="../../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A>&lt;B&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>MutableClassToInstanceMap.</B><B><A HREF="../../../../../com/google/common/collect/MutableClassToInstanceMap.html#create(java.util.Map)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends B&gt;,B&gt;&nbsp;backingMap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new <code>MutableClassToInstanceMap</code> instance backed by a given
+ empty <code>backingMap</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useMutableClassToInstanceMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MutableClassToInstanceMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ObjectArrays.html b/javadoc/com/google/common/collect/class-use/ObjectArrays.html
new file mode 100644
index 0000000..d6bf44c
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/ObjectArrays.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.ObjectArrays (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.ObjectArrays (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useObjectArrays.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ObjectArrays.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.ObjectArrays</B></H2>
+</CENTER>
+No usage of com.google.common.collect.ObjectArrays
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useObjectArrays.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ObjectArrays.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/Ordering.html b/javadoc/com/google/common/collect/class-use/Ordering.html
new file mode 100644
index 0000000..9054bd7
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/Ordering.html
@@ -0,0 +1,390 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.Ordering (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.Ordering (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useOrdering.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Ordering.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.Ordering</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;U extends <A HREF="../../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;U&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#compound(java.util.Comparator)">compound</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super U&gt;&nbsp;secondaryComparator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering which first uses the ordering <code>this</code>, but which
+ in the event of a "tie", then delegates to <code>secondaryComparator</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#compound(java.lang.Iterable)">compound</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super T&gt;&gt;&nbsp;comparators)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering which tries each given comparator in order until a
+ non-zero result is found, returning that result, and returning zero only if
+ all comparators return zero.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#explicit(java.util.List)">explicit</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&nbsp;valuesInOrder)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that compares objects according to the order in
+ which they appear in the given list.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#explicit(T, T...)">explicit</A></B>(T&nbsp;leastValue,
+ T...&nbsp;remainingValuesInOrder)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that compares objects according to the order in
+ which they are given to this method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#from(java.util.Comparator)">from</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;T&gt;&nbsp;comparator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering for a pre-existing <code>comparator</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#from(com.google.common.collect.Ordering)">from</A></B>(<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;&nbsp;ordering)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>no need to use this</I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;C extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;C&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#natural()">natural</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a serializable ordering that uses the natural order of the values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;S extends <A HREF="../../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;S&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#nullsFirst()">nullsFirst</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that treats <code>null</code> as less than all other values
+ and uses <code>this</code> to compare non-null values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;S extends <A HREF="../../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;S&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#nullsLast()">nullsLast</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that treats <code>null</code> as greater than all other
+ values and uses this ordering to compare non-null values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;F&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;F&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#onResultOf(com.google.common.base.Function)">onResultOf</A></B>(<A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;F,? extends <A HREF="../../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;&nbsp;function)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new ordering on <code>F</code> which orders elements by first applying
+ a function to them, then comparing those results using <code>this</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;S extends <A HREF="../../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;S&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#reverse()">reverse</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the reverse of this ordering; the <code>Ordering</code> equivalent to
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#reverseOrder(java.util.Comparator)" title="class or interface in java.util"><CODE>Collections.reverseOrder(Comparator)</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#usingToString()">usingToString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that compares objects by the natural ordering of their
+ string representations as returned by <code>toString()</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with parameters of type <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#from(com.google.common.collect.Ordering)">from</A></B>(<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;&nbsp;ordering)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>no need to use this</I></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useOrdering.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Ordering.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/PeekingIterator.html b/javadoc/com/google/common/collect/class-use/PeekingIterator.html
new file mode 100644
index 0000000..82926af
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/PeekingIterator.html
@@ -0,0 +1,188 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Interface com.google.common.collect.PeekingIterator (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Interface com.google.common.collect.PeekingIterator (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-usePeekingIterator.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="PeekingIterator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.google.common.collect.PeekingIterator</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect">PeekingIterator</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect">PeekingIterator</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect">PeekingIterator</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect">PeekingIterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#peekingIterator(java.util.Iterator)">peekingIterator</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;iterator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <code>PeekingIterator</code> backed by the given iterator.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-usePeekingIterator.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="PeekingIterator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/SetMultimap.html b/javadoc/com/google/common/collect/class-use/SetMultimap.html
new file mode 100644
index 0000000..8a99fc1
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/SetMultimap.html
@@ -0,0 +1,335 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Interface com.google.common.collect.SetMultimap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Interface com.google.common.collect.SetMultimap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useSetMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SetMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.google.common.collect.SetMultimap</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Subinterfaces of <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;interface</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>SetMultimap</code> whose set of values for a given key are kept sorted;
+ that is, they comprise a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that implement <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> using hash tables.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A> with reliable user-specified key and value
+ iteration order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <code>Multimap</code> that does not allow duplicate key-value
+ entries and that returns collections whose iterators follow the ordering in
+ which the data was added to the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <code>Multimap</code> whose keys and values are ordered by
+ their natural ordering or by supplied comparators.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#forMap(java.util.Map)">forMap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a multimap view of the specified map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#newSetMultimap(java.util.Map, com.google.common.base.Supplier)">newSetMultimap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
+ <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>SetMultimap</code> that uses the provided map and factory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#synchronizedSetMultimap(com.google.common.collect.SetMultimap)">synchronizedSetMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) <code>SetMultimap</code> backed by the
+ specified multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#unmodifiableSetMultimap(com.google.common.collect.SetMultimap)">unmodifiableSetMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified <code>SetMultimap</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with parameters of type <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#synchronizedSetMultimap(com.google.common.collect.SetMultimap)">synchronizedSetMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) <code>SetMultimap</code> backed by the
+ specified multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#unmodifiableSetMultimap(com.google.common.collect.SetMultimap)">unmodifiableSetMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified <code>SetMultimap</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useSetMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SetMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/Sets.SetView.html b/javadoc/com/google/common/collect/class-use/Sets.SetView.html
new file mode 100644
index 0000000..0e165cb
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/Sets.SetView.html
@@ -0,0 +1,221 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.Sets.SetView (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.Sets.SetView (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useSets.SetView.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Sets.SetView.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.Sets.SetView</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Sets.</B><B><A HREF="../../../../../com/google/common/collect/Sets.html#difference(java.util.Set, java.util.Set)">difference</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;&nbsp;set1,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;?&gt;&nbsp;set2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable <b>view</b> of the difference of two sets.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Sets.</B><B><A HREF="../../../../../com/google/common/collect/Sets.html#intersection(java.util.Set, java.util.Set)">intersection</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;&nbsp;set1,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;?&gt;&nbsp;set2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable <b>view</b> of the intersection of two sets.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Sets.</B><B><A HREF="../../../../../com/google/common/collect/Sets.html#union(java.util.Set, java.util.Set)">union</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;? extends E&gt;&nbsp;set1,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;? extends E&gt;&nbsp;set2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable <b>view</b> of the union of two sets.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useSets.SetView.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Sets.SetView.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/Sets.html b/javadoc/com/google/common/collect/class-use/Sets.html
new file mode 100644
index 0000000..dea1f9d
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/Sets.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.Sets (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.Sets (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/Sets.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useSets.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Sets.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.Sets</B></H2>
+</CENTER>
+No usage of com.google.common.collect.Sets
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/Sets.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useSets.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Sets.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/SortedSetMultimap.html b/javadoc/com/google/common/collect/class-use/SortedSetMultimap.html
new file mode 100644
index 0000000..9dd2b3a
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/SortedSetMultimap.html
@@ -0,0 +1,277 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Interface com.google.common.collect.SortedSetMultimap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Interface com.google.common.collect.SortedSetMultimap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useSortedSetMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SortedSetMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.google.common.collect.SortedSetMultimap</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that implement <A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap&lt;K,V&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <code>Multimap</code> whose keys and values are ordered by
+ their natural ordering or by supplied comparators.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#newSortedSetMultimap(java.util.Map, com.google.common.base.Supplier)">newSortedSetMultimap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
+ <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>SortedSetMultimap</code> that uses the provided map and
+ factory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#synchronizedSortedSetMultimap(com.google.common.collect.SortedSetMultimap)">synchronizedSortedSetMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) <code>SortedSetMultimap</code> backed by
+ the specified multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#unmodifiableSortedSetMultimap(com.google.common.collect.SortedSetMultimap)">unmodifiableSortedSetMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified <code>SortedSetMultimap</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with parameters of type <A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#synchronizedSortedSetMultimap(com.google.common.collect.SortedSetMultimap)">synchronizedSortedSetMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) <code>SortedSetMultimap</code> backed by
+ the specified multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#unmodifiableSortedSetMultimap(com.google.common.collect.SortedSetMultimap)">unmodifiableSortedSetMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified <code>SortedSetMultimap</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useSortedSetMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SortedSetMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/TreeMultimap.html b/javadoc/com/google/common/collect/class-use/TreeMultimap.html
new file mode 100644
index 0000000..44b94dc
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/TreeMultimap.html
@@ -0,0 +1,225 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.TreeMultimap (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.TreeMultimap (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useTreeMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TreeMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.TreeMultimap</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>TreeMultimap.</B><B><A HREF="../../../../../com/google/common/collect/TreeMultimap.html#create()">create</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an empty <code>TreeMultimap</code> ordered by the natural ordering of
+ its keys and values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>TreeMultimap.</B><B><A HREF="../../../../../com/google/common/collect/TreeMultimap.html#create(java.util.Comparator, java.util.Comparator)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super K&gt;&nbsp;keyComparator,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super V&gt;&nbsp;valueComparator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an empty <code>TreeMultimap</code> instance using explicit comparators.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>TreeMultimap.</B><B><A HREF="../../../../../com/google/common/collect/TreeMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a <code>TreeMultimap</code>, ordered by the natural ordering of its
+ keys and values, with the same mappings as the specified multimap.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useTreeMultimap.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TreeMultimap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/TreeMultiset.html b/javadoc/com/google/common/collect/class-use/TreeMultiset.html
new file mode 100644
index 0000000..cc0a48f
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/TreeMultiset.html
@@ -0,0 +1,225 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.TreeMultiset (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.TreeMultiset (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useTreeMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TreeMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.TreeMultiset</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>TreeMultiset.</B><B><A HREF="../../../../../com/google/common/collect/TreeMultiset.html#create()">create</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty multiset, sorted according to the elements' natural
+ order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>TreeMultiset.</B><B><A HREF="../../../../../com/google/common/collect/TreeMultiset.html#create(java.util.Comparator)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super E&gt;&nbsp;comparator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty multiset, sorted according to the specified
+ comparator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt;
+<BR>
+<A HREF="../../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>&lt;E&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>TreeMultiset.</B><B><A HREF="../../../../../com/google/common/collect/TreeMultiset.html#create(java.lang.Iterable)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an empty multiset containing the given initial elements, sorted
+ according to the elements' natural order.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useTreeMultiset.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TreeMultiset.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/UnmodifiableIterator.html b/javadoc/com/google/common/collect/class-use/UnmodifiableIterator.html
new file mode 100644
index 0000000..1e97dd2
--- /dev/null
+++ b/javadoc/com/google/common/collect/class-use/UnmodifiableIterator.html
@@ -0,0 +1,364 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Class com.google.common.collect.UnmodifiableIterator (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class com.google.common.collect.UnmodifiableIterator (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useUnmodifiableIterator.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="UnmodifiableIterator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.google.common.collect.UnmodifiableIterator</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect">AbstractIterator&lt;T&gt;</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This class provides a skeletal implementation of the <code>Iterator</code>
+ interface, to make this interface easier to implement for certain types of
+ data sources.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#emptyIterator()">emptyIterator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty iterator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#filter(java.util.Iterator, java.lang.Class)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;unfiltered,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns all instances of class <code>type</code> in <code>unfiltered</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#filter(java.util.Iterator, com.google.common.base.Predicate)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;unfiltered,
+ <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the elements of <code>unfiltered</code> that satisfy a predicate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#forArray(T...)">forArray</A></B>(T...&nbsp;array)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator containing the elements of <code>array</code> in order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#forEnumeration(java.util.Enumeration)">forEnumeration</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Enumeration.html?is-external=true" title="class or interface in java.util">Enumeration</A>&lt;T&gt;&nbsp;enumeration)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adapts an <code>Enumeration</code> to the <code>Iterator</code> interface.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#iterator()">iterator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableMultiset.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html#iterator()">iterator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.html#iterator()">iterator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B>ImmutableCollection.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableCollection.html#iterator()">iterator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable iterator across the elements in this collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#paddedPartition(java.util.Iterator, int)">paddedPartition</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
+ int&nbsp;size)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Divides an iterator into unmodifiable sublists of the given size, padding
+ the final iterator with null values if necessary.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#partition(java.util.Iterator, int)">partition</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
+ int&nbsp;size)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Divides an iterator into unmodifiable sublists of the given size (the final
+ list may be smaller).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#singletonIterator(T)">singletonIterator</A></B>(T&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator containing only <code>value</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#unmodifiableIterator(java.util.Iterator)">unmodifiableIterator</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of <code>iterator</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/common/collect//class-useUnmodifiableIterator.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="UnmodifiableIterator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/package-frame.html b/javadoc/com/google/common/collect/package-frame.html
new file mode 100644
index 0000000..3f097fe
--- /dev/null
+++ b/javadoc/com/google/common/collect/package-frame.html
@@ -0,0 +1,204 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+com.google.common.collect (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+
+</HEAD>
+
+<BODY BGCOLOR="white">
+<FONT size="+1" CLASS="FrameTitleFont">
+<A HREF="../../../../com/google/common/collect/package-summary.html" target="classFrame">com.google.common.collect</A></FONT>
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Interfaces</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="BiMap.html" title="interface in com.google.common.collect" target="classFrame"><I>BiMap</I></A>
+<BR>
+<A HREF="ClassToInstanceMap.html" title="interface in com.google.common.collect" target="classFrame"><I>ClassToInstanceMap</I></A>
+<BR>
+<A HREF="ListMultimap.html" title="interface in com.google.common.collect" target="classFrame"><I>ListMultimap</I></A>
+<BR>
+<A HREF="MapDifference.html" title="interface in com.google.common.collect" target="classFrame"><I>MapDifference</I></A>
+<BR>
+<A HREF="MapDifference.ValueDifference.html" title="interface in com.google.common.collect" target="classFrame"><I>MapDifference.ValueDifference</I></A>
+<BR>
+<A HREF="Multimap.html" title="interface in com.google.common.collect" target="classFrame"><I>Multimap</I></A>
+<BR>
+<A HREF="Multiset.html" title="interface in com.google.common.collect" target="classFrame"><I>Multiset</I></A>
+<BR>
+<A HREF="Multiset.Entry.html" title="interface in com.google.common.collect" target="classFrame"><I>Multiset.Entry</I></A>
+<BR>
+<A HREF="PeekingIterator.html" title="interface in com.google.common.collect" target="classFrame"><I>PeekingIterator</I></A>
+<BR>
+<A HREF="SetMultimap.html" title="interface in com.google.common.collect" target="classFrame"><I>SetMultimap</I></A>
+<BR>
+<A HREF="SortedSetMultimap.html" title="interface in com.google.common.collect" target="classFrame"><I>SortedSetMultimap</I></A></FONT></TD>
+</TR>
+</TABLE>
+
+
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Classes</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="AbstractIterator.html" title="class in com.google.common.collect" target="classFrame">AbstractIterator</A>
+<BR>
+<A HREF="ArrayListMultimap.html" title="class in com.google.common.collect" target="classFrame">ArrayListMultimap</A>
+<BR>
+<A HREF="Collections2.html" title="class in com.google.common.collect" target="classFrame">Collections2</A>
+<BR>
+<A HREF="ConcurrentHashMultiset.html" title="class in com.google.common.collect" target="classFrame">ConcurrentHashMultiset</A>
+<BR>
+<A HREF="EnumBiMap.html" title="class in com.google.common.collect" target="classFrame">EnumBiMap</A>
+<BR>
+<A HREF="EnumHashBiMap.html" title="class in com.google.common.collect" target="classFrame">EnumHashBiMap</A>
+<BR>
+<A HREF="EnumMultiset.html" title="class in com.google.common.collect" target="classFrame">EnumMultiset</A>
+<BR>
+<A HREF="ForwardingCollection.html" title="class in com.google.common.collect" target="classFrame">ForwardingCollection</A>
+<BR>
+<A HREF="ForwardingConcurrentMap.html" title="class in com.google.common.collect" target="classFrame">ForwardingConcurrentMap</A>
+<BR>
+<A HREF="ForwardingIterator.html" title="class in com.google.common.collect" target="classFrame">ForwardingIterator</A>
+<BR>
+<A HREF="ForwardingList.html" title="class in com.google.common.collect" target="classFrame">ForwardingList</A>
+<BR>
+<A HREF="ForwardingListIterator.html" title="class in com.google.common.collect" target="classFrame">ForwardingListIterator</A>
+<BR>
+<A HREF="ForwardingMap.html" title="class in com.google.common.collect" target="classFrame">ForwardingMap</A>
+<BR>
+<A HREF="ForwardingMapEntry.html" title="class in com.google.common.collect" target="classFrame">ForwardingMapEntry</A>
+<BR>
+<A HREF="ForwardingMultimap.html" title="class in com.google.common.collect" target="classFrame">ForwardingMultimap</A>
+<BR>
+<A HREF="ForwardingMultiset.html" title="class in com.google.common.collect" target="classFrame">ForwardingMultiset</A>
+<BR>
+<A HREF="ForwardingObject.html" title="class in com.google.common.collect" target="classFrame">ForwardingObject</A>
+<BR>
+<A HREF="ForwardingQueue.html" title="class in com.google.common.collect" target="classFrame">ForwardingQueue</A>
+<BR>
+<A HREF="ForwardingSet.html" title="class in com.google.common.collect" target="classFrame">ForwardingSet</A>
+<BR>
+<A HREF="ForwardingSortedMap.html" title="class in com.google.common.collect" target="classFrame">ForwardingSortedMap</A>
+<BR>
+<A HREF="ForwardingSortedSet.html" title="class in com.google.common.collect" target="classFrame">ForwardingSortedSet</A>
+<BR>
+<A HREF="HashBiMap.html" title="class in com.google.common.collect" target="classFrame">HashBiMap</A>
+<BR>
+<A HREF="HashMultimap.html" title="class in com.google.common.collect" target="classFrame">HashMultimap</A>
+<BR>
+<A HREF="HashMultiset.html" title="class in com.google.common.collect" target="classFrame">HashMultiset</A>
+<BR>
+<A HREF="ImmutableBiMap.html" title="class in com.google.common.collect" target="classFrame">ImmutableBiMap</A>
+<BR>
+<A HREF="ImmutableBiMap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableBiMap.Builder</A>
+<BR>
+<A HREF="ImmutableClassToInstanceMap.html" title="class in com.google.common.collect" target="classFrame">ImmutableClassToInstanceMap</A>
+<BR>
+<A HREF="ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableClassToInstanceMap.Builder</A>
+<BR>
+<A HREF="ImmutableCollection.html" title="class in com.google.common.collect" target="classFrame">ImmutableCollection</A>
+<BR>
+<A HREF="ImmutableList.html" title="class in com.google.common.collect" target="classFrame">ImmutableList</A>
+<BR>
+<A HREF="ImmutableList.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableList.Builder</A>
+<BR>
+<A HREF="ImmutableListMultimap.html" title="class in com.google.common.collect" target="classFrame">ImmutableListMultimap</A>
+<BR>
+<A HREF="ImmutableListMultimap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableListMultimap.Builder</A>
+<BR>
+<A HREF="ImmutableMap.html" title="class in com.google.common.collect" target="classFrame">ImmutableMap</A>
+<BR>
+<A HREF="ImmutableMap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableMap.Builder</A>
+<BR>
+<A HREF="ImmutableMultimap.html" title="class in com.google.common.collect" target="classFrame">ImmutableMultimap</A>
+<BR>
+<A HREF="ImmutableMultimap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableMultimap.Builder</A>
+<BR>
+<A HREF="ImmutableMultiset.html" title="class in com.google.common.collect" target="classFrame">ImmutableMultiset</A>
+<BR>
+<A HREF="ImmutableMultiset.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableMultiset.Builder</A>
+<BR>
+<A HREF="ImmutableSet.html" title="class in com.google.common.collect" target="classFrame">ImmutableSet</A>
+<BR>
+<A HREF="ImmutableSet.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableSet.Builder</A>
+<BR>
+<A HREF="ImmutableSetMultimap.html" title="class in com.google.common.collect" target="classFrame">ImmutableSetMultimap</A>
+<BR>
+<A HREF="ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableSetMultimap.Builder</A>
+<BR>
+<A HREF="ImmutableSortedMap.html" title="class in com.google.common.collect" target="classFrame">ImmutableSortedMap</A>
+<BR>
+<A HREF="ImmutableSortedMap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableSortedMap.Builder</A>
+<BR>
+<A HREF="ImmutableSortedSet.html" title="class in com.google.common.collect" target="classFrame">ImmutableSortedSet</A>
+<BR>
+<A HREF="ImmutableSortedSet.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableSortedSet.Builder</A>
+<BR>
+<A HREF="Iterables.html" title="class in com.google.common.collect" target="classFrame">Iterables</A>
+<BR>
+<A HREF="Iterators.html" title="class in com.google.common.collect" target="classFrame">Iterators</A>
+<BR>
+<A HREF="LinkedHashMultimap.html" title="class in com.google.common.collect" target="classFrame">LinkedHashMultimap</A>
+<BR>
+<A HREF="LinkedHashMultiset.html" title="class in com.google.common.collect" target="classFrame">LinkedHashMultiset</A>
+<BR>
+<A HREF="LinkedListMultimap.html" title="class in com.google.common.collect" target="classFrame">LinkedListMultimap</A>
+<BR>
+<A HREF="Lists.html" title="class in com.google.common.collect" target="classFrame">Lists</A>
+<BR>
+<A HREF="MapMaker.html" title="class in com.google.common.collect" target="classFrame">MapMaker</A>
+<BR>
+<A HREF="Maps.html" title="class in com.google.common.collect" target="classFrame">Maps</A>
+<BR>
+<A HREF="Multimaps.html" title="class in com.google.common.collect" target="classFrame">Multimaps</A>
+<BR>
+<A HREF="Multisets.html" title="class in com.google.common.collect" target="classFrame">Multisets</A>
+<BR>
+<A HREF="MutableClassToInstanceMap.html" title="class in com.google.common.collect" target="classFrame">MutableClassToInstanceMap</A>
+<BR>
+<A HREF="ObjectArrays.html" title="class in com.google.common.collect" target="classFrame">ObjectArrays</A>
+<BR>
+<A HREF="Ordering.html" title="class in com.google.common.collect" target="classFrame">Ordering</A>
+<BR>
+<A HREF="Sets.html" title="class in com.google.common.collect" target="classFrame">Sets</A>
+<BR>
+<A HREF="Sets.SetView.html" title="class in com.google.common.collect" target="classFrame">Sets.SetView</A>
+<BR>
+<A HREF="TreeMultimap.html" title="class in com.google.common.collect" target="classFrame">TreeMultimap</A>
+<BR>
+<A HREF="TreeMultiset.html" title="class in com.google.common.collect" target="classFrame">TreeMultiset</A>
+<BR>
+<A HREF="UnmodifiableIterator.html" title="class in com.google.common.collect" target="classFrame">UnmodifiableIterator</A></FONT></TD>
+</TR>
+</TABLE>
+
+
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Exceptions</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="AsynchronousComputationException.html" title="class in com.google.common.collect" target="classFrame">AsynchronousComputationException</A>
+<BR>
+<A HREF="ComputationException.html" title="class in com.google.common.collect" target="classFrame">ComputationException</A></FONT></TD>
+</TR>
+</TABLE>
+
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/package-summary.html b/javadoc/com/google/common/collect/package-summary.html
new file mode 100644
index 0000000..298aac3
--- /dev/null
+++ b/javadoc/com/google/common/collect/package-summary.html
@@ -0,0 +1,704 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+com.google.common.collect (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="com.google.common.collect (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
+&nbsp;NEXT PACKAGE</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/package-summary.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/ParametersAreNonnullByDefault.html?is-external=true" title="class or interface in javax.annotation">@ParametersAreNonnullByDefault</A>
+</FONT><H2>
+Package com.google.common.collect
+</H2>
+This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.
+<P>
+<B>See:</B>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#package_description"><B>Description</B></A>
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Interface Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap&lt;K,V&gt;</A></B></TD>
+<TD>A bimap (or "bidirectional map") is a map that preserves the uniqueness of
+ its values as well as that of its keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap&lt;B&gt;</A></B></TD>
+<TD>A map, each entry of which maps a Java
+ <a href="http://tinyurl.com/2cmwkz">raw type</a> to an instance of that type.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap&lt;K,V&gt;</A></B></TD>
+<TD>A <code>Multimap</code> that can hold duplicate key-value pairs and that maintains
+ the insertion ordering of values for a given key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference&lt;K,V&gt;</A></B></TD>
+<TD>An object representing the differences between two maps.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect">MapDifference.ValueDifference&lt;V&gt;</A></B></TD>
+<TD>A difference between the mappings from two maps with the same key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap&lt;K,V&gt;</A></B></TD>
+<TD>A collection similar to a <code>Map</code>, but which may associate multiple
+ values with a single key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset&lt;E&gt;</A></B></TD>
+<TD>A collection that supports order-independent equality, like <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>, but
+ may have duplicate elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry&lt;E&gt;</A></B></TD>
+<TD>An unmodifiable element-count pair for a multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect">PeekingIterator&lt;E&gt;</A></B></TD>
+<TD>An iterator that supports a one-element lookahead while iterating.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap&lt;K,V&gt;</A></B></TD>
+<TD>A <code>Multimap</code> that cannot hold duplicate key-value pairs.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap&lt;K,V&gt;</A></B></TD>
+<TD>A <code>SetMultimap</code> whose set of values for a given key are kept sorted;
+ that is, they comprise a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect">AbstractIterator&lt;T&gt;</A></B></TD>
+<TD>This class provides a skeletal implementation of the <code>Iterator</code>
+ interface, to make this interface easier to implement for certain types of
+ data sources.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap&lt;K,V&gt;</A></B></TD>
+<TD>Implementation of <code>Multimap</code> that uses an <code>ArrayList</code> to store
+ the values for a given key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/Collections2.html" title="class in com.google.common.collect">Collections2</A></B></TD>
+<TD>Provides static methods for working with <code>Collection</code> instances.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset&lt;E&gt;</A></B></TD>
+<TD>A multiset that supports concurrent modifications and that provides atomic
+ versions of most <code>Multiset</code> operations (exceptions where noted).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap&lt;K extends Enum&lt;K&gt;,V extends Enum&lt;V&gt;&gt;</A></B></TD>
+<TD>A <code>BiMap</code> backed by two <code>EnumMap</code> instances.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap&lt;K extends Enum&lt;K&gt;,V&gt;</A></B></TD>
+<TD>A <code>BiMap</code> backed by an <code>EnumMap</code> instance for keys-to-values, and
+ a <code>HashMap</code> instance for values-to-keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset&lt;E extends Enum&lt;E&gt;&gt;</A></B></TD>
+<TD>Multiset implementation backed by an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumMap.html?is-external=true" title="class or interface in java.util"><CODE>EnumMap</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection&lt;E&gt;</A></B></TD>
+<TD>A collection which forwards all its method calls to another collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect">ForwardingConcurrentMap&lt;K,V&gt;</A></B></TD>
+<TD>A concurrent map which forwards all its method calls to another concurrent
+ map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator&lt;T&gt;</A></B></TD>
+<TD>An iterator which forwards all its method calls to another iterator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList&lt;E&gt;</A></B></TD>
+<TD>A list which forwards all its method calls to another list.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator&lt;E&gt;</A></B></TD>
+<TD>A list iterator which forwards all its method calls to another list
+ iterator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap&lt;K,V&gt;</A></B></TD>
+<TD>A map which forwards all its method calls to another map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect">ForwardingMapEntry&lt;K,V&gt;</A></B></TD>
+<TD>A map entry which forwards all its method calls to another map entry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap&lt;K,V&gt;</A></B></TD>
+<TD>A multimap which forwards all its method calls to another multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset&lt;E&gt;</A></B></TD>
+<TD>A multiset which forwards all its method calls to another multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TD>
+<TD>An abstract base class for implementing the <a
+ href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect">ForwardingQueue&lt;E&gt;</A></B></TD>
+<TD>A queue which forwards all its method calls to another queue.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet&lt;E&gt;</A></B></TD>
+<TD>A set which forwards all its method calls to another set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap&lt;K,V&gt;</A></B></TD>
+<TD>A sorted map which forwards all its method calls to another sorted map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet&lt;E&gt;</A></B></TD>
+<TD>A sorted set which forwards all its method calls to another sorted set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap&lt;K,V&gt;</A></B></TD>
+<TD>A <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> backed by two <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> instances.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap&lt;K,V&gt;</A></B></TD>
+<TD>Implementation of <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> using hash tables.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset&lt;E&gt;</A></B></TD>
+<TD>Multiset implementation backed by a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap&lt;K,V&gt;</A></B></TD>
+<TD>An immutable <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> with reliable user-specified iteration order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder&lt;K,V&gt;</A></B></TD>
+<TD>A builder for creating immutable bimap instances, especially <code>public
+ static final</code> bimaps ("constant bimaps").</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap&lt;B&gt;</A></B></TD>
+<TD>A class-to-instance map backed by an <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><CODE>ImmutableMap</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder&lt;B&gt;</A></B></TD>
+<TD>A builder for creating immutable class-to-instance maps.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection&lt;E&gt;</A></B></TD>
+<TD>An immutable collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList&lt;E&gt;</A></B></TD>
+<TD>A high-performance, immutable, random-access <code>List</code> implementation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder&lt;E&gt;</A></B></TD>
+<TD>A builder for creating immutable list instances, especially
+ <code>public static final</code> lists ("constant lists").</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap&lt;K,V&gt;</A></B></TD>
+<TD>An immutable <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A> with reliable user-specified key and value
+ iteration order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder&lt;K,V&gt;</A></B></TD>
+<TD>A builder for creating immutable <code>ListMultimap</code> instances, especially
+ <code>public static final</code> multimaps ("constant multimaps").</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap&lt;K,V&gt;</A></B></TD>
+<TD>An immutable, hash-based <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> with reliable user-specified iteration
+ order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder&lt;K,V&gt;</A></B></TD>
+<TD>A builder for creating immutable map instances, especially <code>public
+ static final</code> maps ("constant maps").</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap&lt;K,V&gt;</A></B></TD>
+<TD>An immutable <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder&lt;K,V&gt;</A></B></TD>
+<TD>A builder for creating immutable multimap instances, especially
+ <code>public static final</code> multimaps ("constant multimaps").</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset&lt;E&gt;</A></B></TD>
+<TD>An immutable hash-based multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder&lt;E&gt;</A></B></TD>
+<TD>A builder for creating immutable multiset instances, especially
+ <code>public static final</code> multisets ("constant multisets").</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet&lt;E&gt;</A></B></TD>
+<TD>A high-performance, immutable <code>Set</code> with reliable, user-specified
+ iteration order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder&lt;E&gt;</A></B></TD>
+<TD>A builder for creating immutable set instances, especially
+ <code>public static final</code> sets ("constant sets").</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap&lt;K,V&gt;</A></B></TD>
+<TD>An immutable <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A> with reliable user-specified key and value
+ iteration order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder&lt;K,V&gt;</A></B></TD>
+<TD>A builder for creating immutable <code>SetMultimap</code> instances, especially
+ <code>public static final</code> multimaps ("constant multimaps").</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap&lt;K,V&gt;</A></B></TD>
+<TD>An immutable <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util"><CODE>SortedMap</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder&lt;K,V&gt;</A></B></TD>
+<TD>A builder for creating immutable sorted map instances, especially <code>public static final</code> maps ("constant maps").</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet&lt;E&gt;</A></B></TD>
+<TD>An immutable <code>SortedSet</code> that stores its elements in a sorted array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder&lt;E&gt;</A></B></TD>
+<TD>A builder for creating immutable sorted set instances, especially
+ <code>public static final</code> sets ("constant sets"), with a given
+ comparator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A></B></TD>
+<TD>This class contains static utility methods that operate on or return objects
+ of type <code>Iterable</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A></B></TD>
+<TD>This class contains static utility methods that operate on or return objects
+ of type <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util"><CODE>Iterator</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap&lt;K,V&gt;</A></B></TD>
+<TD>Implementation of <code>Multimap</code> that does not allow duplicate key-value
+ entries and that returns collections whose iterators follow the ordering in
+ which the data was added to the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset&lt;E&gt;</A></B></TD>
+<TD>A <code>Multiset</code> implementation with predictable iteration order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap&lt;K,V&gt;</A></B></TD>
+<TD>An implementation of <code>ListMultimap</code> that supports deterministic
+ iteration order for both keys and values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A></B></TD>
+<TD>Static utility methods pertaining to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A> instances.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></B></TD>
+<TD>A <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ConcurrentMap</CODE></A> builder, providing any combination of these
+ features: <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref">soft</A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref">weak</A> keys, soft or weak values, timed expiration, and on-demand
+ computation of values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A></B></TD>
+<TD>Static utility methods pertaining to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> instances.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A></B></TD>
+<TD>Provides static methods acting on or generating a <code>Multimap</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/Multisets.html" title="class in com.google.common.collect">Multisets</A></B></TD>
+<TD>Provides static utility methods for creating and working with <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><CODE>Multiset</CODE></A> instances.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap&lt;B&gt;</A></B></TD>
+<TD>A mutable class-to-instance map backed by an arbitrary user-provided map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect">ObjectArrays</A></B></TD>
+<TD>Static utility methods pertaining to object arrays.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering&lt;T&gt;</A></B></TD>
+<TD>A comparator with added methods to support common functions.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A></B></TD>
+<TD>Static utility methods pertaining to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> instances.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView&lt;E&gt;</A></B></TD>
+<TD>An unmodifiable view of a set which may be backed by other sets; this view
+ will change as the backing sets do.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap&lt;K,V&gt;</A></B></TD>
+<TD>Implementation of <code>Multimap</code> whose keys and values are ordered by
+ their natural ordering or by supplied comparators.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset&lt;E&gt;</A></B></TD>
+<TD>A multiset which maintains the ordering of its elements, according to either
+ their natural order or an explicit <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util"><CODE>Comparator</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator&lt;E&gt;</A></B></TD>
+<TD>An iterator that does not support <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html#remove()"><CODE>remove()</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Exception Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect">AsynchronousComputationException</A></B></TD>
+<TD>Wraps an exception that occured during a computation in a different thread.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect">ComputationException</A></B></TD>
+<TD>Wraps an exception that occured during a computation.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+<A NAME="package_description"><!-- --></A><H2>
+Package com.google.common.collect Description
+</H2>
+
+<P>
+This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.
+
+ <h2>Collection Types</h2>
+
+ <dl>
+ <dt><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A>
+ <dd>A new type, which is similar to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A>, but may contain
+ multiple entries with the same key. Some behaviors of
+ <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> are left unspecified and are
+ provided only by the subtypes mentioned below.
+
+ <dt><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A>
+ <dd>An extension of <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> which has
+ order-independent equality and does not allow duplicate entries; that is,
+ while a key may appear twice in a <code>SetMultimap</code>, each must map to a
+ different value. <code>SetMultimap</code> takes its name from the fact that
+ the <A HREF="../../../../com/google/common/collect/SetMultimap.html#get(K)">collection of
+ values</A> associated with a given key fulfills the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>
+ contract.
+
+ <dt><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A>
+ <dd>An extension of <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> which permits
+ duplicate entries, supports random access of values for a particular key,
+ and has <i>partially order-dependent equality</i> as defined by
+ <A HREF="../../../../com/google/common/collect/ListMultimap.html#equals(java.lang.Object)"><CODE>ListMultimap.equals(Object)</CODE></A>. <code>ListMultimap</code> takes its name from the fact that the <A HREF="../../../../com/google/common/collect/ListMultimap.html#get(K)">collection of values</A>
+ associated with a given key fulfills the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A> contract.
+
+ <dt><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect"><CODE>SortedSetMultimap</CODE></A>
+ <dd>An extension of <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A> for which
+ the <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#get(K)">collection values</A> associated with a given key is a
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A>.
+
+ <dt><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><CODE>Multiset</CODE></A>
+ <dd>An extension of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> that may contain duplicate
+ values like a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>, yet has order-independent equality
+ like a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>. One typical use for a multiset is to
+ represent a histogram.
+
+ <dt><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A>
+ <dd>An extension of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> that guarantees the uniqueness of
+ its values as well as that of its keys. This is sometimes called an
+ "invertible map," since the restriction on values enables it to support
+ an <A HREF="../../../../com/google/common/collect/BiMap.html#inverse()">inverse view</A> --
+ which is another instance of <code>BiMap</code>.
+
+ <dt><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect"><CODE>ClassToInstanceMap</CODE></A>
+ <dd>An extension of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> that associates a raw type with an
+ instance of that type.
+ </dl>
+
+ <h2>Collection Implementations</h2>
+
+ <h3>of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A></h3>
+ <dl>
+ <dt><A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect"><CODE>ImmutableList</CODE></A>
+ </ul>
+
+ <h3>of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A></h3>
+ <dl>
+ <dt><A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect"><CODE>ImmutableSet</CODE></A>
+ </ul>
+
+ <h3>of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A></h3>
+ <dl>
+ <dt><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect"><CODE>ImmutableSortedSet</CODE></A>
+ </dl>
+
+ <h3>of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A></h3>
+ <dl>
+ <dt><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><CODE>ImmutableMap</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect"><CODE>MapMaker</CODE></A> (produced by)
+ </ul>
+
+ <h3>of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util"><CODE>SortedMap</CODE></A></h3>
+ <dl>
+ <dt><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect"><CODE>ImmutableSortedMap</CODE></A>
+ </dl>
+
+ <h3>of <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A></h3>
+ <dl>
+ <dt><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect"><CODE>ImmutableMultimap</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/Multimaps.html#newMultimap(java.util.Map, com.google.common.base.Supplier)"><CODE>Multimaps.newMultimap(java.util.Map<K, java.util.Collection<V>>, com.google.common.base.Supplier<? extends java.util.Collection<V>>)</CODE></A>
+ </dl>
+
+ <h3>of <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A></h3>
+ <dl>
+ <dt><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect"><CODE>ImmutableListMultimap</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect"><CODE>ArrayListMultimap</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect"><CODE>LinkedListMultimap</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/Multimaps.html#newListMultimap(java.util.Map, com.google.common.base.Supplier)"><CODE>Multimaps.newListMultimap(java.util.Map<K, java.util.Collection<V>>, com.google.common.base.Supplier<? extends java.util.List<V>>)</CODE></A>
+ </dl>
+
+ <h3>of <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A></h3>
+ <dl>
+ <dt><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect"><CODE>ImmutableSetMultimap</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect"><CODE>HashMultimap</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect"><CODE>LinkedHashMultimap</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect"><CODE>TreeMultimap</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/Multimaps.html#newSetMultimap(java.util.Map, com.google.common.base.Supplier)"><CODE>Multimaps.newSetMultimap(java.util.Map<K, java.util.Collection<V>>, com.google.common.base.Supplier<? extends java.util.Set<V>>)</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/Multimaps.html#newSortedSetMultimap(java.util.Map, com.google.common.base.Supplier)"><CODE>Multimaps.newSortedSetMultimap(java.util.Map<K, java.util.Collection<V>>, com.google.common.base.Supplier<? extends java.util.SortedSet<V>>)</CODE></A>
+ </dl>
+
+ <h3>of <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><CODE>Multiset</CODE></A></h3>
+ <dl>
+ <dt><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect"><CODE>ImmutableMultiset</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect"><CODE>ConcurrentHashMultiset</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect"><CODE>HashMultiset</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect"><CODE>LinkedHashMultiset</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect"><CODE>TreeMultiset</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect"><CODE>EnumMultiset</CODE></A>
+ </dl>
+
+ <h3>of <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A></h3>
+ <dl>
+ <dt><A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect"><CODE>HashBiMap</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect"><CODE>EnumBiMap</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect"><CODE>EnumHashBiMap</CODE></A>
+ </dl>
+
+ <h3>of <A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect"><CODE>ClassToInstanceMap</CODE></A></h3>
+ <dl>
+ <dt><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect"><CODE>ImmutableClassToInstanceMap</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect"><CODE>MutableClassToInstanceMap</CODE></A>
+ </dl>
+
+ <h2>Skeletal implementations</h2>
+ <dl>
+ <dt><A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect"><CODE>AbstractIterator</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect"><CODE>UnmodifiableIterator</CODE></A>
+ </dl>
+
+ <h2>Utilities</h2>
+
+ <dl>
+ <dt><A HREF="../../../../com/google/common/collect/Collections2.html" title="class in com.google.common.collect"><CODE>Collections2</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/Iterators.html" title="class in com.google.common.collect"><CODE>Iterators</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/Iterables.html" title="class in com.google.common.collect"><CODE>Iterables</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/Lists.html" title="class in com.google.common.collect"><CODE>Lists</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/Maps.html" title="class in com.google.common.collect"><CODE>Maps</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect"><CODE>Ordering</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/Sets.html" title="class in com.google.common.collect"><CODE>Sets</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/Multisets.html" title="class in com.google.common.collect"><CODE>Multisets</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/Multimaps.html" title="class in com.google.common.collect"><CODE>Multimaps</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect"><CODE>ObjectArrays</CODE></A>
+ </dl>
+
+ <h2>Forwarding collections</h2>
+
+ <dl>
+ <dt><A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect"><CODE>ForwardingCollection</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect"><CODE>ForwardingConcurrentMap</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect"><CODE>ForwardingIterator</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect"><CODE>ForwardingList</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect"><CODE>ForwardingListIterator</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect"><CODE>ForwardingMap</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect"><CODE>ForwardingMapEntry</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect"><CODE>ForwardingMultimap</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect"><CODE>ForwardingMultiset</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect"><CODE>ForwardingQueue</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect"><CODE>ForwardingSet</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect"><CODE>ForwardingSortedMap</CODE></A>
+ <dt><A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect"><CODE>ForwardingSortedSet</CODE></A>
+ </dl>
+<P>
+
+<P>
+<DL>
+</DL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
+&nbsp;NEXT PACKAGE</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/package-summary.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/package-tree.html b/javadoc/com/google/common/collect/package-tree.html
new file mode 100644
index 0000000..4f87a4f
--- /dev/null
+++ b/javadoc/com/google/common/collect/package-tree.html
@@ -0,0 +1,241 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+com.google.common.collect Class Hierarchy (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="com.google.common.collect Class Hierarchy (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/package-tree.html"><B>PREV</B></A>&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/package-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+Hierarchy For Package com.google.common.collect
+</H2>
+</CENTER>
+<DL>
+<DT><B>Package Hierarchies:</B><DD><A HREF="../../../../overview-tree.html">All Packages</A></DL>
+<HR>
+<H2>
+Class Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><B>Object</B></A><UL>
+<LI TYPE="circle">java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util"><B>AbstractCollection</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;)
+<UL>
+<LI TYPE="circle">java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractSet.html?is-external=true" title="class or interface in java.util"><B>AbstractSet</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;)
+<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect"><B>Sets.SetView</B></A>&lt;E&gt;</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect"><B>ConcurrentHashMultiset</B></A>&lt;E&gt; (implements java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect"><B>EnumMultiset</B></A>&lt;E&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect"><B>HashMultiset</B></A>&lt;E&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect"><B>LinkedHashMultiset</B></A>&lt;E&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect"><B>TreeMultiset</B></A>&lt;E&gt;</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect"><B>ArrayListMultimap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/Collections2.html" title="class in com.google.common.collect"><B>Collections2</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><B>ForwardingObject</B></A><UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect"><B>ForwardingCollection</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;)
+<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect"><B>ForwardingList</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt;)
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect"><B>ForwardingMultiset</B></A>&lt;E&gt; (implements com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;)
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect"><B>ForwardingQueue</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</A>&lt;E&gt;)
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect"><B>ForwardingSet</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;)
+<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect"><B>ForwardingSortedSet</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;E&gt;)
+</UL>
+</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect"><B>ForwardingIterator</B></A>&lt;T&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;)
+<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect"><B>ForwardingListIterator</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;E&gt;)
+</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect"><B>ForwardingMap</B></A>&lt;K,V&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;)
+<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect"><B>EnumBiMap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect"><B>EnumHashBiMap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect"><B>ForwardingConcurrentMap</B></A>&lt;K,V&gt; (implements java.util.concurrent.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;K,V&gt;)
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect"><B>ForwardingSortedMap</B></A>&lt;K,V&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;K,V&gt;)
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect"><B>HashBiMap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>ImmutableClassToInstanceMap</B></A>&lt;B&gt; (implements com.google.common.collect.<A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>&lt;B&gt;)
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>MutableClassToInstanceMap</B></A>&lt;B&gt; (implements com.google.common.collect.<A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>&lt;B&gt;)
+</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect"><B>ForwardingMapEntry</B></A>&lt;K,V&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;)
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect"><B>ForwardingMultimap</B></A>&lt;K,V&gt; (implements com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;)
+</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect"><B>HashMultimap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect"><B>ImmutableClassToInstanceMap.Builder</B></A>&lt;B&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect"><B>ImmutableCollection</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;, java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
+<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect"><B>ImmutableList</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt;, java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util">RandomAccess</A>)
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect"><B>ImmutableMultiset</B></A>&lt;E&gt; (implements com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;)
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect"><B>ImmutableSet</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;)
+<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect"><B>ImmutableSortedSet</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;E&gt;)
+</UL>
+</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect"><B>ImmutableList.Builder</B></A>&lt;E&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><B>ImmutableMap</B></A>&lt;K,V&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;, java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
+<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect"><B>ImmutableBiMap</B></A>&lt;K,V&gt; (implements com.google.common.collect.<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;)
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect"><B>ImmutableSortedMap</B></A>&lt;K,V&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;K,V&gt;)
+</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect"><B>ImmutableMap.Builder</B></A>&lt;K,V&gt;<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect"><B>ImmutableBiMap.Builder</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect"><B>ImmutableSortedMap.Builder</B></A>&lt;K,V&gt;</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect"><B>ImmutableMultimap</B></A>&lt;K,V&gt; (implements com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;, java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
+<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect"><B>ImmutableListMultimap</B></A>&lt;K,V&gt; (implements com.google.common.collect.<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;)
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect"><B>ImmutableSetMultimap</B></A>&lt;K,V&gt; (implements com.google.common.collect.<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;)
+</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect"><B>ImmutableMultimap.Builder</B></A>&lt;K,V&gt;<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect"><B>ImmutableListMultimap.Builder</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect"><B>ImmutableSetMultimap.Builder</B></A>&lt;K,V&gt;</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect"><B>ImmutableMultiset.Builder</B></A>&lt;E&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect"><B>ImmutableSet.Builder</B></A>&lt;E&gt;<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect"><B>ImmutableSortedSet.Builder</B></A>&lt;E&gt;</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/Iterables.html" title="class in com.google.common.collect"><B>Iterables</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/Iterators.html" title="class in com.google.common.collect"><B>Iterators</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect"><B>LinkedHashMultimap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect"><B>LinkedListMultimap</B></A>&lt;K,V&gt; (implements com.google.common.collect.<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;, java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/Lists.html" title="class in com.google.common.collect"><B>Lists</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect"><B>MapMaker</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/Maps.html" title="class in com.google.common.collect"><B>Maps</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multimaps.html" title="class in com.google.common.collect"><B>Multimaps</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multisets.html" title="class in com.google.common.collect"><B>Multisets</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect"><B>ObjectArrays</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect"><B>Ordering</B></A>&lt;T&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;T&gt;)
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/Sets.html" title="class in com.google.common.collect"><B>Sets</B></A><LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang"><B>Throwable</B></A> (implements java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
+<UL>
+<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang"><B>Exception</B></A><UL>
+<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang"><B>RuntimeException</B></A><UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect"><B>ComputationException</B></A><UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect"><B>AsynchronousComputationException</B></A></UL>
+</UL>
+</UL>
+</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect"><B>TreeMultimap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect"><B>UnmodifiableIterator</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;)
+<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect"><B>AbstractIterator</B></A>&lt;T&gt;</UL>
+</UL>
+</UL>
+<H2>
+Interface Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang"><B>Iterable</B></A>&lt;T&gt;<UL>
+<LI TYPE="circle">java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><B>Collection</B></A>&lt;E&gt;<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><B>Multiset</B></A>&lt;E&gt;</UL>
+</UL>
+<LI TYPE="circle">java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util"><B>Iterator</B></A>&lt;E&gt;<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect"><B>PeekingIterator</B></A>&lt;E&gt;</UL>
+<LI TYPE="circle">java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><B>Map</B></A>&lt;K,V&gt;<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><B>BiMap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect"><B>ClassToInstanceMap</B></A>&lt;B&gt;</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect"><B>MapDifference</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect"><B>MapDifference.ValueDifference</B></A>&lt;V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><B>Multimap</B></A>&lt;K,V&gt;<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><B>ListMultimap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><B>SetMultimap</B></A>&lt;K,V&gt;<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect"><B>SortedSetMultimap</B></A>&lt;K,V&gt;</UL>
+</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect"><B>Multiset.Entry</B></A>&lt;E&gt;</UL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/google/common/base/package-tree.html"><B>PREV</B></A>&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/package-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/common/collect/package-use.html b/javadoc/com/google/common/collect/package-use.html
new file mode 100644
index 0000000..b2301fc
--- /dev/null
+++ b/javadoc/com/google/common/collect/package-use.html
@@ -0,0 +1,545 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Uses of Package com.google.common.collect (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Package com.google.common.collect (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/package-use.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Package<br>com.google.common.collect</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.google.common.collect"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Classes in <A HREF="../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> used by <A HREF="../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ArrayListMultimap.html#com.google.common.collect"><B>ArrayListMultimap</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <code>Multimap</code> that uses an <code>ArrayList</code> to store
+ the values for a given key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/BiMap.html#com.google.common.collect"><B>BiMap</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A bimap (or "bidirectional map") is a map that preserves the uniqueness of
+ its values as well as that of its keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ClassToInstanceMap.html#com.google.common.collect"><B>ClassToInstanceMap</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A map, each entry of which maps a Java
+ <a href="http://tinyurl.com/2cmwkz">raw type</a> to an instance of that type.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ComputationException.html#com.google.common.collect"><B>ComputationException</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wraps an exception that occured during a computation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ConcurrentHashMultiset.html#com.google.common.collect"><B>ConcurrentHashMultiset</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A multiset that supports concurrent modifications and that provides atomic
+ versions of most <code>Multiset</code> operations (exceptions where noted).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/EnumBiMap.html#com.google.common.collect"><B>EnumBiMap</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>BiMap</code> backed by two <code>EnumMap</code> instances.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/EnumHashBiMap.html#com.google.common.collect"><B>EnumHashBiMap</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>BiMap</code> backed by an <code>EnumMap</code> instance for keys-to-values, and
+ a <code>HashMap</code> instance for values-to-keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/EnumMultiset.html#com.google.common.collect"><B>EnumMultiset</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Multiset implementation backed by an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumMap.html?is-external=true" title="class or interface in java.util"><CODE>EnumMap</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ForwardingCollection.html#com.google.common.collect"><B>ForwardingCollection</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A collection which forwards all its method calls to another collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ForwardingIterator.html#com.google.common.collect"><B>ForwardingIterator</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An iterator which forwards all its method calls to another iterator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ForwardingMap.html#com.google.common.collect"><B>ForwardingMap</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A map which forwards all its method calls to another map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ForwardingObject.html#com.google.common.collect"><B>ForwardingObject</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An abstract base class for implementing the <a
+ href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ForwardingSet.html#com.google.common.collect"><B>ForwardingSet</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A set which forwards all its method calls to another set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/HashBiMap.html#com.google.common.collect"><B>HashBiMap</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> backed by two <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> instances.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/HashMultimap.html#com.google.common.collect"><B>HashMultimap</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> using hash tables.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/HashMultiset.html#com.google.common.collect"><B>HashMultiset</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Multiset implementation backed by a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableBiMap.html#com.google.common.collect"><B>ImmutableBiMap</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> with reliable user-specified iteration order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableBiMap.Builder.html#com.google.common.collect"><B>ImmutableBiMap.Builder</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable bimap instances, especially <code>public
+ static final</code> bimaps ("constant bimaps").</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableClassToInstanceMap.html#com.google.common.collect"><B>ImmutableClassToInstanceMap</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A class-to-instance map backed by an <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><CODE>ImmutableMap</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableClassToInstanceMap.Builder.html#com.google.common.collect"><B>ImmutableClassToInstanceMap.Builder</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable class-to-instance maps.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableCollection.html#com.google.common.collect"><B>ImmutableCollection</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableList.html#com.google.common.collect"><B>ImmutableList</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A high-performance, immutable, random-access <code>List</code> implementation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableList.Builder.html#com.google.common.collect"><B>ImmutableList.Builder</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable list instances, especially
+ <code>public static final</code> lists ("constant lists").</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableListMultimap.html#com.google.common.collect"><B>ImmutableListMultimap</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A> with reliable user-specified key and value
+ iteration order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableListMultimap.Builder.html#com.google.common.collect"><B>ImmutableListMultimap.Builder</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable <code>ListMultimap</code> instances, especially
+ <code>public static final</code> multimaps ("constant multimaps").</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableMap.html#com.google.common.collect"><B>ImmutableMap</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable, hash-based <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> with reliable user-specified iteration
+ order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableMap.Builder.html#com.google.common.collect"><B>ImmutableMap.Builder</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable map instances, especially <code>public
+ static final</code> maps ("constant maps").</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableMultimap.html#com.google.common.collect"><B>ImmutableMultimap</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableMultimap.Builder.html#com.google.common.collect"><B>ImmutableMultimap.Builder</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable multimap instances, especially
+ <code>public static final</code> multimaps ("constant multimaps").</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableMultiset.html#com.google.common.collect"><B>ImmutableMultiset</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable hash-based multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableMultiset.Builder.html#com.google.common.collect"><B>ImmutableMultiset.Builder</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable multiset instances, especially
+ <code>public static final</code> multisets ("constant multisets").</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableSet.html#com.google.common.collect"><B>ImmutableSet</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A high-performance, immutable <code>Set</code> with reliable, user-specified
+ iteration order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableSet.Builder.html#com.google.common.collect"><B>ImmutableSet.Builder</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable set instances, especially
+ <code>public static final</code> sets ("constant sets").</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableSetMultimap.html#com.google.common.collect"><B>ImmutableSetMultimap</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A> with reliable user-specified key and value
+ iteration order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableSetMultimap.Builder.html#com.google.common.collect"><B>ImmutableSetMultimap.Builder</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable <code>SetMultimap</code> instances, especially
+ <code>public static final</code> multimaps ("constant multimaps").</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableSortedMap.html#com.google.common.collect"><B>ImmutableSortedMap</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util"><CODE>SortedMap</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableSortedMap.Builder.html#com.google.common.collect"><B>ImmutableSortedMap.Builder</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable sorted map instances, especially <code>public static final</code> maps ("constant maps").</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableSortedSet.html#com.google.common.collect"><B>ImmutableSortedSet</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <code>SortedSet</code> that stores its elements in a sorted array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableSortedSet.Builder.html#com.google.common.collect"><B>ImmutableSortedSet.Builder</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable sorted set instances, especially
+ <code>public static final</code> sets ("constant sets"), with a given
+ comparator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/LinkedHashMultimap.html#com.google.common.collect"><B>LinkedHashMultimap</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <code>Multimap</code> that does not allow duplicate key-value
+ entries and that returns collections whose iterators follow the ordering in
+ which the data was added to the multimap.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/LinkedHashMultiset.html#com.google.common.collect"><B>LinkedHashMultiset</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>Multiset</code> implementation with predictable iteration order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/LinkedListMultimap.html#com.google.common.collect"><B>LinkedListMultimap</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An implementation of <code>ListMultimap</code> that supports deterministic
+ iteration order for both keys and values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/ListMultimap.html#com.google.common.collect"><B>ListMultimap</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>Multimap</code> that can hold duplicate key-value pairs and that maintains
+ the insertion ordering of values for a given key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/MapDifference.html#com.google.common.collect"><B>MapDifference</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An object representing the differences between two maps.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/MapDifference.ValueDifference.html#com.google.common.collect"><B>MapDifference.ValueDifference</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A difference between the mappings from two maps with the same key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/MapMaker.html#com.google.common.collect"><B>MapMaker</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ConcurrentMap</CODE></A> builder, providing any combination of these
+ features: <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref">soft</A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref">weak</A> keys, soft or weak values, timed expiration, and on-demand
+ computation of values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/Multimap.html#com.google.common.collect"><B>Multimap</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A collection similar to a <code>Map</code>, but which may associate multiple
+ values with a single key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/Multiset.html#com.google.common.collect"><B>Multiset</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A collection that supports order-independent equality, like <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>, but
+ may have duplicate elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/Multiset.Entry.html#com.google.common.collect"><B>Multiset.Entry</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An unmodifiable element-count pair for a multiset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/MutableClassToInstanceMap.html#com.google.common.collect"><B>MutableClassToInstanceMap</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A mutable class-to-instance map backed by an arbitrary user-provided map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/Ordering.html#com.google.common.collect"><B>Ordering</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A comparator with added methods to support common functions.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/PeekingIterator.html#com.google.common.collect"><B>PeekingIterator</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An iterator that supports a one-element lookahead while iterating.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/SetMultimap.html#com.google.common.collect"><B>SetMultimap</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>Multimap</code> that cannot hold duplicate key-value pairs.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/Sets.SetView.html#com.google.common.collect"><B>Sets.SetView</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An unmodifiable view of a set which may be backed by other sets; this view
+ will change as the backing sets do.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/SortedSetMultimap.html#com.google.common.collect"><B>SortedSetMultimap</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>SetMultimap</code> whose set of values for a given key are kept sorted;
+ that is, they comprise a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/TreeMultimap.html#com.google.common.collect"><B>TreeMultimap</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <code>Multimap</code> whose keys and values are ordered by
+ their natural ordering or by supplied comparators.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/TreeMultiset.html#com.google.common.collect"><B>TreeMultiset</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A multiset which maintains the ordering of its elements, according to either
+ their natural order or an explicit <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util"><CODE>Comparator</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/google/common/collect/class-use/UnmodifiableIterator.html#com.google.common.collect"><B>UnmodifiableIterator</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An iterator that does not support <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html#remove()"><CODE>UnmodifiableIterator.remove()</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/google/common/collect/package-use.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/constant-values.html b/javadoc/constant-values.html
new file mode 100644
index 0000000..0cadd04
--- /dev/null
+++ b/javadoc/constant-values.html
@@ -0,0 +1,146 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Constant Field Values (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Constant Field Values (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html?constant-values.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="constant-values.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H1>
+Constant Field Values</H1>
+</CENTER>
+<HR SIZE="4" NOSHADE>
+<B>Contents</B><UL>
+</UL>
+
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html?constant-values.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="constant-values.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/deprecated-list.html b/javadoc/deprecated-list.html
new file mode 100644
index 0000000..7326af5
--- /dev/null
+++ b/javadoc/deprecated-list.html
@@ -0,0 +1,161 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:18 PST 2009 -->
+<TITLE>
+Deprecated List (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Deprecated List (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Deprecated</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html?deprecated-list.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="deprecated-list.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Deprecated API</B></H2>
+</CENTER>
+<HR SIZE="4" NOSHADE>
+<B>Contents</B><UL>
+<LI><A HREF="#method">Deprecated Methods</A>
+</UL>
+
+<A NAME="method"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Deprecated Methods</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/google/common/collect/Ordering.html#from(com.google.common.collect.Ordering)">com.google.common.collect.Ordering.from(Ordering<T>)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>no need to use this</I>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Deprecated</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html?deprecated-list.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="deprecated-list.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/help-doc.html b/javadoc/help-doc.html
new file mode 100644
index 0000000..76dccc8
--- /dev/null
+++ b/javadoc/help-doc.html
@@ -0,0 +1,223 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:18 PST 2009 -->
+<TITLE>
+API Help (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="API Help (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html?help-doc.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="help-doc.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H1>
+How This API Document Is Organized</H1>
+</CENTER>
+This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.<H3>
+Overview</H3>
+<BLOCKQUOTE>
+
+<P>
+The <A HREF="overview-summary.html">Overview</A> page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.</BLOCKQUOTE>
+<H3>
+Package</H3>
+<BLOCKQUOTE>
+
+<P>
+Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:<UL>
+<LI>Interfaces (italic)<LI>Classes<LI>Enums<LI>Exceptions<LI>Errors<LI>Annotation Types</UL>
+</BLOCKQUOTE>
+<H3>
+Class/Interface</H3>
+<BLOCKQUOTE>
+
+<P>
+Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:<UL>
+<LI>Class inheritance diagram<LI>Direct Subclasses<LI>All Known Subinterfaces<LI>All Known Implementing Classes<LI>Class/interface declaration<LI>Class/interface description
+<P>
+<LI>Nested Class Summary<LI>Field Summary<LI>Constructor Summary<LI>Method Summary
+<P>
+<LI>Field Detail<LI>Constructor Detail<LI>Method Detail</UL>
+Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.</BLOCKQUOTE>
+</BLOCKQUOTE>
+<H3>
+Annotation Type</H3>
+<BLOCKQUOTE>
+
+<P>
+Each annotation type has its own separate page with the following sections:<UL>
+<LI>Annotation Type declaration<LI>Annotation Type description<LI>Required Element Summary<LI>Optional Element Summary<LI>Element Detail</UL>
+</BLOCKQUOTE>
+</BLOCKQUOTE>
+<H3>
+Enum</H3>
+<BLOCKQUOTE>
+
+<P>
+Each enum has its own separate page with the following sections:<UL>
+<LI>Enum declaration<LI>Enum description<LI>Enum Constant Summary<LI>Enum Constant Detail</UL>
+</BLOCKQUOTE>
+<H3>
+Use</H3>
+<BLOCKQUOTE>
+Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.</BLOCKQUOTE>
+<H3>
+Tree (Class Hierarchy)</H3>
+<BLOCKQUOTE>
+There is a <A HREF="overview-tree.html">Class Hierarchy</A> page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with <code>java.lang.Object</code>. The interfaces do not inherit from <code>java.lang.Object</code>.<UL>
+<LI>When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.<LI>When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.</UL>
+</BLOCKQUOTE>
+<H3>
+Deprecated API</H3>
+<BLOCKQUOTE>
+The <A HREF="deprecated-list.html">Deprecated API</A> page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.</BLOCKQUOTE>
+<H3>
+Index</H3>
+<BLOCKQUOTE>
+The <A HREF="index-all.html">Index</A> contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.</BLOCKQUOTE>
+<H3>
+Prev/Next</H3>
+These links take you to the next or previous class, interface, package, or related page.<H3>
+Frames/No Frames</H3>
+These links show and hide the HTML frames. All pages are available with or without frames.
+<P>
+<H3>
+Serialized Form</H3>
+Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.
+<P>
+<H3>
+Constant Field Values</H3>
+The <a href="constant-values.html">Constant Field Values</a> page lists the static final fields and their values.
+<P>
+<FONT SIZE="-1">
+<EM>
+This help file applies to API documentation generated using the standard doclet.</EM>
+</FONT>
+<BR>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html?help-doc.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="help-doc.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/index-all.html b/javadoc/index-all.html
new file mode 100644
index 0000000..9baebfb
--- /dev/null
+++ b/javadoc/index-all.html
@@ -0,0 +1,3060 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Index (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="./stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Index (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="./index.html?index-all.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="index-all.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="./allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="./allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<A HREF="#_A_">A</A> <A HREF="#_B_">B</A> <A HREF="#_C_">C</A> <A HREF="#_D_">D</A> <A HREF="#_E_">E</A> <A HREF="#_F_">F</A> <A HREF="#_G_">G</A> <A HREF="#_H_">H</A> <A HREF="#_I_">I</A> <A HREF="#_J_">J</A> <A HREF="#_K_">K</A> <A HREF="#_L_">L</A> <A HREF="#_M_">M</A> <A HREF="#_N_">N</A> <A HREF="#_O_">O</A> <A HREF="#_P_">P</A> <A HREF="#_R_">R</A> <A HREF="#_S_">S</A> <A HREF="#_T_">T</A> <A HREF="#_U_">U</A> <A HREF="#_V_">V</A> <A HREF="#_W_">W</A> <HR>
+<A NAME="_A_"><!-- --></A><H2>
+<B>A</B></H2>
+<DL>
+<DT><A HREF="./com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect"><B>AbstractIterator</B></A>&lt;<A HREF="./com/google/common/collect/AbstractIterator.html" title="type parameter in AbstractIterator">T</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>This class provides a skeletal implementation of the <code>Iterator</code>
+ interface, to make this interface easier to implement for certain types of
+ data sources.<DT><A HREF="./com/google/common/collect/AbstractIterator.html#AbstractIterator()"><B>AbstractIterator()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect">AbstractIterator</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ConcurrentHashMultiset.html#add(E, int)"><B>add(E, int)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>
+<DD>Adds a number of occurrences of the specified element to this multiset.
+<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#add(E)"><B>add(E)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingList.html#add(int, E)"><B>add(int, E)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingListIterator.html#add(E)"><B>add(E)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMultiset.html#add(E, int)"><B>add(E, int)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#add(E)"><B>add(E)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
+<DD>Guaranteed to throw an exception and leave the collection unmodified.
+<DT><A HREF="./com/google/common/collect/ImmutableList.html#add(int, E)"><B>add(int, E)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
+<DD>Guaranteed to throw an exception and leave the list unmodified.
+<DT><A HREF="./com/google/common/collect/ImmutableList.Builder.html#add(E)"><B>add(E)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>
+<DD>Adds <code>element</code> to the <code>ImmutableList</code>.
+<DT><A HREF="./com/google/common/collect/ImmutableList.Builder.html#add(E...)"><B>add(E...)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>
+<DD>Adds each element of <code>elements</code> to the <code>ImmutableList</code>.
+<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#add(E, int)"><B>add(E, int)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
+<DD>Guaranteed to throw an exception and leave the collection unmodified.
+<DT><A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html#add(E)"><B>add(E)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>
+<DD>Adds <code>element</code> to the <code>ImmutableMultiset</code>.
+<DT><A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html#add(E...)"><B>add(E...)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>
+<DD>Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.
+<DT><A HREF="./com/google/common/collect/ImmutableSet.Builder.html#add(E)"><B>add(E)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>
+<DD>Adds <code>element</code> to the <code>ImmutableSet</code>.
+<DT><A HREF="./com/google/common/collect/ImmutableSet.Builder.html#add(E...)"><B>add(E...)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>
+<DD>Adds each element of <code>elements</code> to the <code>ImmutableSet</code>,
+ ignoring duplicate elements (only the first duplicate element is added).
+<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html#add(E)"><B>add(E)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>
+<DD>Adds <code>element</code> to the <code>ImmutableSortedSet</code>.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html#add(E...)"><B>add(E...)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>
+<DD>Adds each element of <code>elements</code> to the <code>ImmutableSortedSet</code>,
+ ignoring duplicate elements (only the first duplicate element is added).
+<DT><A HREF="./com/google/common/collect/Multiset.html#add(E, int)"><B>add(E, int)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
+<DD>Adds a number of occurrences of an element to this multiset.
+<DT><A HREF="./com/google/common/collect/Multiset.html#add(E)"><B>add(E)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
+<DD>Adds a single occurrence of the specified element to this multiset.
+<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#addAll(java.util.Collection)"><B>addAll(Collection&lt;? extends E&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingList.html#addAll(int, java.util.Collection)"><B>addAll(int, Collection&lt;? extends E&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#addAll(java.util.Collection)"><B>addAll(Collection&lt;? extends E&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
+<DD>Guaranteed to throw an exception and leave the collection unmodified.
+<DT><A HREF="./com/google/common/collect/ImmutableList.html#addAll(int, java.util.Collection)"><B>addAll(int, Collection&lt;? extends E&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
+<DD>Guaranteed to throw an exception and leave the list unmodified.
+<DT><A HREF="./com/google/common/collect/ImmutableList.Builder.html#addAll(java.lang.Iterable)"><B>addAll(Iterable&lt;? extends E&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>
+<DD>Adds each element of <code>elements</code> to the <code>ImmutableList</code>.
+<DT><A HREF="./com/google/common/collect/ImmutableList.Builder.html#addAll(java.util.Iterator)"><B>addAll(Iterator&lt;? extends E&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>
+<DD>Adds each element of <code>elements</code> to the <code>ImmutableList</code>.
+<DT><A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html#addAll(java.lang.Iterable)"><B>addAll(Iterable&lt;? extends E&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>
+<DD>Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.
+<DT><A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html#addAll(java.util.Iterator)"><B>addAll(Iterator&lt;? extends E&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>
+<DD>Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.
+<DT><A HREF="./com/google/common/collect/ImmutableSet.Builder.html#addAll(java.lang.Iterable)"><B>addAll(Iterable&lt;? extends E&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>
+<DD>Adds each element of <code>elements</code> to the <code>ImmutableSet</code>,
+ ignoring duplicate elements (only the first duplicate element is added).
+<DT><A HREF="./com/google/common/collect/ImmutableSet.Builder.html#addAll(java.util.Iterator)"><B>addAll(Iterator&lt;? extends E&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>
+<DD>Adds each element of <code>elements</code> to the <code>ImmutableSet</code>,
+ ignoring duplicate elements (only the first duplicate element is added).
+<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html#addAll(java.lang.Iterable)"><B>addAll(Iterable&lt;? extends E&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>
+<DD>Adds each element of <code>elements</code> to the <code>ImmutableSortedSet</code>,
+ ignoring duplicate elements (only the first duplicate element is added).
+<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html#addAll(java.util.Iterator)"><B>addAll(Iterator&lt;? extends E&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>
+<DD>Adds each element of <code>elements</code> to the <code>ImmutableSortedSet</code>,
+ ignoring duplicate elements (only the first duplicate element is added).
+<DT><A HREF="./com/google/common/collect/Iterables.html#addAll(java.util.Collection, java.lang.Iterable)"><B>addAll(Collection&lt;T&gt;, Iterable&lt;? extends T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Adds all elements in <code>iterable</code> to <code>collection</code>.
+<DT><A HREF="./com/google/common/collect/Iterators.html#addAll(java.util.Collection, java.util.Iterator)"><B>addAll(Collection&lt;T&gt;, Iterator&lt;? extends T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Adds all elements in <code>iterator</code> to <code>collection</code>.
+<DT><A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html#addCopies(E, int)"><B>addCopies(E, int)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>
+<DD>Adds a number of occurrences of an element to this <code>ImmutableMultiset</code>.
+<DT><A HREF="./com/google/common/collect/Iterables.html#all(java.lang.Iterable, com.google.common.base.Predicate)"><B>all(Iterable&lt;T&gt;, Predicate&lt;? super T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Returns <code>true</code> if every element in <code>iterable</code> satisfies the
+ predicate.
+<DT><A HREF="./com/google/common/collect/Iterators.html#all(java.util.Iterator, com.google.common.base.Predicate)"><B>all(Iterator&lt;T&gt;, Predicate&lt;? super T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Returns <code>true</code> if every element returned by <code>iterator</code>
+ satisfies the given predicate.
+<DT><A HREF="./com/google/common/base/Predicates.html#alwaysFalse()"><B>alwaysFalse()</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
+<DD>Returns a predicate that always evaluates to <code>false</code>.
+<DT><A HREF="./com/google/common/base/Predicates.html#alwaysTrue()"><B>alwaysTrue()</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
+<DD>Returns a predicate that always evaluates to <code>true</code>.
+<DT><A HREF="./com/google/common/base/Predicates.html#and(java.lang.Iterable)"><B>and(Iterable&lt;? extends Predicate&lt;? super T&gt;&gt;)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
+<DD>Returns a predicate that evaluates to <code>true</code> if each of its
+ components evaluates to <code>true</code>.
+<DT><A HREF="./com/google/common/base/Predicates.html#and(com.google.common.base.Predicate...)"><B>and(Predicate&lt;? super T&gt;...)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
+<DD>Returns a predicate that evaluates to <code>true</code> if each of its
+ components evaluates to <code>true</code>.
+<DT><A HREF="./com/google/common/base/Predicates.html#and(com.google.common.base.Predicate, com.google.common.base.Predicate)"><B>and(Predicate&lt;? super T&gt;, Predicate&lt;? super T&gt;)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
+<DD>Returns a predicate that evaluates to <code>true</code> if both of its
+ components evaluate to <code>true</code>.
+<DT><A HREF="./com/google/common/collect/Iterables.html#any(java.lang.Iterable, com.google.common.base.Predicate)"><B>any(Iterable&lt;T&gt;, Predicate&lt;? super T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Returns <code>true</code> if one or more elements in <code>iterable</code> satisfy
+ the predicate.
+<DT><A HREF="./com/google/common/collect/Iterators.html#any(java.util.Iterator, com.google.common.base.Predicate)"><B>any(Iterator&lt;T&gt;, Predicate&lt;? super T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Returns <code>true</code> if one or more elements returned by <code>iterator</code>
+ satisfy the given predicate.
+<DT><A HREF="./com/google/common/base/Joiner.html#appendTo(A, java.lang.Iterable)"><B>appendTo(A, Iterable&lt;?&gt;)</B></A> -
+Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
+<DD>Appends the string representation of each of <code>parts</code>, using the
+ previously configured separator between each, to <code>appendable</code>.
+<DT><A HREF="./com/google/common/base/Joiner.html#appendTo(A, java.lang.Object[])"><B>appendTo(A, Object[])</B></A> -
+Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
+<DD>Appends the string representation of each of <code>parts</code>, using the
+ previously configured separator between each, to <code>appendable</code>.
+<DT><A HREF="./com/google/common/base/Joiner.html#appendTo(A, java.lang.Object, java.lang.Object, java.lang.Object...)"><B>appendTo(A, Object, Object, Object...)</B></A> -
+Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
+<DD>Appends to <code>appendable</code> the string representation of each of the
+ remaining arguments.
+<DT><A HREF="./com/google/common/base/Joiner.html#appendTo(java.lang.StringBuilder, java.lang.Iterable)"><B>appendTo(StringBuilder, Iterable&lt;?&gt;)</B></A> -
+Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
+<DD>Appends the string representation of each of <code>parts</code>, using the
+ previously configured separator between each, to <code>builder</code>.
+<DT><A HREF="./com/google/common/base/Joiner.html#appendTo(java.lang.StringBuilder, java.lang.Object[])"><B>appendTo(StringBuilder, Object[])</B></A> -
+Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
+<DD>Appends the string representation of each of <code>parts</code>, using the
+ previously configured separator between each, to <code>builder</code>.
+<DT><A HREF="./com/google/common/base/Joiner.html#appendTo(java.lang.StringBuilder, java.lang.Object, java.lang.Object, java.lang.Object...)"><B>appendTo(StringBuilder, Object, Object, Object...)</B></A> -
+Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
+<DD>Appends to <code>builder</code> the string representation of each of the
+ remaining arguments.
+<DT><A HREF="./com/google/common/base/Joiner.MapJoiner.html#appendTo(A, java.util.Map)"><B>appendTo(A, Map&lt;?, ?&gt;)</B></A> -
+Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A>
+<DD>Appends the string representation of each entry of <code>map</code>, using the
+ previously configured separator and key-value separator, to <code>appendable</code>.
+<DT><A HREF="./com/google/common/base/Joiner.MapJoiner.html#appendTo(java.lang.StringBuilder, java.util.Map)"><B>appendTo(StringBuilder, Map&lt;?, ?&gt;)</B></A> -
+Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A>
+<DD>Appends the string representation of each entry of <code>map</code>, using the
+ previously configured separator and key-value separator, to <code>builder</code>.
+<DT><A HREF="./com/google/common/base/Function.html#apply(F)"><B>apply(F)</B></A> -
+Method in interface com.google.common.base.<A HREF="./com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>
+<DD>Applies the function to an object of type <code>F</code>, resulting in an object
+ of type <code>T</code>.
+<DT><A HREF="./com/google/common/base/Predicate.html#apply(T)"><B>apply(T)</B></A> -
+Method in interface com.google.common.base.<A HREF="./com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>
+<DD>Applies this predicate to the given object.
+<DT><A HREF="./com/google/common/collect/MapDifference.html#areEqual()"><B>areEqual()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A>
+<DD>Returns <code>true</code> if there are no differences between the two maps;
+ that is, if the maps are equal.
+<DT><A HREF="./com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect"><B>ArrayListMultimap</B></A>&lt;<A HREF="./com/google/common/collect/ArrayListMultimap.html" title="type parameter in ArrayListMultimap">K</A>,<A HREF="./com/google/common/collect/ArrayListMultimap.html" title="type parameter in ArrayListMultimap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Implementation of <code>Multimap</code> that uses an <code>ArrayList</code> to store
+ the values for a given key.<DT><A HREF="./com/google/common/collect/Iterators.html#asEnumeration(java.util.Iterator)"><B>asEnumeration(Iterator&lt;T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Adapts an <code>Iterator</code> to the <code>Enumeration</code> interface.
+<DT><A HREF="./com/google/common/collect/Lists.html#asList(E, E[])"><B>asList(E, E[])</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A>
+<DD>Returns an unmodifiable list containing the specified first element and
+ backed by the specified array of additional elements.
+<DT><A HREF="./com/google/common/collect/Lists.html#asList(E, E, E[])"><B>asList(E, E, E[])</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A>
+<DD>Returns an unmodifiable list containing the specified first and second
+ element, and backed by the specified array of additional elements.
+<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#asMap()"><B>asMap()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#asMap()"><B>asMap()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>Returns an immutable map that associates each key with its corresponding
+ values in the multimap.
+<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#asMap()"><B>asMap()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ListMultimap.html#asMap()"><B>asMap()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>
+<DD>Returns a map view that associates each key with the corresponding values
+ in the multimap.
+<DT><A HREF="./com/google/common/collect/Multimap.html#asMap()"><B>asMap()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
+<DD>Returns a map view that associates each key with the corresponding values
+ in the multimap.
+<DT><A HREF="./com/google/common/collect/SetMultimap.html#asMap()"><B>asMap()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>
+<DD>Returns a map view that associates each key with the corresponding values
+ in the multimap.
+<DT><A HREF="./com/google/common/collect/SortedSetMultimap.html#asMap()"><B>asMap()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>
+<DD>Returns a map view that associates each key with the corresponding values
+ in the multimap.
+<DT><A HREF="./com/google/common/collect/TreeMultimap.html#asMap()"><B>asMap()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>
+<DD>Returns a map view that associates each key with the corresponding values
+ in the multimap.
+<DT><A HREF="./com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect"><B>AsynchronousComputationException</B></A> - Exception in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Wraps an exception that occured during a computation in a different thread.<DT><A HREF="./com/google/common/collect/AsynchronousComputationException.html#AsynchronousComputationException(java.lang.Throwable)"><B>AsynchronousComputationException(Throwable)</B></A> -
+Constructor for exception com.google.common.collect.<A HREF="./com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect">AsynchronousComputationException</A>
+<DD>Creates a new instance with the given cause.
+</DL>
+<HR>
+<A NAME="_B_"><!-- --></A><H2>
+<B>B</B></H2>
+<DL>
+<DT><A HREF="./com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><B>BiMap</B></A>&lt;<A HREF="./com/google/common/collect/BiMap.html" title="type parameter in BiMap">K</A>,<A HREF="./com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>&gt; - Interface in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A bimap (or "bidirectional map") is a map that preserves the uniqueness of
+ its values as well as that of its keys.<DT><A HREF="./com/google/common/collect/Ordering.html#binarySearch(java.util.List, T)"><B>binarySearch(List&lt;? extends T&gt;, T)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
+<DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#binarySearch(java.util.List, T, java.util.Comparator)" title="class or interface in java.util"><CODE>Searches</CODE></A>
+ <code>sortedList</code> for <code>key</code> using the binary search algorithm.
+<DT><A HREF="./com/google/common/collect/ImmutableBiMap.Builder.html#build()"><B>build()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>
+<DD>Returns a newly-created immutable bimap.
+<DT><A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#build()"><B>build()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>
+<DD>Returns a new immutable class-to-instance map containing the entries
+ provided to this builder.
+<DT><A HREF="./com/google/common/collect/ImmutableList.Builder.html#build()"><B>build()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>
+<DD>Returns a newly-created <code>ImmutableList</code> based on the contents of
+ the <code>Builder</code>.
+<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html#build()"><B>build()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>
+<DD>Returns a newly-created immutable multimap.
+<DT><A HREF="./com/google/common/collect/ImmutableMap.Builder.html#build()"><B>build()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>
+<DD>Returns a newly-created immutable map.
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html#build()"><B>build()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>
+<DD>Returns a newly-created immutable multimap.
+<DT><A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html#build()"><B>build()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>
+<DD>Returns a newly-created <code>ImmutableMultiset</code> based on the contents
+ of the <code>Builder</code>.
+<DT><A HREF="./com/google/common/collect/ImmutableSet.Builder.html#build()"><B>build()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>
+<DD>Returns a newly-created <code>ImmutableSet</code> based on the contents of
+ the <code>Builder</code>.
+<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html#build()"><B>build()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>
+<DD>Returns a newly-created immutable set multimap.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.Builder.html#build()"><B>build()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>
+<DD>Returns a newly-created immutable sorted map.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html#build()"><B>build()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>
+<DD>Returns a newly-created <code>ImmutableSortedSet</code> based on the contents
+ of the <code>Builder</code> and its comparator.
+<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#builder()"><B>builder()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
+<DD>Returns a new builder.
+<DT><A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.html#builder()"><B>builder()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>
+<DD>Returns a new builder.
+<DT><A HREF="./com/google/common/collect/ImmutableList.html#builder()"><B>builder()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
+<DD>Returns a new builder.
+<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.html#builder()"><B>builder()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>
+<DD>Returns a new builder.
+<DT><A HREF="./com/google/common/collect/ImmutableMap.html#builder()"><B>builder()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
+<DD>Returns a new builder.
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#builder()"><B>builder()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>Returns a new builder.
+<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#builder()"><B>builder()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
+<DD>Returns a new builder.
+<DT><A HREF="./com/google/common/collect/ImmutableSet.html#builder()"><B>builder()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
+<DD>Returns a new builder.
+<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.html#builder()"><B>builder()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>
+<DD>Returns a new <A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableSetMultimap.Builder</CODE></A>.
+</DL>
+<HR>
+<A NAME="_C_"><!-- --></A><H2>
+<B>C</B></H2>
+<DL>
+<DT><A HREF="./com/google/common/base/Preconditions.html#checkArgument(boolean)"><B>checkArgument(boolean)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
+<DD>Ensures the truth of an expression involving one or more parameters to the
+ calling method.
+<DT><A HREF="./com/google/common/base/Preconditions.html#checkArgument(boolean, java.lang.Object)"><B>checkArgument(boolean, Object)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
+<DD>Ensures the truth of an expression involving one or more parameters to the
+ calling method.
+<DT><A HREF="./com/google/common/base/Preconditions.html#checkArgument(boolean, java.lang.String, java.lang.Object...)"><B>checkArgument(boolean, String, Object...)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
+<DD>Ensures the truth of an expression involving one or more parameters to the
+ calling method.
+<DT><A HREF="./com/google/common/base/Preconditions.html#checkElementIndex(int, int)"><B>checkElementIndex(int, int)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
+<DD>Ensures that <code>index</code> specifies a valid <i>element</i> in an array,
+ list or string of size <code>size</code>.
+<DT><A HREF="./com/google/common/base/Preconditions.html#checkElementIndex(int, int, java.lang.String)"><B>checkElementIndex(int, int, String)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
+<DD>Ensures that <code>index</code> specifies a valid <i>element</i> in an array,
+ list or string of size <code>size</code>.
+<DT><A HREF="./com/google/common/base/Preconditions.html#checkNotNull(T)"><B>checkNotNull(T)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
+<DD>Ensures that an object reference passed as a parameter to the calling
+ method is not null.
+<DT><A HREF="./com/google/common/base/Preconditions.html#checkNotNull(T, java.lang.Object)"><B>checkNotNull(T, Object)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
+<DD>Ensures that an object reference passed as a parameter to the calling
+ method is not null.
+<DT><A HREF="./com/google/common/base/Preconditions.html#checkNotNull(T, java.lang.String, java.lang.Object...)"><B>checkNotNull(T, String, Object...)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
+<DD>Ensures that an object reference passed as a parameter to the calling
+ method is not null.
+<DT><A HREF="./com/google/common/base/Preconditions.html#checkPositionIndex(int, int)"><B>checkPositionIndex(int, int)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
+<DD>Ensures that <code>index</code> specifies a valid <i>position</i> in an array,
+ list or string of size <code>size</code>.
+<DT><A HREF="./com/google/common/base/Preconditions.html#checkPositionIndex(int, int, java.lang.String)"><B>checkPositionIndex(int, int, String)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
+<DD>Ensures that <code>index</code> specifies a valid <i>position</i> in an array,
+ list or string of size <code>size</code>.
+<DT><A HREF="./com/google/common/base/Preconditions.html#checkPositionIndexes(int, int, int)"><B>checkPositionIndexes(int, int, int)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
+<DD>Ensures that <code>start</code> and <code>end</code> specify a valid <i>positions</i>
+ in an array, list or string of size <code>size</code>, and are in order.
+<DT><A HREF="./com/google/common/base/Preconditions.html#checkState(boolean)"><B>checkState(boolean)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
+<DD>Ensures the truth of an expression involving the state of the calling
+ instance, but not involving any parameters to the calling method.
+<DT><A HREF="./com/google/common/base/Preconditions.html#checkState(boolean, java.lang.Object)"><B>checkState(boolean, Object)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
+<DD>Ensures the truth of an expression involving the state of the calling
+ instance, but not involving any parameters to the calling method.
+<DT><A HREF="./com/google/common/base/Preconditions.html#checkState(boolean, java.lang.String, java.lang.Object...)"><B>checkState(boolean, String, Object...)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
+<DD>Ensures the truth of an expression involving the state of the calling
+ instance, but not involving any parameters to the calling method.
+<DT><A HREF="./com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect"><B>ClassToInstanceMap</B></A>&lt;<A HREF="./com/google/common/collect/ClassToInstanceMap.html" title="type parameter in ClassToInstanceMap">B</A>&gt; - Interface in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A map, each entry of which maps a Java
+ <a href="http://tinyurl.com/2cmwkz">raw type</a> to an instance of that type.<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#clear()"><B>clear()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMap.html#clear()"><B>clear()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#clear()"><B>clear()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#clear()"><B>clear()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
+<DD>Guaranteed to throw an exception and leave the collection unmodified.
+<DT><A HREF="./com/google/common/collect/ImmutableMap.html#clear()"><B>clear()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
+<DD>Guaranteed to throw an exception and leave the map unmodified.
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#clear()"><B>clear()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>Guaranteed to throw an exception and leave the multimap unmodified.
+<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#clear()"><B>clear()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Multimap.html#clear()"><B>clear()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
+<DD>Removes all key-value pairs from the multimap.
+<DT><A HREF="./com/google/common/collect/Collections2.html" title="class in com.google.common.collect"><B>Collections2</B></A> - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Provides static methods for working with <code>Collection</code> instances.<DT><A HREF="./com/google/common/annotations/package-summary.html"><B>com.google.common.annotations</B></A> - package com.google.common.annotations<DD>&nbsp;<DT><A HREF="./com/google/common/base/package-summary.html"><B>com.google.common.base</B></A> - package com.google.common.base<DD>Miscellaneous common util classes and annotations.<DT><A HREF="./com/google/common/collect/package-summary.html"><B>com.google.common.collect</B></A> - package com.google.common.collect<DD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.<DT><A HREF="./com/google/common/collect/ForwardingSortedMap.html#comparator()"><B>comparator()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingSortedSet.html#comparator()"><B>comparator()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#comparator()"><B>comparator()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
+<DD>Returns the comparator that orders the keys, which is
+ <A HREF="./com/google/common/collect/Ordering.html#natural()"><CODE>Ordering.natural()</CODE></A> when the natural ordering of the keys is used.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#comparator()"><B>comparator()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
+<DD>Returns the comparator that orders the elements, which is
+ <A HREF="./com/google/common/collect/Ordering.html#natural()"><CODE>Ordering.natural()</CODE></A> when the natural ordering of the
+ elements is used.
+<DT><A HREF="./com/google/common/collect/Sets.html#complementOf(java.util.Collection)"><B>complementOf(Collection&lt;E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
+<DD>Creates an <code>EnumSet</code> consisting of all enum values that are not in
+ the specified collection.
+<DT><A HREF="./com/google/common/collect/Sets.html#complementOf(java.util.Collection, java.lang.Class)"><B>complementOf(Collection&lt;E&gt;, Class&lt;E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
+<DD>Creates an <code>EnumSet</code> consisting of all enum values that are not in
+ the specified collection.
+<DT><A HREF="./com/google/common/base/Functions.html#compose(com.google.common.base.Function, com.google.common.base.Function)"><B>compose(Function&lt;B, C&gt;, Function&lt;A, ? extends B&gt;)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Functions.html" title="class in com.google.common.base">Functions</A>
+<DD>Returns the composition of two functions.
+<DT><A HREF="./com/google/common/base/Predicates.html#compose(com.google.common.base.Predicate, com.google.common.base.Function)"><B>compose(Predicate&lt;B&gt;, Function&lt;A, ? extends B&gt;)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
+<DD>Returns the composition of a function and a predicate.
+<DT><A HREF="./com/google/common/base/Suppliers.html#compose(com.google.common.base.Function, com.google.common.base.Supplier)"><B>compose(Function&lt;? super F, T&gt;, Supplier&lt;F&gt;)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Suppliers.html" title="class in com.google.common.base">Suppliers</A>
+<DD>Returns a new supplier which is the composition of the provided function
+ and supplier.
+<DT><A HREF="./com/google/common/collect/Ordering.html#compound(java.lang.Iterable)"><B>compound(Iterable&lt;? extends Comparator&lt;? super T&gt;&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
+<DD>Returns an ordering which tries each given comparator in order until a
+ non-zero result is found, returning that result, and returning zero only if
+ all comparators return zero.
+<DT><A HREF="./com/google/common/collect/Ordering.html#compound(java.util.Comparator)"><B>compound(Comparator&lt;? super U&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
+<DD>Returns an ordering which first uses the ordering <code>this</code>, but which
+ in the event of a "tie", then delegates to <code>secondaryComparator</code>.
+<DT><A HREF="./com/google/common/collect/ComputationException.html" title="class in com.google.common.collect"><B>ComputationException</B></A> - Exception in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Wraps an exception that occured during a computation.<DT><A HREF="./com/google/common/collect/ComputationException.html#ComputationException(java.lang.Throwable)"><B>ComputationException(Throwable)</B></A> -
+Constructor for exception com.google.common.collect.<A HREF="./com/google/common/collect/ComputationException.html" title="class in com.google.common.collect">ComputationException</A>
+<DD>Creates a new instance with the given cause.
+<DT><A HREF="./com/google/common/collect/AbstractIterator.html#computeNext()"><B>computeNext()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect">AbstractIterator</A>
+<DD>Returns the next element.
+<DT><A HREF="./com/google/common/collect/Iterables.html#concat(java.lang.Iterable, java.lang.Iterable)"><B>concat(Iterable&lt;? extends T&gt;, Iterable&lt;? extends T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Combines two iterables into a single iterable.
+<DT><A HREF="./com/google/common/collect/Iterables.html#concat(java.lang.Iterable, java.lang.Iterable, java.lang.Iterable)"><B>concat(Iterable&lt;? extends T&gt;, Iterable&lt;? extends T&gt;, Iterable&lt;? extends T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Combines three iterables into a single iterable.
+<DT><A HREF="./com/google/common/collect/Iterables.html#concat(java.lang.Iterable, java.lang.Iterable, java.lang.Iterable, java.lang.Iterable)"><B>concat(Iterable&lt;? extends T&gt;, Iterable&lt;? extends T&gt;, Iterable&lt;? extends T&gt;, Iterable&lt;? extends T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Combines four iterables into a single iterable.
+<DT><A HREF="./com/google/common/collect/Iterables.html#concat(java.lang.Iterable...)"><B>concat(Iterable&lt;? extends T&gt;...)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Combines multiple iterables into a single iterable.
+<DT><A HREF="./com/google/common/collect/Iterables.html#concat(java.lang.Iterable)"><B>concat(Iterable&lt;? extends Iterable&lt;? extends T&gt;&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Combines multiple iterables into a single iterable.
+<DT><A HREF="./com/google/common/collect/Iterators.html#concat(java.util.Iterator, java.util.Iterator)"><B>concat(Iterator&lt;? extends T&gt;, Iterator&lt;? extends T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Combines two iterators into a single iterator.
+<DT><A HREF="./com/google/common/collect/Iterators.html#concat(java.util.Iterator, java.util.Iterator, java.util.Iterator)"><B>concat(Iterator&lt;? extends T&gt;, Iterator&lt;? extends T&gt;, Iterator&lt;? extends T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Combines three iterators into a single iterator.
+<DT><A HREF="./com/google/common/collect/Iterators.html#concat(java.util.Iterator, java.util.Iterator, java.util.Iterator, java.util.Iterator)"><B>concat(Iterator&lt;? extends T&gt;, Iterator&lt;? extends T&gt;, Iterator&lt;? extends T&gt;, Iterator&lt;? extends T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Combines four iterators into a single iterator.
+<DT><A HREF="./com/google/common/collect/Iterators.html#concat(java.util.Iterator...)"><B>concat(Iterator&lt;? extends T&gt;...)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Combines multiple iterators into a single iterator.
+<DT><A HREF="./com/google/common/collect/Iterators.html#concat(java.util.Iterator)"><B>concat(Iterator&lt;? extends Iterator&lt;? extends T&gt;&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Combines multiple iterators into a single iterator.
+<DT><A HREF="./com/google/common/collect/ObjectArrays.html#concat(T[], T[], java.lang.Class)"><B>concat(T[], T[], Class&lt;T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect">ObjectArrays</A>
+<DD>Returns a new array that contains the concatenated contents of two arrays.
+<DT><A HREF="./com/google/common/collect/ObjectArrays.html#concat(T, T[])"><B>concat(T, T[])</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect">ObjectArrays</A>
+<DD>Returns a new array that prepends <code>element</code> to <code>array</code>.
+<DT><A HREF="./com/google/common/collect/ObjectArrays.html#concat(T[], T)"><B>concat(T[], T)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect">ObjectArrays</A>
+<DD>Returns a new array that appends <code>element</code> to <code>array</code>.
+<DT><A HREF="./com/google/common/collect/MapMaker.html#concurrencyLevel(int)"><B>concurrencyLevel(int)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A>
+<DD>Guides the allowed concurrency among update operations.
+<DT><A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect"><B>ConcurrentHashMultiset</B></A>&lt;<A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A multiset that supports concurrent modifications and that provides atomic
+ versions of most <code>Multiset</code> operations (exceptions where noted).<DT><A HREF="./com/google/common/base/Functions.html#constant(E)"><B>constant(E)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Functions.html" title="class in com.google.common.base">Functions</A>
+<DD>Creates a function that returns <code>value</code> for any input.
+<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#contains(java.lang.Object)"><B>contains(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#contains(java.lang.Object)"><B>contains(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#contains(java.lang.Object)"><B>contains(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Iterables.html#contains(java.lang.Iterable, java.lang.Object)"><B>contains(Iterable&lt;?&gt;, Object)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Returns <code>true</code> if <code>iterable</code> contains <code>element</code>; that is,
+ any object for while <code>equals(element)</code> is true.
+<DT><A HREF="./com/google/common/collect/Iterators.html#contains(java.util.Iterator, java.lang.Object)"><B>contains(Iterator&lt;?&gt;, Object)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Returns <code>true</code> if <code>iterator</code> contains <code>element</code>.
+<DT><A HREF="./com/google/common/collect/Multiset.html#contains(java.lang.Object)"><B>contains(Object)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
+<DD>Determines whether this multiset contains the specified element.
+<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#containsAll(java.util.Collection)"><B>containsAll(Collection&lt;?&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#containsAll(java.util.Collection)"><B>containsAll(Collection&lt;?&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Multiset.html#containsAll(java.util.Collection)"><B>containsAll(Collection&lt;?&gt;)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
+<DD>Returns <code>true</code> if this multiset contains at least one occurrence of
+ each element in the specified collection.
+<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#containsEntry(java.lang.Object, java.lang.Object)"><B>containsEntry(Object, Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#containsEntry(java.lang.Object, java.lang.Object)"><B>containsEntry(Object, Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#containsEntry(java.lang.Object, java.lang.Object)"><B>containsEntry(Object, Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)"><B>containsEntry(Object, Object)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
+<DD>Returns <code>true</code> if the multimap contains the specified key-value pair.
+<DT><A HREF="./com/google/common/collect/ForwardingMap.html#containsKey(java.lang.Object)"><B>containsKey(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#containsKey(java.lang.Object)"><B>containsKey(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#containsKey(java.lang.Object)"><B>containsKey(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMap.html#containsKey(java.lang.Object)"><B>containsKey(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#containsKey(java.lang.Object)"><B>containsKey(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#containsKey(java.lang.Object)"><B>containsKey(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Multimap.html#containsKey(java.lang.Object)"><B>containsKey(Object)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
+<DD>Returns <code>true</code> if the multimap contains any values for the specified
+ key.
+<DT><A HREF="./com/google/common/collect/ForwardingMap.html#containsValue(java.lang.Object)"><B>containsValue(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#containsValue(java.lang.Object)"><B>containsValue(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#containsValue(java.lang.Object)"><B>containsValue(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMap.html#containsValue(java.lang.Object)"><B>containsValue(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#containsValue(java.lang.Object)"><B>containsValue(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#containsValue(java.lang.Object)"><B>containsValue(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#containsValue(java.lang.Object)"><B>containsValue(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Multimap.html#containsValue(java.lang.Object)"><B>containsValue(Object)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
+<DD>Returns <code>true</code> if the multimap contains the specified value for any
+ key.
+<DT><A HREF="./com/google/common/collect/Sets.SetView.html#copyInto(S)"><B>copyInto(S)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A>
+<DD>Copies the current contents of this set view into an existing set.
+<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#copyOf(java.util.Map)"><B>copyOf(Map&lt;? extends K, ? extends V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
+<DD>Returns an immutable bimap containing the same entries as <code>map</code>.
+<DT><A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.html#copyOf(java.util.Map)"><B>copyOf(Map&lt;? extends Class&lt;? extends S&gt;, ? extends S&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>
+<DD>Returns an immutable map containing the same entries as <code>map</code>.
+<DT><A HREF="./com/google/common/collect/ImmutableList.html#copyOf(java.lang.Iterable)"><B>copyOf(Iterable&lt;? extends E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
+<DD>Returns an immutable list containing the given elements, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableList.html#copyOf(java.util.Iterator)"><B>copyOf(Iterator&lt;? extends E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
+<DD>Returns an immutable list containing the given elements, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.html#copyOf(com.google.common.collect.Multimap)"><B>copyOf(Multimap&lt;? extends K, ? extends V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>
+<DD>Returns an immutable multimap containing the same mappings as
+ <code>multimap</code>.
+<DT><A HREF="./com/google/common/collect/ImmutableMap.html#copyOf(java.util.Map)"><B>copyOf(Map&lt;? extends K, ? extends V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
+<DD>Returns an immutable map containing the same entries as <code>map</code>.
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#copyOf(com.google.common.collect.Multimap)"><B>copyOf(Multimap&lt;? extends K, ? extends V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>Returns an immutable multimap containing the same mappings as
+ <code>multimap</code>.
+<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#copyOf(java.lang.Iterable)"><B>copyOf(Iterable&lt;? extends E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
+<DD>Returns an immutable multiset containing the given elements.
+<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#copyOf(java.util.Iterator)"><B>copyOf(Iterator&lt;? extends E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
+<DD>Returns an immutable multiset containing the given elements.
+<DT><A HREF="./com/google/common/collect/ImmutableSet.html#copyOf(java.lang.Iterable)"><B>copyOf(Iterable&lt;? extends E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
+<DD>Returns an immutable set containing the given elements, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableSet.html#copyOf(java.util.Iterator)"><B>copyOf(Iterator&lt;? extends E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
+<DD>Returns an immutable set containing the given elements, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.html#copyOf(com.google.common.collect.Multimap)"><B>copyOf(Multimap&lt;? extends K, ? extends V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>
+<DD>Returns an immutable set multimap containing the same mappings as
+ <code>multimap</code>.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#copyOf(java.util.Map)"><B>copyOf(Map&lt;? extends K, ? extends V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
+<DD>Returns an immutable map containing the same entries as <code>map</code>, sorted
+ by the natural ordering of the keys.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#copyOf(java.util.Map, java.util.Comparator)"><B>copyOf(Map&lt;? extends K, ? extends V&gt;, Comparator&lt;? super K&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
+<DD>Returns an immutable map containing the same entries as <code>map</code>, with
+ keys sorted by the provided comparator.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#copyOf(java.lang.Iterable)"><B>copyOf(Iterable&lt;? extends E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
+<DD>Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#copyOf(java.util.Iterator)"><B>copyOf(Iterator&lt;? extends E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
+<DD>Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#copyOf(java.util.Comparator, java.lang.Iterable)"><B>copyOf(Comparator&lt;? super E&gt;, Iterable&lt;? extends E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
+<DD>Returns an immutable sorted set containing the given elements sorted by
+ the given <code>Comparator</code>.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#copyOf(java.util.Comparator, java.util.Iterator)"><B>copyOf(Comparator&lt;? super E&gt;, Iterator&lt;? extends E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
+<DD>Returns an immutable sorted set containing the given elements sorted by
+ the given <code>Comparator</code>.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#copyOfSorted(java.util.SortedMap)"><B>copyOfSorted(SortedMap&lt;K, ? extends V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
+<DD>Returns an immutable map containing the same entries as the provided sorted
+ map, with the same ordering.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#copyOfSorted(java.util.SortedSet)"><B>copyOfSorted(SortedSet&lt;E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
+<DD>Returns an immutable sorted set containing the elements of a sorted set,
+ sorted by the same <code>Comparator</code>.
+<DT><A HREF="./com/google/common/collect/ConcurrentHashMultiset.html#count(java.lang.Object)"><B>count(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>
+<DD>Returns the number of occurrences of <code>element</code> in this multiset.
+<DT><A HREF="./com/google/common/collect/ForwardingMultiset.html#count(java.lang.Object)"><B>count(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#count(java.lang.Object)"><B>count(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Multiset.html#count(java.lang.Object)"><B>count(Object)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
+<DD>Returns the number of occurrences of an element in this multiset (the
+ <i>count</i> of the element).
+<DT><A HREF="./com/google/common/collect/TreeMultiset.html#count(java.lang.Object)"><B>count(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ArrayListMultimap.html#create()"><B>create()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>
+<DD>Creates a new, empty <code>ArrayListMultimap</code> with the default initial
+ capacities.
+<DT><A HREF="./com/google/common/collect/ArrayListMultimap.html#create(int, int)"><B>create(int, int)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>
+<DD>Constructs an empty <code>ArrayListMultimap</code> with enough capacity to hold
+ the specified numbers of keys and values without resizing.
+<DT><A HREF="./com/google/common/collect/ArrayListMultimap.html#create(com.google.common.collect.Multimap)"><B>create(Multimap&lt;? extends K, ? extends V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>
+<DD>Constructs an <code>ArrayListMultimap</code> with the same mappings as the
+ specified multimap.
+<DT><A HREF="./com/google/common/collect/ConcurrentHashMultiset.html#create()"><B>create()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>
+<DD>Creates a new, empty <code>ConcurrentHashMultiset</code> using the default
+ initial capacity, load factor, and concurrency settings.
+<DT><A HREF="./com/google/common/collect/ConcurrentHashMultiset.html#create(java.lang.Iterable)"><B>create(Iterable&lt;? extends E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>
+<DD>Creates a new <code>ConcurrentHashMultiset</code> containing the specified
+ elements, using the default initial capacity, load factor, and concurrency
+ settings.
+<DT><A HREF="./com/google/common/collect/EnumBiMap.html#create(java.lang.Class, java.lang.Class)"><B>create(Class&lt;K&gt;, Class&lt;V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A>
+<DD>Returns a new, empty <code>EnumBiMap</code> using the specified key and value
+ types.
+<DT><A HREF="./com/google/common/collect/EnumBiMap.html#create(java.util.Map)"><B>create(Map&lt;K, V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A>
+<DD>Returns a new bimap with the same mappings as the specified map.
+<DT><A HREF="./com/google/common/collect/EnumHashBiMap.html#create(java.lang.Class)"><B>create(Class&lt;K&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>
+<DD>Returns a new, empty <code>EnumHashBiMap</code> using the specified key type.
+<DT><A HREF="./com/google/common/collect/EnumHashBiMap.html#create(java.util.Map)"><B>create(Map&lt;K, ? extends V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>
+<DD>Constructs a new bimap with the same mappings as the specified map.
+<DT><A HREF="./com/google/common/collect/EnumMultiset.html#create(java.lang.Class)"><B>create(Class&lt;E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset</A>
+<DD>Creates an empty <code>EnumMultiset</code>.
+<DT><A HREF="./com/google/common/collect/EnumMultiset.html#create(java.lang.Iterable)"><B>create(Iterable&lt;E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset</A>
+<DD>Creates a new <code>EnumMultiset</code> containing the specified elements.
+<DT><A HREF="./com/google/common/collect/HashBiMap.html#create()"><B>create()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>
+<DD>Returns a new, empty <code>HashBiMap</code> with the default initial capacity
+ (16).
+<DT><A HREF="./com/google/common/collect/HashBiMap.html#create(int)"><B>create(int)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>
+<DD>Constructs a new, empty bimap with the specified expected size.
+<DT><A HREF="./com/google/common/collect/HashBiMap.html#create(java.util.Map)"><B>create(Map&lt;? extends K, ? extends V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>
+<DD>Constructs a new bimap containing initial values from <code>map</code>.
+<DT><A HREF="./com/google/common/collect/HashMultimap.html#create()"><B>create()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>
+<DD>Creates a new, empty <code>HashMultimap</code> with the default initial
+ capacities.
+<DT><A HREF="./com/google/common/collect/HashMultimap.html#create(int, int)"><B>create(int, int)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>
+<DD>Constructs an empty <code>HashMultimap</code> with enough capacity to hold the
+ specified numbers of keys and values without rehashing.
+<DT><A HREF="./com/google/common/collect/HashMultimap.html#create(com.google.common.collect.Multimap)"><B>create(Multimap&lt;? extends K, ? extends V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>
+<DD>Constructs a <code>HashMultimap</code> with the same mappings as the specified
+ multimap.
+<DT><A HREF="./com/google/common/collect/HashMultiset.html#create()"><B>create()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>
+<DD>Creates a new, empty <code>HashMultiset</code> using the default initial
+ capacity.
+<DT><A HREF="./com/google/common/collect/HashMultiset.html#create(int)"><B>create(int)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>
+<DD>Creates a new, empty <code>HashMultiset</code> with the specified expected
+ number of distinct elements.
+<DT><A HREF="./com/google/common/collect/HashMultiset.html#create(java.lang.Iterable)"><B>create(Iterable&lt;? extends E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>
+<DD>Creates a new <code>HashMultiset</code> containing the specified elements.
+<DT><A HREF="./com/google/common/collect/LinkedHashMultimap.html#create()"><B>create()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>
+<DD>Creates a new, empty <code>LinkedHashMultimap</code> with the default initial
+ capacities.
+<DT><A HREF="./com/google/common/collect/LinkedHashMultimap.html#create(int, int)"><B>create(int, int)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>
+<DD>Constructs an empty <code>LinkedHashMultimap</code> with enough capacity to hold
+ the specified numbers of keys and values without rehashing.
+<DT><A HREF="./com/google/common/collect/LinkedHashMultimap.html#create(com.google.common.collect.Multimap)"><B>create(Multimap&lt;? extends K, ? extends V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>
+<DD>Constructs a <code>LinkedHashMultimap</code> with the same mappings as the
+ specified multimap.
+<DT><A HREF="./com/google/common/collect/LinkedHashMultiset.html#create()"><B>create()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>
+<DD>Creates a new, empty <code>LinkedHashMultiset</code> using the default initial
+ capacity.
+<DT><A HREF="./com/google/common/collect/LinkedHashMultiset.html#create(int)"><B>create(int)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>
+<DD>Creates a new, empty <code>LinkedHashMultiset</code> with the specified expected
+ number of distinct elements.
+<DT><A HREF="./com/google/common/collect/LinkedHashMultiset.html#create(java.lang.Iterable)"><B>create(Iterable&lt;? extends E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>
+<DD>Creates a new <code>LinkedHashMultiset</code> containing the specified elements.
+<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#create()"><B>create()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
+<DD>Creates a new, empty <code>LinkedListMultimap</code> with the default initial
+ capacity.
+<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#create(int)"><B>create(int)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
+<DD>Constructs an empty <code>LinkedListMultimap</code> with enough capacity to hold
+ the specified number of keys without rehashing.
+<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#create(com.google.common.collect.Multimap)"><B>create(Multimap&lt;? extends K, ? extends V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
+<DD>Constructs a <code>LinkedListMultimap</code> with the same mappings as the
+ specified <code>Multimap</code>.
+<DT><A HREF="./com/google/common/collect/MutableClassToInstanceMap.html#create()"><B>create()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A>
+<DD>Returns a new <code>MutableClassToInstanceMap</code> instance backed by a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> using the default initial capacity and load factor.
+<DT><A HREF="./com/google/common/collect/MutableClassToInstanceMap.html#create(java.util.Map)"><B>create(Map&lt;Class&lt;? extends B&gt;, B&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A>
+<DD>Returns a new <code>MutableClassToInstanceMap</code> instance backed by a given
+ empty <code>backingMap</code>.
+<DT><A HREF="./com/google/common/collect/TreeMultimap.html#create()"><B>create()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>
+<DD>Creates an empty <code>TreeMultimap</code> ordered by the natural ordering of
+ its keys and values.
+<DT><A HREF="./com/google/common/collect/TreeMultimap.html#create(java.util.Comparator, java.util.Comparator)"><B>create(Comparator&lt;? super K&gt;, Comparator&lt;? super V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>
+<DD>Creates an empty <code>TreeMultimap</code> instance using explicit comparators.
+<DT><A HREF="./com/google/common/collect/TreeMultimap.html#create(com.google.common.collect.Multimap)"><B>create(Multimap&lt;? extends K, ? extends V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>
+<DD>Constructs a <code>TreeMultimap</code>, ordered by the natural ordering of its
+ keys and values, with the same mappings as the specified multimap.
+<DT><A HREF="./com/google/common/collect/TreeMultiset.html#create()"><B>create()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>
+<DD>Creates a new, empty multiset, sorted according to the elements' natural
+ order.
+<DT><A HREF="./com/google/common/collect/TreeMultiset.html#create(java.util.Comparator)"><B>create(Comparator&lt;? super E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>
+<DD>Creates a new, empty multiset, sorted according to the specified
+ comparator.
+<DT><A HREF="./com/google/common/collect/TreeMultiset.html#create(java.lang.Iterable)"><B>create(Iterable&lt;? extends E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>
+<DD>Creates an empty multiset containing the given initial elements, sorted
+ according to the elements' natural order.
+<DT><A HREF="./com/google/common/collect/Iterables.html#cycle(java.lang.Iterable)"><B>cycle(Iterable&lt;T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Returns an iterable whose iterators cycle indefinitely over the elements of
+ <code>iterable</code>.
+<DT><A HREF="./com/google/common/collect/Iterables.html#cycle(T...)"><B>cycle(T...)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Returns an iterable whose iterators cycle indefinitely over the provided
+ elements.
+<DT><A HREF="./com/google/common/collect/Iterators.html#cycle(java.lang.Iterable)"><B>cycle(Iterable&lt;T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Returns an iterator that cycles indefinitely over the elements of <code>iterable</code>.
+<DT><A HREF="./com/google/common/collect/Iterators.html#cycle(T...)"><B>cycle(T...)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Returns an iterator that cycles indefinitely over the provided elements.
+</DL>
+<HR>
+<A NAME="_D_"><!-- --></A><H2>
+<B>D</B></H2>
+<DL>
+<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#delegate()"><B>delegate()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingConcurrentMap.html#delegate()"><B>delegate()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect">ForwardingConcurrentMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingIterator.html#delegate()"><B>delegate()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingList.html#delegate()"><B>delegate()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingListIterator.html#delegate()"><B>delegate()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMap.html#delegate()"><B>delegate()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMapEntry.html#delegate()"><B>delegate()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect">ForwardingMapEntry</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#delegate()"><B>delegate()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMultiset.html#delegate()"><B>delegate()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingObject.html#delegate()"><B>delegate()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A>
+<DD>Returns the backing delegate instance that methods are forwarded to.
+<DT><A HREF="./com/google/common/collect/ForwardingQueue.html#delegate()"><B>delegate()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect">ForwardingQueue</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingSet.html#delegate()"><B>delegate()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingSortedMap.html#delegate()"><B>delegate()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingSortedSet.html#delegate()"><B>delegate()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.html#delegate()"><B>delegate()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Maps.html#difference(java.util.Map, java.util.Map)"><B>difference(Map&lt;? extends K, ? extends V&gt;, Map&lt;? extends K, ? extends V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
+<DD>Computes the difference between two maps.
+<DT><A HREF="./com/google/common/collect/Sets.html#difference(java.util.Set, java.util.Set)"><B>difference(Set&lt;E&gt;, Set&lt;?&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
+<DD>Returns an unmodifiable <b>view</b> of the difference of two sets.
+</DL>
+<HR>
+<A NAME="_E_"><!-- --></A><H2>
+<B>E</B></H2>
+<DL>
+<DT><A HREF="./com/google/common/collect/ForwardingQueue.html#element()"><B>element()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect">ForwardingQueue</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Iterables.html#elementsEqual(java.lang.Iterable, java.lang.Iterable)"><B>elementsEqual(Iterable&lt;?&gt;, Iterable&lt;?&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Determines whether two iterables contain equal elements in the same order.
+<DT><A HREF="./com/google/common/collect/Iterators.html#elementsEqual(java.util.Iterator, java.util.Iterator)"><B>elementsEqual(Iterator&lt;?&gt;, Iterator&lt;?&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Determines whether two iterators contain equal elements in the same order.
+<DT><A HREF="./com/google/common/collect/ForwardingMultiset.html#elementSet()"><B>elementSet()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#elementSet()"><B>elementSet()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Multiset.html#elementSet()"><B>elementSet()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
+<DD>Returns the set of distinct elements contained in this multiset.
+<DT><A HREF="./com/google/common/collect/TreeMultiset.html#elementSet()"><B>elementSet()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>
+<DD>Returns the set of distinct elements contained in this multiset.
+<DT><A HREF="./com/google/common/collect/Iterators.html#emptyIterator()"><B>emptyIterator()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Returns the empty iterator.
+<DT><A HREF="./com/google/common/collect/AbstractIterator.html#endOfData()"><B>endOfData()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect">AbstractIterator</A>
+<DD>Implementations of <code>computeNext</code> <b>must</b> invoke this method when
+ there are no elements left in the iteration.
+<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#entries()"><B>entries()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#entries()"><B>entries()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>Returns an immutable collection of all key-value pairs in the multimap.
+<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.html#entries()"><B>entries()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>
+<DD>Returns an immutable collection of all key-value pairs in the multimap.
+<DT><A HREF="./com/google/common/collect/LinkedHashMultimap.html#entries()"><B>entries()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>
+<DD>Returns a set of all key-value pairs.
+<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#entries()"><B>entries()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
+<DD>Returns a collection of all key-value pairs.
+<DT><A HREF="./com/google/common/collect/Multimap.html#entries()"><B>entries()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
+<DD>Returns a collection of all key-value pairs.
+<DT><A HREF="./com/google/common/collect/SetMultimap.html#entries()"><B>entries()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>
+<DD>Returns a collection of all key-value pairs.
+<DT><A HREF="./com/google/common/collect/MapDifference.html#entriesDiffering()"><B>entriesDiffering()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A>
+<DD>Returns an unmodifiable map describing keys that appear in both maps, but
+ with different values.
+<DT><A HREF="./com/google/common/collect/MapDifference.html#entriesInCommon()"><B>entriesInCommon()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A>
+<DD>Returns an unmodifiable map containing the entries that appear in both
+ maps; that is, the intersection of the two maps.
+<DT><A HREF="./com/google/common/collect/MapDifference.html#entriesOnlyOnLeft()"><B>entriesOnlyOnLeft()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A>
+<DD>Returns an unmodifiable map containing the entries from the left map whose
+ keys are not present in the right map.
+<DT><A HREF="./com/google/common/collect/MapDifference.html#entriesOnlyOnRight()"><B>entriesOnlyOnRight()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A>
+<DD>Returns an unmodifiable map containing the entries from the right map whose
+ keys are not present in the left map.
+<DT><A HREF="./com/google/common/collect/ConcurrentHashMultiset.html#entrySet()"><B>entrySet()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMap.html#entrySet()"><B>entrySet()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMultiset.html#entrySet()"><B>entrySet()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#entrySet()"><B>entrySet()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMap.html#entrySet()"><B>entrySet()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
+<DD>Returns an immutable set of the mappings in this map.
+<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#entrySet()"><B>entrySet()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#entrySet()"><B>entrySet()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
+<DD>Returns an immutable set of the mappings in this map, sorted by the key
+ ordering.
+<DT><A HREF="./com/google/common/collect/Multiset.html#entrySet()"><B>entrySet()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
+<DD>Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
+ the count of that element.
+<DT><A HREF="./com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect"><B>EnumBiMap</B></A>&lt;<A HREF="./com/google/common/collect/EnumBiMap.html" title="type parameter in EnumBiMap">K</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;<A HREF="./com/google/common/collect/EnumBiMap.html" title="type parameter in EnumBiMap">K</A>&gt;,<A HREF="./com/google/common/collect/EnumBiMap.html" title="type parameter in EnumBiMap">V</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;<A HREF="./com/google/common/collect/EnumBiMap.html" title="type parameter in EnumBiMap">V</A>&gt;&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A <code>BiMap</code> backed by two <code>EnumMap</code> instances.<DT><A HREF="./com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect"><B>EnumHashBiMap</B></A>&lt;<A HREF="./com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;<A HREF="./com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A>&gt;,<A HREF="./com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A <code>BiMap</code> backed by an <code>EnumMap</code> instance for keys-to-values, and
+ a <code>HashMap</code> instance for values-to-keys.<DT><A HREF="./com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect"><B>EnumMultiset</B></A>&lt;<A HREF="./com/google/common/collect/EnumMultiset.html" title="type parameter in EnumMultiset">E</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;<A HREF="./com/google/common/collect/EnumMultiset.html" title="type parameter in EnumMultiset">E</A>&gt;&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Multiset implementation backed by an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumMap.html?is-external=true" title="class or interface in java.util"><CODE>EnumMap</CODE></A>.<DT><A HREF="./com/google/common/base/Objects.html#equal(java.lang.Object, java.lang.Object)"><B>equal(Object, Object)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Objects.html" title="class in com.google.common.base">Objects</A>
+<DD>Determines whether two possibly-null objects are equal.
+<DT><A HREF="./com/google/common/base/Function.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in interface com.google.common.base.<A HREF="./com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>
+<DD>Indicates whether some other object is equal to this <code>Function</code>.
+<DT><A HREF="./com/google/common/base/Predicate.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in interface com.google.common.base.<A HREF="./com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>
+<DD>Indicates whether some other object is equal to this <code>Predicate</code>.
+<DT><A HREF="./com/google/common/collect/ForwardingList.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMap.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMapEntry.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect">ForwardingMapEntry</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMultiset.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingSet.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMap.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableSet.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
+<DD>Compares the specified object to this multimap for equality.
+<DT><A HREF="./com/google/common/collect/ListMultimap.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>
+<DD>Compares the specified object to this multimap for equality.
+<DT><A HREF="./com/google/common/collect/MapDifference.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A>
+<DD>Compares the specified object with this instance for equality.
+<DT><A HREF="./com/google/common/collect/MapDifference.ValueDifference.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect">MapDifference.ValueDifference</A>
+<DD>Two instances are considered equal if their <A HREF="./com/google/common/collect/MapDifference.ValueDifference.html#leftValue()"><CODE>leftValue()</CODE></A>
+ values are equal and their <A HREF="./com/google/common/collect/MapDifference.ValueDifference.html#rightValue()"><CODE>rightValue()</CODE></A> values are also equal.
+<DT><A HREF="./com/google/common/collect/Multimap.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
+<DD>Compares the specified object with this multimap for equality.
+<DT><A HREF="./com/google/common/collect/Multiset.Entry.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>
+<DD>Indicates whether some other object is "equal to" this one.
+<DT><A HREF="./com/google/common/collect/Multiset.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
+<DD>Compares the specified object with this multiset for equality.
+<DT><A HREF="./com/google/common/collect/SetMultimap.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>
+<DD>Compares the specified object to this multimap for equality.
+<DT><A HREF="./com/google/common/base/Predicates.html#equalTo(T)"><B>equalTo(T)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
+<DD>Returns a predicate that evaluates to <code>true</code> if the object being
+ tested <code>equals()</code> the given target or both are null.
+<DT><A HREF="./com/google/common/collect/MapMaker.html#expiration(long, java.util.concurrent.TimeUnit)"><B>expiration(long, TimeUnit)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A>
+<DD>Specifies that each entry should be automatically removed from the
+ map once a fixed duration has passed since the entry's creation.
+<DT><A HREF="./com/google/common/collect/Ordering.html#explicit(java.util.List)"><B>explicit(List&lt;T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
+<DD>Returns an ordering that compares objects according to the order in
+ which they appear in the given list.
+<DT><A HREF="./com/google/common/collect/Ordering.html#explicit(T, T...)"><B>explicit(T, T...)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
+<DD>Returns an ordering that compares objects according to the order in
+ which they are given to this method.
+</DL>
+<HR>
+<A NAME="_F_"><!-- --></A><H2>
+<B>F</B></H2>
+<DL>
+<DT><A HREF="./com/google/common/collect/Collections2.html#filter(java.util.Collection, com.google.common.base.Predicate)"><B>filter(Collection&lt;E&gt;, Predicate&lt;? super E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Collections2.html" title="class in com.google.common.collect">Collections2</A>
+<DD>Returns the elements of <code>unfiltered</code> that satisfy a predicate.
+<DT><A HREF="./com/google/common/collect/Iterables.html#filter(java.lang.Iterable, com.google.common.base.Predicate)"><B>filter(Iterable&lt;T&gt;, Predicate&lt;? super T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Returns the elements of <code>unfiltered</code> that satisfy a predicate.
+<DT><A HREF="./com/google/common/collect/Iterables.html#filter(java.lang.Iterable, java.lang.Class)"><B>filter(Iterable&lt;?&gt;, Class&lt;T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Returns all instances of class <code>type</code> in <code>unfiltered</code>.
+<DT><A HREF="./com/google/common/collect/Iterators.html#filter(java.util.Iterator, com.google.common.base.Predicate)"><B>filter(Iterator&lt;T&gt;, Predicate&lt;? super T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Returns the elements of <code>unfiltered</code> that satisfy a predicate.
+<DT><A HREF="./com/google/common/collect/Iterators.html#filter(java.util.Iterator, java.lang.Class)"><B>filter(Iterator&lt;?&gt;, Class&lt;T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Returns all instances of class <code>type</code> in <code>unfiltered</code>.
+<DT><A HREF="./com/google/common/collect/Sets.html#filter(java.util.Set, com.google.common.base.Predicate)"><B>filter(Set&lt;E&gt;, Predicate&lt;? super E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
+<DD>Returns the elements of <code>unfiltered</code> that satisfy a predicate.
+<DT><A HREF="./com/google/common/collect/Maps.html#filterEntries(java.util.Map, com.google.common.base.Predicate)"><B>filterEntries(Map&lt;K, V&gt;, Predicate&lt;? super Map.Entry&lt;K, V&gt;&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
+<DD>Returns a map containing the mappings in <code>unfiltered</code> that satisfy a
+ predicate.
+<DT><A HREF="./com/google/common/collect/Maps.html#filterKeys(java.util.Map, com.google.common.base.Predicate)"><B>filterKeys(Map&lt;K, V&gt;, Predicate&lt;? super K&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
+<DD>Returns a map containing the mappings in <code>unfiltered</code> whose keys
+ satisfy a predicate.
+<DT><A HREF="./com/google/common/collect/Maps.html#filterValues(java.util.Map, com.google.common.base.Predicate)"><B>filterValues(Map&lt;K, V&gt;, Predicate&lt;? super V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
+<DD>Returns a map containing the mappings in <code>unfiltered</code> whose values
+ satisfy a predicate.
+<DT><A HREF="./com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base"><B>FinalizablePhantomReference</B></A>&lt;<A HREF="./com/google/common/base/FinalizablePhantomReference.html" title="type parameter in FinalizablePhantomReference">T</A>&gt; - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>Phantom reference with a <code>finalizeReferent()</code> method which a
+ background thread invokes after the garbage collector reclaims the
+ referent.<DT><A HREF="./com/google/common/base/FinalizablePhantomReference.html#FinalizablePhantomReference(T, com.google.common.base.FinalizableReferenceQueue)"><B>FinalizablePhantomReference(T, FinalizableReferenceQueue)</B></A> -
+Constructor for class com.google.common.base.<A HREF="./com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base">FinalizablePhantomReference</A>
+<DD>Constructs a new finalizable phantom reference.
+<DT><A HREF="./com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base"><B>FinalizableReference</B></A> - Interface in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>Implemented by references that have code to run after garbage collection of
+ their referents.<DT><A HREF="./com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base"><B>FinalizableReferenceQueue</B></A> - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>A reference queue with an associated background thread that dequeues
+ references and invokes <A HREF="./com/google/common/base/FinalizableReference.html#finalizeReferent()"><CODE>FinalizableReference.finalizeReferent()</CODE></A> on
+ them.<DT><A HREF="./com/google/common/base/FinalizableReferenceQueue.html#FinalizableReferenceQueue()"><B>FinalizableReferenceQueue()</B></A> -
+Constructor for class com.google.common.base.<A HREF="./com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A>
+<DD>Constructs a new queue.
+<DT><A HREF="./com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base"><B>FinalizableSoftReference</B></A>&lt;<A HREF="./com/google/common/base/FinalizableSoftReference.html" title="type parameter in FinalizableSoftReference">T</A>&gt; - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>Soft reference with a <code>finalizeReferent()</code> method which a background
+ thread invokes after the garbage collector reclaims the referent.<DT><A HREF="./com/google/common/base/FinalizableSoftReference.html#FinalizableSoftReference(T, com.google.common.base.FinalizableReferenceQueue)"><B>FinalizableSoftReference(T, FinalizableReferenceQueue)</B></A> -
+Constructor for class com.google.common.base.<A HREF="./com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base">FinalizableSoftReference</A>
+<DD>Constructs a new finalizable soft reference.
+<DT><A HREF="./com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base"><B>FinalizableWeakReference</B></A>&lt;<A HREF="./com/google/common/base/FinalizableWeakReference.html" title="type parameter in FinalizableWeakReference">T</A>&gt; - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>Weak reference with a <code>finalizeReferent()</code> method which a background
+ thread invokes after the garbage collector reclaims the referent.<DT><A HREF="./com/google/common/base/FinalizableWeakReference.html#FinalizableWeakReference(T, com.google.common.base.FinalizableReferenceQueue)"><B>FinalizableWeakReference(T, FinalizableReferenceQueue)</B></A> -
+Constructor for class com.google.common.base.<A HREF="./com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base">FinalizableWeakReference</A>
+<DD>Constructs a new finalizable weak reference.
+<DT><A HREF="./com/google/common/base/FinalizableReference.html#finalizeReferent()"><B>finalizeReferent()</B></A> -
+Method in interface com.google.common.base.<A HREF="./com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A>
+<DD>Invoked on a background thread after the referent has been garbage
+ collected unless security restrictions prevented starting a background
+ thread, in which case this method is invoked when new references
+ are created.
+<DT><A HREF="./com/google/common/collect/Iterables.html#find(java.lang.Iterable, com.google.common.base.Predicate)"><B>find(Iterable&lt;T&gt;, Predicate&lt;? super T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Returns the first element in <code>iterable</code> that satisfies the given
+ predicate.
+<DT><A HREF="./com/google/common/collect/Iterators.html#find(java.util.Iterator, com.google.common.base.Predicate)"><B>find(Iterator&lt;T&gt;, Predicate&lt;? super T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Returns the first element in <code>iterator</code> that satisfies the given
+ predicate.
+<DT><A HREF="./com/google/common/collect/ForwardingSortedSet.html#first()"><B>first()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingSortedMap.html#firstKey()"><B>firstKey()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#firstKey()"><B>firstKey()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Iterators.html#forArray(T...)"><B>forArray(T...)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Returns an iterator containing the elements of <code>array</code> in order.
+<DT><A HREF="./com/google/common/collect/BiMap.html#forcePut(K, V)"><B>forcePut(K, V)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>
+<DD>An alternate form of <code>put</code> that silently removes any existing entry
+ with the value <code>value</code> before proceeding with the <A HREF="./com/google/common/collect/BiMap.html#put(K, V)"><CODE>BiMap.put(K, V)</CODE></A>
+ operation.
+<DT><A HREF="./com/google/common/collect/EnumHashBiMap.html#forcePut(K, V)"><B>forcePut(K, V)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/HashBiMap.html#forcePut(K, V)"><B>forcePut(K, V)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#forcePut(K, V)"><B>forcePut(K, V)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
+<DD>Guaranteed to throw an exception and leave the bimap unmodified.
+<DT><A HREF="./com/google/common/collect/Iterators.html#forEnumeration(java.util.Enumeration)"><B>forEnumeration(Enumeration&lt;T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Adapts an <code>Enumeration</code> to the <code>Iterator</code> interface.
+<DT><A HREF="./com/google/common/base/Functions.html#forMap(java.util.Map)"><B>forMap(Map&lt;K, V&gt;)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Functions.html" title="class in com.google.common.base">Functions</A>
+<DD>Returns a function which performs a map lookup.
+<DT><A HREF="./com/google/common/base/Functions.html#forMap(java.util.Map, V)"><B>forMap(Map&lt;K, ? extends V&gt;, V)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Functions.html" title="class in com.google.common.base">Functions</A>
+<DD>Returns a function which performs a map lookup with a default value.
+<DT><A HREF="./com/google/common/collect/Multimaps.html#forMap(java.util.Map)"><B>forMap(Map&lt;K, V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
+<DD>Returns a multimap view of the specified map.
+<DT><A HREF="./com/google/common/base/Functions.html#forPredicate(com.google.common.base.Predicate)"><B>forPredicate(Predicate&lt;T&gt;)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Functions.html" title="class in com.google.common.base">Functions</A>
+<DD>Creates a function that returns the same boolean output as the given
+ predicate for all inputs.
+<DT><A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect"><B>ForwardingCollection</B></A>&lt;<A HREF="./com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A collection which forwards all its method calls to another collection.<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#ForwardingCollection()"><B>ForwardingCollection()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect"><B>ForwardingConcurrentMap</B></A>&lt;<A HREF="./com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>,<A HREF="./com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A concurrent map which forwards all its method calls to another concurrent
+ map.<DT><A HREF="./com/google/common/collect/ForwardingConcurrentMap.html#ForwardingConcurrentMap()"><B>ForwardingConcurrentMap()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect">ForwardingConcurrentMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect"><B>ForwardingIterator</B></A>&lt;<A HREF="./com/google/common/collect/ForwardingIterator.html" title="type parameter in ForwardingIterator">T</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An iterator which forwards all its method calls to another iterator.<DT><A HREF="./com/google/common/collect/ForwardingIterator.html#ForwardingIterator()"><B>ForwardingIterator()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect"><B>ForwardingList</B></A>&lt;<A HREF="./com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A list which forwards all its method calls to another list.<DT><A HREF="./com/google/common/collect/ForwardingList.html#ForwardingList()"><B>ForwardingList()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect"><B>ForwardingListIterator</B></A>&lt;<A HREF="./com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A list iterator which forwards all its method calls to another list
+ iterator.<DT><A HREF="./com/google/common/collect/ForwardingListIterator.html#ForwardingListIterator()"><B>ForwardingListIterator()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect"><B>ForwardingMap</B></A>&lt;<A HREF="./com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="./com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A map which forwards all its method calls to another map.<DT><A HREF="./com/google/common/collect/ForwardingMap.html#ForwardingMap()"><B>ForwardingMap()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect"><B>ForwardingMapEntry</B></A>&lt;<A HREF="./com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">K</A>,<A HREF="./com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A map entry which forwards all its method calls to another map entry.<DT><A HREF="./com/google/common/collect/ForwardingMapEntry.html#ForwardingMapEntry()"><B>ForwardingMapEntry()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect">ForwardingMapEntry</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect"><B>ForwardingMultimap</B></A>&lt;<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A multimap which forwards all its method calls to another multimap.<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#ForwardingMultimap()"><B>ForwardingMultimap()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect"><B>ForwardingMultiset</B></A>&lt;<A HREF="./com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A multiset which forwards all its method calls to another multiset.<DT><A HREF="./com/google/common/collect/ForwardingMultiset.html#ForwardingMultiset()"><B>ForwardingMultiset()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><B>ForwardingObject</B></A> - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An abstract base class for implementing the <a
+ href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.<DT><A HREF="./com/google/common/collect/ForwardingObject.html#ForwardingObject()"><B>ForwardingObject()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A>
+<DD>Sole constructor.
+<DT><A HREF="./com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect"><B>ForwardingQueue</B></A>&lt;<A HREF="./com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A queue which forwards all its method calls to another queue.<DT><A HREF="./com/google/common/collect/ForwardingQueue.html#ForwardingQueue()"><B>ForwardingQueue()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect">ForwardingQueue</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect"><B>ForwardingSet</B></A>&lt;<A HREF="./com/google/common/collect/ForwardingSet.html" title="type parameter in ForwardingSet">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A set which forwards all its method calls to another set.<DT><A HREF="./com/google/common/collect/ForwardingSet.html#ForwardingSet()"><B>ForwardingSet()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect"><B>ForwardingSortedMap</B></A>&lt;<A HREF="./com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="./com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A sorted map which forwards all its method calls to another sorted map.<DT><A HREF="./com/google/common/collect/ForwardingSortedMap.html#ForwardingSortedMap()"><B>ForwardingSortedMap()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect"><B>ForwardingSortedSet</B></A>&lt;<A HREF="./com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A sorted set which forwards all its method calls to another sorted set.<DT><A HREF="./com/google/common/collect/ForwardingSortedSet.html#ForwardingSortedSet()"><B>ForwardingSortedSet()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Iterables.html#frequency(java.lang.Iterable, java.lang.Object)"><B>frequency(Iterable&lt;?&gt;, Object)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Returns the number of elements in the specified iterable that equal the
+ specified object.
+<DT><A HREF="./com/google/common/collect/Iterators.html#frequency(java.util.Iterator, java.lang.Object)"><B>frequency(Iterator&lt;?&gt;, Object)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Returns the number of elements in the specified iterator that equal the
+ specified object.
+<DT><A HREF="./com/google/common/collect/Ordering.html#from(java.util.Comparator)"><B>from(Comparator&lt;T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
+<DD>Returns an ordering for a pre-existing <code>comparator</code>.
+<DT><A HREF="./com/google/common/collect/Ordering.html#from(com.google.common.collect.Ordering)"><B>from(Ordering&lt;T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
+<DD><B>Deprecated.</B>&nbsp;<I>no need to use this</I>
+<DT><A HREF="./com/google/common/collect/Maps.html#fromProperties(java.util.Properties)"><B>fromProperties(Properties)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
+<DD>Creates an <code>ImmutableMap&lt;String, String&gt;</code> from a <code>Properties</code>
+ instance.
+<DT><A HREF="./com/google/common/base/Function.html" title="interface in com.google.common.base"><B>Function</B></A>&lt;<A HREF="./com/google/common/base/Function.html" title="type parameter in Function">F</A>,<A HREF="./com/google/common/base/Function.html" title="type parameter in Function">T</A>&gt; - Interface in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>A transformation from one object to another.<DT><A HREF="./com/google/common/base/Functions.html" title="class in com.google.common.base"><B>Functions</B></A> - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>Useful functions.</DL>
+<HR>
+<A NAME="_G_"><!-- --></A><H2>
+<B>G</B></H2>
+<DL>
+<DT><A HREF="./com/google/common/base/Supplier.html#get()"><B>get()</B></A> -
+Method in interface com.google.common.base.<A HREF="./com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>
+<DD>Retrieves an instance of the appropriate type.
+<DT><A HREF="./com/google/common/collect/ForwardingList.html#get(int)"><B>get(int)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMap.html#get(java.lang.Object)"><B>get(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#get(K)"><B>get(K)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#get(java.lang.Object)"><B>get(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.html#get(K)"><B>get(K)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>
+<DD>Returns an immutable list of the values for the given key.
+<DT><A HREF="./com/google/common/collect/ImmutableMap.html#get(java.lang.Object)"><B>get(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#get(K)"><B>get(K)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>Returns an immutable collection of the values for the given key.
+<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.html#get(K)"><B>get(K)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>
+<DD>Returns an immutable set of the values for the given key.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#get(java.lang.Object)"><B>get(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Iterables.html#get(java.lang.Iterable, int)"><B>get(Iterable&lt;T&gt;, int)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Returns the element at the specified position in an iterable.
+<DT><A HREF="./com/google/common/collect/Iterators.html#get(java.util.Iterator, int)"><B>get(Iterator&lt;T&gt;, int)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Advances <code>iterator</code> <code>position + 1</code> times, returning the element
+ at the <code>position</code>th position.
+<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#get(K)"><B>get(K)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
+<DD>Returns a collection view of all values associated with a key.
+<DT><A HREF="./com/google/common/collect/ListMultimap.html#get(K)"><B>get(K)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>
+<DD>Returns a collection view of all values associated with a key.
+<DT><A HREF="./com/google/common/collect/Multimap.html#get(K)"><B>get(K)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
+<DD>Returns a collection view of all values associated with a key.
+<DT><A HREF="./com/google/common/collect/SetMultimap.html#get(K)"><B>get(K)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>
+<DD>Returns a collection view of all values associated with a key.
+<DT><A HREF="./com/google/common/collect/SortedSetMultimap.html#get(K)"><B>get(K)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>
+<DD>Returns a collection view of all values associated with a key.
+<DT><A HREF="./com/google/common/collect/Multiset.Entry.html#getCount()"><B>getCount()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>
+<DD>Returns the count of the associated element in the underlying multiset.
+<DT><A HREF="./com/google/common/collect/Multiset.Entry.html#getElement()"><B>getElement()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>
+<DD>Returns the multiset element corresponding to this entry.
+<DT><A HREF="./com/google/common/collect/ClassToInstanceMap.html#getInstance(java.lang.Class)"><B>getInstance(Class&lt;T&gt;)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>
+<DD>Returns the value the specified class is mapped to, or <code>null</code> if no
+ entry for this class is present.
+<DT><A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.html#getInstance(java.lang.Class)"><B>getInstance(Class&lt;T&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/MutableClassToInstanceMap.html#getInstance(java.lang.Class)"><B>getInstance(Class&lt;T&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMapEntry.html#getKey()"><B>getKey()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect">ForwardingMapEntry</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Iterables.html#getLast(java.lang.Iterable)"><B>getLast(Iterable&lt;T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Returns the last element of <code>iterable</code>.
+<DT><A HREF="./com/google/common/collect/Iterators.html#getLast(java.util.Iterator)"><B>getLast(Iterator&lt;T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Advances <code>iterator</code> to the end, returning the last element.
+<DT><A HREF="./com/google/common/collect/Iterables.html#getOnlyElement(java.lang.Iterable)"><B>getOnlyElement(Iterable&lt;T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Returns the single element contained in <code>iterable</code>.
+<DT><A HREF="./com/google/common/collect/Iterables.html#getOnlyElement(java.lang.Iterable, T)"><B>getOnlyElement(Iterable&lt;T&gt;, T)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Returns the single element contained in <code>iterable</code>, or <code>defaultValue</code> if the iterable is empty.
+<DT><A HREF="./com/google/common/collect/Iterators.html#getOnlyElement(java.util.Iterator)"><B>getOnlyElement(Iterator&lt;T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Returns the single element contained in <code>iterator</code>.
+<DT><A HREF="./com/google/common/collect/Iterators.html#getOnlyElement(java.util.Iterator, T)"><B>getOnlyElement(Iterator&lt;T&gt;, T)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Returns the single element contained in <code>iterator</code>, or <code>defaultValue</code> if the iterator is empty.
+<DT><A HREF="./com/google/common/collect/ForwardingMapEntry.html#getValue()"><B>getValue()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect">ForwardingMapEntry</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><B>GwtCompatible</B></A> - Annotation Type in <A HREF="./com/google/common/annotations/package-summary.html">com.google.common.annotations</A><DD>The presence of this annotation on a type indicates that the type may be
+ used with the
+ <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT).<DT><A HREF="./com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations"><B>GwtIncompatible</B></A> - Annotation Type in <A HREF="./com/google/common/annotations/package-summary.html">com.google.common.annotations</A><DD>The presence of this annotation on a method indicates that the method may
+ <em>not</em> be used with the
+ <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT),
+ even though its type is annotated as <A HREF="./com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><CODE>GwtCompatible</CODE></A> and accessible in
+ GWT.</DL>
+<HR>
+<A NAME="_H_"><!-- --></A><H2>
+<B>H</B></H2>
+<DL>
+<DT><A HREF="./com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect"><B>HashBiMap</B></A>&lt;<A HREF="./com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">K</A>,<A HREF="./com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A <A HREF="./com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> backed by two <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> instances.<DT><A HREF="./com/google/common/base/Objects.html#hashCode(java.lang.Object...)"><B>hashCode(Object...)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Objects.html" title="class in com.google.common.base">Objects</A>
+<DD>Generates a hash code for multiple values.
+<DT><A HREF="./com/google/common/collect/ForwardingList.html#hashCode()"><B>hashCode()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMap.html#hashCode()"><B>hashCode()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMapEntry.html#hashCode()"><B>hashCode()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect">ForwardingMapEntry</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#hashCode()"><B>hashCode()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMultiset.html#hashCode()"><B>hashCode()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingSet.html#hashCode()"><B>hashCode()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#hashCode()"><B>hashCode()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMap.html#hashCode()"><B>hashCode()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#hashCode()"><B>hashCode()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#hashCode()"><B>hashCode()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableSet.html#hashCode()"><B>hashCode()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#hashCode()"><B>hashCode()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
+<DD>Returns the hash code for this multimap.
+<DT><A HREF="./com/google/common/collect/MapDifference.html#hashCode()"><B>hashCode()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A>
+<DD>Returns the hash code for this instance.
+<DT><A HREF="./com/google/common/collect/MapDifference.ValueDifference.html#hashCode()"><B>hashCode()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect">MapDifference.ValueDifference</A>
+<DD>The hash code equals the value
+ <code>Arrays.asList(leftValue(), rightValue()).hashCode()</code>.
+<DT><A HREF="./com/google/common/collect/Multimap.html#hashCode()"><B>hashCode()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
+<DD>Returns the hash code for this multimap.
+<DT><A HREF="./com/google/common/collect/Multiset.Entry.html#hashCode()"><B>hashCode()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>
+<DD>Returns a hash code value for the object.
+<DT><A HREF="./com/google/common/collect/Multiset.html#hashCode()"><B>hashCode()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
+<DD>Returns the hash code for this multiset.
+<DT><A HREF="./com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect"><B>HashMultimap</B></A>&lt;<A HREF="./com/google/common/collect/HashMultimap.html" title="type parameter in HashMultimap">K</A>,<A HREF="./com/google/common/collect/HashMultimap.html" title="type parameter in HashMultimap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Implementation of <A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> using hash tables.<DT><A HREF="./com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect"><B>HashMultiset</B></A>&lt;<A HREF="./com/google/common/collect/HashMultiset.html" title="type parameter in HashMultiset">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Multiset implementation backed by a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A>.<DT><A HREF="./com/google/common/collect/AbstractIterator.html#hasNext()"><B>hasNext()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect">AbstractIterator</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingIterator.html#hasNext()"><B>hasNext()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingListIterator.html#hasPrevious()"><B>hasPrevious()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingSortedMap.html#headMap(K)"><B>headMap(K)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#headMap(K)"><B>headMap(K)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
+<DD>This method returns a <code>ImmutableSortedMap</code>, consisting of the entries
+ whose keys are less than <code>toKey</code>.
+<DT><A HREF="./com/google/common/collect/ForwardingSortedSet.html#headSet(E)"><B>headSet(E)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#headSet(E)"><B>headSet(E)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
+<DD>Returns a view of the portion of this set whose elements are
+ strictly less than <tt>toElement</tt>.
+</DL>
+<HR>
+<A NAME="_I_"><!-- --></A><H2>
+<B>I</B></H2>
+<DL>
+<DT><A HREF="./com/google/common/base/Functions.html#identity()"><B>identity()</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Functions.html" title="class in com.google.common.base">Functions</A>
+<DD>Returns the identity function.
+<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect"><B>ImmutableBiMap</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An immutable <A HREF="./com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> with reliable user-specified iteration order.<DT><A HREF="./com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect"><B>ImmutableBiMap.Builder</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="./com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A builder for creating immutable bimap instances, especially <code>public
+ static final</code> bimaps ("constant bimaps").<DT><A HREF="./com/google/common/collect/ImmutableBiMap.Builder.html#ImmutableBiMap.Builder()"><B>ImmutableBiMap.Builder()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>
+<DD>Creates a new builder.
+<DT><A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>ImmutableClassToInstanceMap</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A class-to-instance map backed by an <A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><CODE>ImmutableMap</CODE></A>.<DT><A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect"><B>ImmutableClassToInstanceMap.Builder</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A builder for creating immutable class-to-instance maps.<DT><A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#ImmutableClassToInstanceMap.Builder()"><B>ImmutableClassToInstanceMap.Builder()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect"><B>ImmutableCollection</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An immutable collection.<DT><A HREF="./com/google/common/collect/Sets.SetView.html#immutableCopy()"><B>immutableCopy()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A>
+<DD>Returns an immutable copy of the current contents of this set view.
+<DT><A HREF="./com/google/common/collect/Maps.html#immutableEntry(K, V)"><B>immutableEntry(K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
+<DD>Returns an immutable map entry with the specified key and value.
+<DT><A HREF="./com/google/common/collect/Multisets.html#immutableEntry(E, int)"><B>immutableEntry(E, int)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multisets.html" title="class in com.google.common.collect">Multisets</A>
+<DD>Returns an immutable multiset entry with the specified element and count.
+<DT><A HREF="./com/google/common/collect/Sets.html#immutableEnumSet(E, E...)"><B>immutableEnumSet(E, E...)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
+<DD>Returns an immutable set instance containing the given enum elements.
+<DT><A HREF="./com/google/common/collect/Sets.html#immutableEnumSet(java.lang.Iterable)"><B>immutableEnumSet(Iterable&lt;E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
+<DD>Returns an immutable set instance containing the given enum elements.
+<DT><A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect"><B>ImmutableList</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A high-performance, immutable, random-access <code>List</code> implementation.<DT><A HREF="./com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect"><B>ImmutableList.Builder</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A builder for creating immutable list instances, especially
+ <code>public static final</code> lists ("constant lists").<DT><A HREF="./com/google/common/collect/ImmutableList.Builder.html#ImmutableList.Builder()"><B>ImmutableList.Builder()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>
+<DD>Creates a new builder.
+<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect"><B>ImmutableListMultimap</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>,<A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An immutable <A HREF="./com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A> with reliable user-specified key and value
+ iteration order.<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect"><B>ImmutableListMultimap.Builder</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A builder for creating immutable <code>ListMultimap</code> instances, especially
+ <code>public static final</code> multimaps ("constant multimaps").<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html#ImmutableListMultimap.Builder()"><B>ImmutableListMultimap.Builder()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>
+<DD>Creates a new builder.
+<DT><A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><B>ImmutableMap</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="./com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An immutable, hash-based <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> with reliable user-specified iteration
+ order.<DT><A HREF="./com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect"><B>ImmutableMap.Builder</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,<A HREF="./com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A builder for creating immutable map instances, especially <code>public
+ static final</code> maps ("constant maps").<DT><A HREF="./com/google/common/collect/ImmutableMap.Builder.html#ImmutableMap.Builder()"><B>ImmutableMap.Builder()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>
+<DD>Creates a new builder.
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect"><B>ImmutableMultimap</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An immutable <A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A>.<DT><A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect"><B>ImmutableMultimap.Builder</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A builder for creating immutable multimap instances, especially
+ <code>public static final</code> multimaps ("constant multimaps").<DT><A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html#ImmutableMultimap.Builder()"><B>ImmutableMultimap.Builder()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>
+<DD>Creates a new builder.
+<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect"><B>ImmutableMultiset</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An immutable hash-based multiset.<DT><A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect"><B>ImmutableMultiset.Builder</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A builder for creating immutable multiset instances, especially
+ <code>public static final</code> multisets ("constant multisets").<DT><A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html#ImmutableMultiset.Builder()"><B>ImmutableMultiset.Builder()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>
+<DD>Creates a new builder.
+<DT><A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect"><B>ImmutableSet</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A high-performance, immutable <code>Set</code> with reliable, user-specified
+ iteration order.<DT><A HREF="./com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect"><B>ImmutableSet.Builder</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A builder for creating immutable set instances, especially
+ <code>public static final</code> sets ("constant sets").<DT><A HREF="./com/google/common/collect/ImmutableSet.Builder.html#ImmutableSet.Builder()"><B>ImmutableSet.Builder()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>
+<DD>Creates a new builder.
+<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect"><B>ImmutableSetMultimap</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An immutable <A HREF="./com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A> with reliable user-specified key and value
+ iteration order.<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect"><B>ImmutableSetMultimap.Builder</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A builder for creating immutable <code>SetMultimap</code> instances, especially
+ <code>public static final</code> multimaps ("constant multimaps").<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html#ImmutableSetMultimap.Builder()"><B>ImmutableSetMultimap.Builder()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>
+<DD>Creates a new builder.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect"><B>ImmutableSortedMap</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An immutable <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util"><CODE>SortedMap</CODE></A>.<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect"><B>ImmutableSortedMap.Builder</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="./com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A builder for creating immutable sorted map instances, especially <code>public static final</code> maps ("constant maps").<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.Builder.html#ImmutableSortedMap.Builder(java.util.Comparator)"><B>ImmutableSortedMap.Builder(Comparator&lt;? super K&gt;)</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>
+<DD>Creates a new builder.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect"><B>ImmutableSortedSet</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An immutable <code>SortedSet</code> that stores its elements in a sorted array.<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect"><B>ImmutableSortedSet.Builder</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A builder for creating immutable sorted set instances, especially
+ <code>public static final</code> sets ("constant sets"), with a given
+ comparator.<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html#ImmutableSortedSet.Builder(java.util.Comparator)"><B>ImmutableSortedSet.Builder(Comparator&lt;? super E&gt;)</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>
+<DD>Creates a new builder.
+<DT><A HREF="./com/google/common/base/Predicates.html#in(java.util.Collection)"><B>in(Collection&lt;? extends T&gt;)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
+<DD>Returns a predicate that evaluates to <code>true</code> if the object reference
+ being tested is a member of the given collection.
+<DT><A HREF="./com/google/common/collect/Multimaps.html#index(java.lang.Iterable, com.google.common.base.Function)"><B>index(Iterable&lt;V&gt;, Function&lt;? super V, K&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
+<DD>Creates an index <code>ImmutableMultimap</code> that contains the results of
+ applying a specified function to each item in an <code>Iterable</code> of
+ values.
+<DT><A HREF="./com/google/common/collect/ForwardingList.html#indexOf(java.lang.Object)"><B>indexOf(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableList.html#indexOf(java.lang.Object)"><B>indexOf(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/MapMaker.html#initialCapacity(int)"><B>initialCapacity(int)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A>
+<DD>Sets a custom initial capacity (defaults to 16).
+<DT><A HREF="./com/google/common/base/Predicates.html#instanceOf(java.lang.Class)"><B>instanceOf(Class&lt;?&gt;)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
+<DD>Returns a predicate that evaluates to <code>true</code> if the object being
+ tested is an instance of the given class.
+<DT><A HREF="./com/google/common/collect/Sets.html#intersection(java.util.Set, java.util.Set)"><B>intersection(Set&lt;E&gt;, Set&lt;?&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
+<DD>Returns an unmodifiable <b>view</b> of the intersection of two sets.
+<DT><A HREF="./com/google/common/collect/BiMap.html#inverse()"><B>inverse()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>
+<DD>Returns the inverse view of this bimap, which maps each of this bimap's
+ values to its associated key.
+<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#inverse()"><B>inverse()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
+<DD>Returns the inverse view of this bimap, which maps each of this bimap's
+ values to its associated key.
+<DT><A HREF="./com/google/common/collect/Multimaps.html#invertFrom(com.google.common.collect.Multimap, M)"><B>invertFrom(Multimap&lt;? extends V, ? extends K&gt;, M)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
+<DD>Copies each key-value mapping in <code>source</code> into <code>dest</code>, with
+ its key and value reversed.
+<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#isEmpty()"><B>isEmpty()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMap.html#isEmpty()"><B>isEmpty()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#isEmpty()"><B>isEmpty()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#isEmpty()"><B>isEmpty()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#isEmpty()"><B>isEmpty()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMap.html#isEmpty()"><B>isEmpty()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#isEmpty()"><B>isEmpty()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Iterables.html#isEmpty(java.lang.Iterable)"><B>isEmpty(Iterable&lt;T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Determines if the given iterable contains no elements.
+<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#isEmpty()"><B>isEmpty()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Multimap.html#isEmpty()"><B>isEmpty()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
+<DD>Returns <code>true</code> if the multimap contains no key-value pairs.
+<DT><A HREF="./com/google/common/base/Predicates.html#isNull()"><B>isNull()</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
+<DD>Returns a predicate that evaluates to <code>true</code> if the object reference
+ being tested is null.
+<DT><A HREF="./com/google/common/collect/Ordering.html#isOrdered(java.lang.Iterable)"><B>isOrdered(Iterable&lt;? extends T&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
+<DD>Returns <code>true</code> if each element in <code>iterable</code> after the first is
+ greater than or equal to the element that preceded it, according to this
+ ordering.
+<DT><A HREF="./com/google/common/collect/Ordering.html#isStrictlyOrdered(java.lang.Iterable)"><B>isStrictlyOrdered(Iterable&lt;? extends T&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
+<DD>Returns <code>true</code> if each element in <code>iterable</code> after the first is
+ <i>strictly</i> greater than the element that preceded it, according to
+ this ordering.
+<DT><A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect"><B>Iterables</B></A> - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>This class contains static utility methods that operate on or return objects
+ of type <code>Iterable</code>.<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#iterator()"><B>iterator()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#iterator()"><B>iterator()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
+<DD>Returns an unmodifiable iterator across the elements in this collection.
+<DT><A HREF="./com/google/common/collect/ImmutableList.html#iterator()"><B>iterator()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#iterator()"><B>iterator()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableSet.html#iterator()"><B>iterator()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Multiset.html#iterator()"><B>iterator()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
+<DD>Returns an iterator over the elements in this collection.
+<DT><A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect"><B>Iterators</B></A> - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>This class contains static utility methods that operate on or return objects
+ of type <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util"><CODE>Iterator</CODE></A>.</DL>
+<HR>
+<A NAME="_J_"><!-- --></A><H2>
+<B>J</B></H2>
+<DL>
+<DT><A HREF="./com/google/common/base/Joiner.html#join(java.lang.Iterable)"><B>join(Iterable&lt;?&gt;)</B></A> -
+Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
+<DD>Returns a string containing the string representation of each of <code>parts</code>, using the previously configured separator between each.
+<DT><A HREF="./com/google/common/base/Joiner.html#join(java.lang.Object[])"><B>join(Object[])</B></A> -
+Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
+<DD>Returns a string containing the string representation of each of <code>parts</code>, using the previously configured separator between each.
+<DT><A HREF="./com/google/common/base/Joiner.html#join(java.lang.Object, java.lang.Object, java.lang.Object...)"><B>join(Object, Object, Object...)</B></A> -
+Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
+<DD>Returns a string containing the string representation of each argument,
+ using the previously configured separator between each.
+<DT><A HREF="./com/google/common/base/Joiner.MapJoiner.html#join(java.util.Map)"><B>join(Map&lt;?, ?&gt;)</B></A> -
+Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A>
+<DD>Returns a string containing the string representation of each entry of
+ <code>map</code>, using the previously configured separator and key-value
+ separator.
+<DT><A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base"><B>Joiner</B></A> - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>An object which joins pieces of text (specified as an array, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang"><CODE>Iterable</CODE></A>, varargs or even a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A>) with a separator.<DT><A HREF="./com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base"><B>Joiner.MapJoiner</B></A> - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>An object that joins map entries in the same manner as <code>Joiner</code> joins
+ iterables and arrays.</DL>
+<HR>
+<A NAME="_K_"><!-- --></A><H2>
+<B>K</B></H2>
+<DL>
+<DT><A HREF="./com/google/common/collect/TreeMultimap.html#keyComparator()"><B>keyComparator()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>
+<DD>Returns the comparator that orders the multimap keys.
+<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#keys()"><B>keys()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#keys()"><B>keys()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>Returns a collection, which may contain duplicates, of all keys.
+<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#keys()"><B>keys()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Multimap.html#keys()"><B>keys()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
+<DD>Returns a collection, which may contain duplicates, of all keys.
+<DT><A HREF="./com/google/common/collect/ForwardingMap.html#keySet()"><B>keySet()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#keySet()"><B>keySet()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#keySet()"><B>keySet()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMap.html#keySet()"><B>keySet()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
+<DD>Returns an immutable set of the keys in this map.
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#keySet()"><B>keySet()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>Returns an immutable set of the distinct keys in this multimap.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#keySet()"><B>keySet()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
+<DD>Returns an immutable sorted set of the keys in this map.
+<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#keySet()"><B>keySet()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Multimap.html#keySet()"><B>keySet()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
+<DD>Returns the set of all keys, each appearing once in the returned set.
+<DT><A HREF="./com/google/common/collect/TreeMultimap.html#keySet()"><B>keySet()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>
+<DD>Returns the set of all keys, each appearing once in the returned set.
+<DT><A HREF="./com/google/common/collect/EnumBiMap.html#keyType()"><B>keyType()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A>
+<DD>Returns the associated key type.
+<DT><A HREF="./com/google/common/collect/EnumHashBiMap.html#keyType()"><B>keyType()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>
+<DD>Returns the associated key type.
+</DL>
+<HR>
+<A NAME="_L_"><!-- --></A><H2>
+<B>L</B></H2>
+<DL>
+<DT><A HREF="./com/google/common/collect/ForwardingSortedSet.html#last()"><B>last()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingList.html#lastIndexOf(java.lang.Object)"><B>lastIndexOf(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableList.html#lastIndexOf(java.lang.Object)"><B>lastIndexOf(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingSortedMap.html#lastKey()"><B>lastKey()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#lastKey()"><B>lastKey()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/MapDifference.ValueDifference.html#leftValue()"><B>leftValue()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect">MapDifference.ValueDifference</A>
+<DD>Returns the value from the left map (possibly null).
+<DT><A HREF="./com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect"><B>LinkedHashMultimap</B></A>&lt;<A HREF="./com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">K</A>,<A HREF="./com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Implementation of <code>Multimap</code> that does not allow duplicate key-value
+ entries and that returns collections whose iterators follow the ordering in
+ which the data was added to the multimap.<DT><A HREF="./com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect"><B>LinkedHashMultiset</B></A>&lt;<A HREF="./com/google/common/collect/LinkedHashMultiset.html" title="type parameter in LinkedHashMultiset">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A <code>Multiset</code> implementation with predictable iteration order.<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect"><B>LinkedListMultimap</B></A>&lt;<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An implementation of <code>ListMultimap</code> that supports deterministic
+ iteration order for both keys and values.<DT><A HREF="./com/google/common/collect/ForwardingList.html#listIterator()"><B>listIterator()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingList.html#listIterator(int)"><B>listIterator(int)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><B>ListMultimap</B></A>&lt;<A HREF="./com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">K</A>,<A HREF="./com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt; - Interface in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A <code>Multimap</code> that can hold duplicate key-value pairs and that maintains
+ the insertion ordering of values for a given key.<DT><A HREF="./com/google/common/collect/Lists.html" title="class in com.google.common.collect"><B>Lists</B></A> - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Static utility methods pertaining to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A> instances.</DL>
+<HR>
+<A NAME="_M_"><!-- --></A><H2>
+<B>M</B></H2>
+<DL>
+<DT><A HREF="./com/google/common/collect/MapMaker.html#makeComputingMap(com.google.common.base.Function)"><B>makeComputingMap(Function&lt;? super K, ? extends V&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A>
+<DD>Builds a map that supports atomic, on-demand computation of values.
+<DT><A HREF="./com/google/common/collect/MapMaker.html#makeMap()"><B>makeMap()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A>
+<DD>Builds the final map, without on-demand computation of values.
+<DT><A HREF="./com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect"><B>MapDifference</B></A>&lt;<A HREF="./com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">K</A>,<A HREF="./com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">V</A>&gt; - Interface in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An object representing the differences between two maps.<DT><A HREF="./com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect"><B>MapDifference.ValueDifference</B></A>&lt;<A HREF="./com/google/common/collect/MapDifference.ValueDifference.html" title="type parameter in MapDifference.ValueDifference">V</A>&gt; - Interface in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A difference between the mappings from two maps with the same key.<DT><A HREF="./com/google/common/collect/MapMaker.html" title="class in com.google.common.collect"><B>MapMaker</B></A> - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ConcurrentMap</CODE></A> builder, providing any combination of these
+ features: <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref">soft</A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref">weak</A> keys, soft or weak values, timed expiration, and on-demand
+ computation of values.<DT><A HREF="./com/google/common/collect/MapMaker.html#MapMaker()"><B>MapMaker()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A>
+<DD>Constructs a new <code>MapMaker</code> instance with default settings,
+ including strong keys, strong values, and no automatic expiration.
+<DT><A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect"><B>Maps</B></A> - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Static utility methods pertaining to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> instances.<DT><A HREF="./com/google/common/collect/Ordering.html#max(java.lang.Iterable)"><B>max(Iterable&lt;E&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
+<DD>Returns the largest of the specified values according to this ordering.
+<DT><A HREF="./com/google/common/collect/Ordering.html#max(E, E, E, E...)"><B>max(E, E, E, E...)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
+<DD>Returns the largest of the specified values according to this ordering.
+<DT><A HREF="./com/google/common/collect/Ordering.html#max(E, E)"><B>max(E, E)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
+<DD>Returns the larger of the two values according to this ordering.
+<DT><A HREF="./com/google/common/base/Suppliers.html#memoize(com.google.common.base.Supplier)"><B>memoize(Supplier&lt;T&gt;)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Suppliers.html" title="class in com.google.common.base">Suppliers</A>
+<DD>Returns a supplier which caches the instance retrieved during the first
+ call to <code>get()</code> and returns that value on subsequent calls to
+ <code>get()</code>.
+<DT><A HREF="./com/google/common/collect/Ordering.html#min(java.lang.Iterable)"><B>min(Iterable&lt;E&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
+<DD>Returns the smallest of the specified values according to this ordering.
+<DT><A HREF="./com/google/common/collect/Ordering.html#min(E, E, E, E...)"><B>min(E, E, E, E...)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
+<DD>Returns the smallest of the specified values according to this ordering.
+<DT><A HREF="./com/google/common/collect/Ordering.html#min(E, E)"><B>min(E, E)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
+<DD>Returns the smaller of the two values according to this ordering.
+<DT><A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><B>Multimap</B></A>&lt;<A HREF="./com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>,<A HREF="./com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt; - Interface in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A collection similar to a <code>Map</code>, but which may associate multiple
+ values with a single key.<DT><A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect"><B>Multimaps</B></A> - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Provides static methods acting on or generating a <code>Multimap</code>.<DT><A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><B>Multiset</B></A>&lt;<A HREF="./com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt; - Interface in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A collection that supports order-independent equality, like <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>, but
+ may have duplicate elements.<DT><A HREF="./com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect"><B>Multiset.Entry</B></A>&lt;<A HREF="./com/google/common/collect/Multiset.Entry.html" title="type parameter in Multiset.Entry">E</A>&gt; - Interface in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An unmodifiable element-count pair for a multiset.<DT><A HREF="./com/google/common/collect/Multisets.html" title="class in com.google.common.collect"><B>Multisets</B></A> - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Provides static utility methods for creating and working with <A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><CODE>Multiset</CODE></A> instances.<DT><A HREF="./com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>MutableClassToInstanceMap</B></A>&lt;<A HREF="./com/google/common/collect/MutableClassToInstanceMap.html" title="type parameter in MutableClassToInstanceMap">B</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A mutable class-to-instance map backed by an arbitrary user-provided map.</DL>
+<HR>
+<A NAME="_N_"><!-- --></A><H2>
+<B>N</B></H2>
+<DL>
+<DT><A HREF="./com/google/common/collect/Ordering.html#natural()"><B>natural()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
+<DD>Returns a serializable ordering that uses the natural order of the values.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#naturalOrder()"><B>naturalOrder()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
+<DD>Returns a builder that creates immutable sorted maps whose keys are
+ ordered by their natural ordering.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#naturalOrder()"><B>naturalOrder()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
+<DD>Returns a builder that creates immutable sorted sets whose elements are
+ ordered by their natural ordering.
+<DT><A HREF="./com/google/common/collect/ObjectArrays.html#newArray(java.lang.Class, int)"><B>newArray(Class&lt;T&gt;, int)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect">ObjectArrays</A>
+<DD>Returns a new array of the given length with the specified component type.
+<DT><A HREF="./com/google/common/collect/ObjectArrays.html#newArray(T[], int)"><B>newArray(T[], int)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect">ObjectArrays</A>
+<DD>Returns a new array of the given length with the same type as a reference
+ array.
+<DT><A HREF="./com/google/common/collect/Lists.html#newArrayList()"><B>newArrayList()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A>
+<DD>Creates a <i>mutable</i>, empty <code>ArrayList</code> instance.
+<DT><A HREF="./com/google/common/collect/Lists.html#newArrayList(E...)"><B>newArrayList(E...)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A>
+<DD>Creates a <i>mutable</i> <code>ArrayList</code> instance containing the given
+ elements.
+<DT><A HREF="./com/google/common/collect/Lists.html#newArrayList(java.lang.Iterable)"><B>newArrayList(Iterable&lt;? extends E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A>
+<DD>Creates a <i>mutable</i> <code>ArrayList</code> instance containing the given
+ elements.
+<DT><A HREF="./com/google/common/collect/Lists.html#newArrayList(java.util.Iterator)"><B>newArrayList(Iterator&lt;? extends E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A>
+<DD>Creates a <i>mutable</i> <code>ArrayList</code> instance containing the given
+ elements.
+<DT><A HREF="./com/google/common/collect/Lists.html#newArrayListWithCapacity(int)"><B>newArrayListWithCapacity(int)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A>
+<DD>Creates an <code>ArrayList</code> instance backed by an array of the
+ <i>exact</i> size specified; equivalent to
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true#ArrayList(int)" title="class or interface in java.util"><CODE>ArrayList.ArrayList(int)</CODE></A>.
+<DT><A HREF="./com/google/common/collect/Lists.html#newArrayListWithExpectedSize(int)"><B>newArrayListWithExpectedSize(int)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A>
+<DD>Creates an <code>ArrayList</code> instance sized appropriately to hold an
+ <i>estimated</i> number of elements without resizing.
+<DT><A HREF="./com/google/common/collect/Maps.html#newEnumMap(java.lang.Class)"><B>newEnumMap(Class&lt;K&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
+<DD>Creates an <code>EnumMap</code> instance.
+<DT><A HREF="./com/google/common/collect/Maps.html#newEnumMap(java.util.Map)"><B>newEnumMap(Map&lt;K, ? extends V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
+<DD>Creates an <code>EnumMap</code> with the same mappings as the specified map.
+<DT><A HREF="./com/google/common/collect/Sets.html#newEnumSet(java.lang.Iterable, java.lang.Class)"><B>newEnumSet(Iterable&lt;E&gt;, Class&lt;E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
+<DD>Returns a new <code>EnumSet</code> instance containing the given elements.
+<DT><A HREF="./com/google/common/collect/Maps.html#newHashMap()"><B>newHashMap()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
+<DD>Creates a <i>mutable</i>, empty <code>HashMap</code> instance.
+<DT><A HREF="./com/google/common/collect/Maps.html#newHashMap(java.util.Map)"><B>newHashMap(Map&lt;? extends K, ? extends V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
+<DD>Creates a <i>mutable</i> <code>HashMap</code> instance with the same mappings as
+ the specified map.
+<DT><A HREF="./com/google/common/collect/Maps.html#newHashMapWithExpectedSize(int)"><B>newHashMapWithExpectedSize(int)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
+<DD>Creates a <code>HashMap</code> instance with enough capacity to hold the
+ specified number of elements without rehashing.
+<DT><A HREF="./com/google/common/collect/Sets.html#newHashSet()"><B>newHashSet()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
+<DD>Creates a <i>mutable</i>, empty <code>HashSet</code> instance.
+<DT><A HREF="./com/google/common/collect/Sets.html#newHashSet(E...)"><B>newHashSet(E...)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
+<DD>Creates a <i>mutable</i> <code>HashSet</code> instance containing the given
+ elements in unspecified order.
+<DT><A HREF="./com/google/common/collect/Sets.html#newHashSet(java.lang.Iterable)"><B>newHashSet(Iterable&lt;? extends E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
+<DD>Creates a <i>mutable</i> <code>HashSet</code> instance containing the given
+ elements in unspecified order.
+<DT><A HREF="./com/google/common/collect/Sets.html#newHashSet(java.util.Iterator)"><B>newHashSet(Iterator&lt;? extends E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
+<DD>Creates a <i>mutable</i> <code>HashSet</code> instance containing the given
+ elements in unspecified order.
+<DT><A HREF="./com/google/common/collect/Sets.html#newHashSetWithExpectedSize(int)"><B>newHashSetWithExpectedSize(int)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
+<DD>Creates an empty <code>HashSet</code> instance with enough capacity to hold the
+ specified number of elements without rehashing.
+<DT><A HREF="./com/google/common/collect/Maps.html#newIdentityHashMap()"><B>newIdentityHashMap()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
+<DD>Creates an <code>IdentityHashMap</code> instance.
+<DT><A HREF="./com/google/common/collect/Maps.html#newLinkedHashMap()"><B>newLinkedHashMap()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
+<DD>Creates a <i>mutable</i>, empty, insertion-ordered <code>LinkedHashMap</code>
+ instance.
+<DT><A HREF="./com/google/common/collect/Maps.html#newLinkedHashMap(java.util.Map)"><B>newLinkedHashMap(Map&lt;? extends K, ? extends V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
+<DD>Creates a <i>mutable</i>, insertion-ordered <code>LinkedHashMap</code> instance
+ with the same mappings as the specified map.
+<DT><A HREF="./com/google/common/collect/Sets.html#newLinkedHashSet()"><B>newLinkedHashSet()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
+<DD>Creates a <i>mutable</i>, empty <code>LinkedHashSet</code> instance.
+<DT><A HREF="./com/google/common/collect/Sets.html#newLinkedHashSet(java.lang.Iterable)"><B>newLinkedHashSet(Iterable&lt;? extends E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
+<DD>Creates a <i>mutable</i> <code>LinkedHashSet</code> instance containing the
+ given elements in order.
+<DT><A HREF="./com/google/common/collect/Lists.html#newLinkedList()"><B>newLinkedList()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A>
+<DD>Creates an empty <code>LinkedList</code> instance.
+<DT><A HREF="./com/google/common/collect/Lists.html#newLinkedList(java.lang.Iterable)"><B>newLinkedList(Iterable&lt;? extends E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A>
+<DD>Creates a <code>LinkedList</code> instance containing the given elements.
+<DT><A HREF="./com/google/common/collect/Multimaps.html#newListMultimap(java.util.Map, com.google.common.base.Supplier)"><B>newListMultimap(Map&lt;K, Collection&lt;V&gt;&gt;, Supplier&lt;? extends List&lt;V&gt;&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
+<DD>Creates a new <code>ListMultimap</code> that uses the provided map and factory.
+<DT><A HREF="./com/google/common/collect/Multimaps.html#newMultimap(java.util.Map, com.google.common.base.Supplier)"><B>newMultimap(Map&lt;K, Collection&lt;V&gt;&gt;, Supplier&lt;? extends Collection&lt;V&gt;&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
+<DD>Creates a new <code>Multimap</code> that uses the provided map and factory.
+<DT><A HREF="./com/google/common/collect/Sets.html#newSetFromMap(java.util.Map)"><B>newSetFromMap(Map&lt;E, Boolean&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
+<DD>Returns a set backed by the specified map.
+<DT><A HREF="./com/google/common/collect/Multimaps.html#newSetMultimap(java.util.Map, com.google.common.base.Supplier)"><B>newSetMultimap(Map&lt;K, Collection&lt;V&gt;&gt;, Supplier&lt;? extends Set&lt;V&gt;&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
+<DD>Creates a new <code>SetMultimap</code> that uses the provided map and factory.
+<DT><A HREF="./com/google/common/collect/Multimaps.html#newSortedSetMultimap(java.util.Map, com.google.common.base.Supplier)"><B>newSortedSetMultimap(Map&lt;K, Collection&lt;V&gt;&gt;, Supplier&lt;? extends SortedSet&lt;V&gt;&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
+<DD>Creates a new <code>SortedSetMultimap</code> that uses the provided map and
+ factory.
+<DT><A HREF="./com/google/common/collect/Maps.html#newTreeMap()"><B>newTreeMap()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
+<DD>Creates a <i>mutable</i>, empty <code>TreeMap</code> instance using the natural
+ ordering of its elements.
+<DT><A HREF="./com/google/common/collect/Maps.html#newTreeMap(java.util.SortedMap)"><B>newTreeMap(SortedMap&lt;K, ? extends V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
+<DD>Creates a <i>mutable</i> <code>TreeMap</code> instance with the same mappings as
+ the specified map and using the same ordering as the specified map.
+<DT><A HREF="./com/google/common/collect/Maps.html#newTreeMap(java.util.Comparator)"><B>newTreeMap(Comparator&lt;C&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
+<DD>Creates a <i>mutable</i>, empty <code>TreeMap</code> instance using the given
+ comparator.
+<DT><A HREF="./com/google/common/collect/Sets.html#newTreeSet()"><B>newTreeSet()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
+<DD>Creates a <i>mutable</i>, empty <code>TreeSet</code> instance sorted by the
+ natural sort ordering of its elements.
+<DT><A HREF="./com/google/common/collect/Sets.html#newTreeSet(java.lang.Iterable)"><B>newTreeSet(Iterable&lt;? extends E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
+<DD>Creates a <i>mutable</i> <code>TreeSet</code> instance containing the given
+ elements sorted by their natural ordering.
+<DT><A HREF="./com/google/common/collect/Sets.html#newTreeSet(java.util.Comparator)"><B>newTreeSet(Comparator&lt;? super E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
+<DD>Creates a <i>mutable</i>, empty <code>TreeSet</code> instance with the given
+ comparator.
+<DT><A HREF="./com/google/common/collect/AbstractIterator.html#next()"><B>next()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect">AbstractIterator</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingIterator.html#next()"><B>next()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/PeekingIterator.html#next()"><B>next()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect">PeekingIterator</A>
+<DD>Returns the next element in the iteration.
+<DT><A HREF="./com/google/common/collect/ForwardingListIterator.html#nextIndex()"><B>nextIndex()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/base/Predicates.html#not(com.google.common.base.Predicate)"><B>not(Predicate&lt;T&gt;)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
+<DD>Returns a predicate that evaluates to <code>true</code> if the given predicate
+ evaluates to <code>false</code>.
+<DT><A HREF="./com/google/common/base/Predicates.html#notNull()"><B>notNull()</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
+<DD>Returns a predicate that evaluates to <code>true</code> if the object reference
+ being tested is not null.
+<DT><A HREF="./com/google/common/collect/Ordering.html#nullsFirst()"><B>nullsFirst()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
+<DD>Returns an ordering that treats <code>null</code> as less than all other values
+ and uses <code>this</code> to compare non-null values.
+<DT><A HREF="./com/google/common/collect/Ordering.html#nullsLast()"><B>nullsLast()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
+<DD>Returns an ordering that treats <code>null</code> as greater than all other
+ values and uses this ordering to compare non-null values.
+</DL>
+<HR>
+<A NAME="_O_"><!-- --></A><H2>
+<B>O</B></H2>
+<DL>
+<DT><A HREF="./com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect"><B>ObjectArrays</B></A> - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Static utility methods pertaining to object arrays.<DT><A HREF="./com/google/common/base/Objects.html" title="class in com.google.common.base"><B>Objects</B></A> - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>Helper functions that can operate on any <code>Object</code>.<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#of()"><B>of()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
+<DD>Returns the empty bimap.
+<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#of(K, V)"><B>of(K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
+<DD>Returns an immutable bimap containing a single entry.
+<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#of(K, V, K, V)"><B>of(K, V, K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
+<DD>Returns an immutable map containing the given entries, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#of(K, V, K, V, K, V)"><B>of(K, V, K, V, K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
+<DD>Returns an immutable map containing the given entries, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#of(K, V, K, V, K, V, K, V)"><B>of(K, V, K, V, K, V, K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
+<DD>Returns an immutable map containing the given entries, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#of(K, V, K, V, K, V, K, V, K, V)"><B>of(K, V, K, V, K, V, K, V, K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
+<DD>Returns an immutable map containing the given entries, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableList.html#of()"><B>of()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
+<DD>Returns the empty immutable list.
+<DT><A HREF="./com/google/common/collect/ImmutableList.html#of(E)"><B>of(E)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
+<DD>Returns an immutable list containing a single element.
+<DT><A HREF="./com/google/common/collect/ImmutableList.html#of(E, E)"><B>of(E, E)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
+<DD>Identical to <A HREF="./com/google/common/collect/ImmutableList.html#of(E...)"><CODE>ImmutableList.of(Object[])</CODE></A>.
+<DT><A HREF="./com/google/common/collect/ImmutableList.html#of(E, E, E)"><B>of(E, E, E)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
+<DD>Identical to <A HREF="./com/google/common/collect/ImmutableList.html#of(E...)"><CODE>ImmutableList.of(Object[])</CODE></A>.
+<DT><A HREF="./com/google/common/collect/ImmutableList.html#of(E, E, E, E)"><B>of(E, E, E, E)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
+<DD>Identical to <A HREF="./com/google/common/collect/ImmutableList.html#of(E...)"><CODE>ImmutableList.of(Object[])</CODE></A>.
+<DT><A HREF="./com/google/common/collect/ImmutableList.html#of(E, E, E, E, E)"><B>of(E, E, E, E, E)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
+<DD>Identical to <A HREF="./com/google/common/collect/ImmutableList.html#of(E...)"><CODE>ImmutableList.of(Object[])</CODE></A>.
+<DT><A HREF="./com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E)"><B>of(E, E, E, E, E, E)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
+<DD>Identical to <A HREF="./com/google/common/collect/ImmutableList.html#of(E...)"><CODE>ImmutableList.of(Object[])</CODE></A>.
+<DT><A HREF="./com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E)"><B>of(E, E, E, E, E, E, E)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
+<DD>Identical to <A HREF="./com/google/common/collect/ImmutableList.html#of(E...)"><CODE>ImmutableList.of(Object[])</CODE></A>.
+<DT><A HREF="./com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E, E)"><B>of(E, E, E, E, E, E, E, E)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
+<DD>Identical to <A HREF="./com/google/common/collect/ImmutableList.html#of(E...)"><CODE>ImmutableList.of(Object[])</CODE></A>.
+<DT><A HREF="./com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E, E, E)"><B>of(E, E, E, E, E, E, E, E, E)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
+<DD>Identical to <A HREF="./com/google/common/collect/ImmutableList.html#of(E...)"><CODE>ImmutableList.of(Object[])</CODE></A>.
+<DT><A HREF="./com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E, E, E, E)"><B>of(E, E, E, E, E, E, E, E, E, E)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
+<DD>Identical to <A HREF="./com/google/common/collect/ImmutableList.html#of(E...)"><CODE>ImmutableList.of(Object[])</CODE></A>.
+<DT><A HREF="./com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E, E, E, E, E)"><B>of(E, E, E, E, E, E, E, E, E, E, E)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
+<DD>Identical to <A HREF="./com/google/common/collect/ImmutableList.html#of(E...)"><CODE>ImmutableList.of(Object[])</CODE></A>.
+<DT><A HREF="./com/google/common/collect/ImmutableList.html#of(E...)"><B>of(E...)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
+<DD>Returns an immutable list containing the given elements, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.html#of()"><B>of()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>
+<DD>Returns the empty multimap.
+<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.html#of(K, V)"><B>of(K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>
+<DD>Returns an immutable multimap containing a single entry.
+<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.html#of(K, V, K, V)"><B>of(K, V, K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>
+<DD>Returns an immutable multimap containing the given entries, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.html#of(K, V, K, V, K, V)"><B>of(K, V, K, V, K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>
+<DD>Returns an immutable multimap containing the given entries, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.html#of(K, V, K, V, K, V, K, V)"><B>of(K, V, K, V, K, V, K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>
+<DD>Returns an immutable multimap containing the given entries, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.html#of(K, V, K, V, K, V, K, V, K, V)"><B>of(K, V, K, V, K, V, K, V, K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>
+<DD>Returns an immutable multimap containing the given entries, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableMap.html#of()"><B>of()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
+<DD>Returns the empty map.
+<DT><A HREF="./com/google/common/collect/ImmutableMap.html#of(K, V)"><B>of(K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
+<DD>Returns an immutable map containing a single entry.
+<DT><A HREF="./com/google/common/collect/ImmutableMap.html#of(K, V, K, V)"><B>of(K, V, K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
+<DD>Returns an immutable map containing the given entries, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableMap.html#of(K, V, K, V, K, V)"><B>of(K, V, K, V, K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
+<DD>Returns an immutable map containing the given entries, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableMap.html#of(K, V, K, V, K, V, K, V)"><B>of(K, V, K, V, K, V, K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
+<DD>Returns an immutable map containing the given entries, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableMap.html#of(K, V, K, V, K, V, K, V, K, V)"><B>of(K, V, K, V, K, V, K, V, K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
+<DD>Returns an immutable map containing the given entries, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#of()"><B>of()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>Returns an empty multimap.
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#of(K, V)"><B>of(K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>Returns an immutable multimap containing a single entry.
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#of(K, V, K, V)"><B>of(K, V, K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>Returns an immutable multimap containing the given entries, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#of(K, V, K, V, K, V)"><B>of(K, V, K, V, K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>Returns an immutable multimap containing the given entries, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#of(K, V, K, V, K, V, K, V)"><B>of(K, V, K, V, K, V, K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>Returns an immutable multimap containing the given entries, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#of(K, V, K, V, K, V, K, V, K, V)"><B>of(K, V, K, V, K, V, K, V, K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>Returns an immutable multimap containing the given entries, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#of()"><B>of()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
+<DD>Returns the empty immutable multiset.
+<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#of(E...)"><B>of(E...)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
+<DD>Returns an immutable multiset containing the given elements.
+<DT><A HREF="./com/google/common/collect/ImmutableSet.html#of()"><B>of()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
+<DD>Returns the empty immutable set.
+<DT><A HREF="./com/google/common/collect/ImmutableSet.html#of(E)"><B>of(E)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
+<DD>Returns an immutable set containing a single element.
+<DT><A HREF="./com/google/common/collect/ImmutableSet.html#of(E, E)"><B>of(E, E)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
+<DD>Returns an immutable set containing the given elements, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableSet.html#of(E, E, E)"><B>of(E, E, E)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
+<DD>Returns an immutable set containing the given elements, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableSet.html#of(E, E, E, E)"><B>of(E, E, E, E)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
+<DD>Returns an immutable set containing the given elements, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableSet.html#of(E, E, E, E, E)"><B>of(E, E, E, E, E)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
+<DD>Returns an immutable set containing the given elements, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableSet.html#of(E...)"><B>of(E...)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
+<DD>Returns an immutable set containing the given elements, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.html#of()"><B>of()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>
+<DD>Returns the empty multimap.
+<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.html#of(K, V)"><B>of(K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>
+<DD>Returns an immutable multimap containing a single entry.
+<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.html#of(K, V, K, V)"><B>of(K, V, K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>
+<DD>Returns an immutable multimap containing the given entries, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.html#of(K, V, K, V, K, V)"><B>of(K, V, K, V, K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>
+<DD>Returns an immutable multimap containing the given entries, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.html#of(K, V, K, V, K, V, K, V)"><B>of(K, V, K, V, K, V, K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>
+<DD>Returns an immutable multimap containing the given entries, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.html#of(K, V, K, V, K, V, K, V, K, V)"><B>of(K, V, K, V, K, V, K, V, K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>
+<DD>Returns an immutable multimap containing the given entries, in order.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#of()"><B>of()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
+<DD>Returns the empty sorted map.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#of(K, V)"><B>of(K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
+<DD>Returns an immutable map containing a single entry.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#of(K, V, K, V)"><B>of(K, V, K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
+<DD>Returns an immutable sorted map containing the given entries, sorted by the
+ natural ordering of their keys.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#of(K, V, K, V, K, V)"><B>of(K, V, K, V, K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
+<DD>Returns an immutable sorted map containing the given entries, sorted by the
+ natural ordering of their keys.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#of(K, V, K, V, K, V, K, V)"><B>of(K, V, K, V, K, V, K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
+<DD>Returns an immutable sorted map containing the given entries, sorted by the
+ natural ordering of their keys.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#of(K, V, K, V, K, V, K, V, K, V)"><B>of(K, V, K, V, K, V, K, V, K, V)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
+<DD>Returns an immutable sorted map containing the given entries, sorted by the
+ natural ordering of their keys.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#of()"><B>of()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
+<DD>Returns the empty immutable sorted set.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#of(E)"><B>of(E)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
+<DD>Returns an immutable sorted set containing a single element.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#of(E, E)"><B>of(E, E)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
+<DD>Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#of(E, E, E)"><B>of(E, E, E)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
+<DD>Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#of(E, E, E, E)"><B>of(E, E, E, E)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
+<DD>Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#of(E, E, E, E, E)"><B>of(E, E, E, E, E)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
+<DD>Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#of(E...)"><B>of(E...)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
+<DD>Returns an immutable sorted set containing the given elements sorted by
+ their natural ordering.
+<DT><A HREF="./com/google/common/collect/ForwardingQueue.html#offer(E)"><B>offer(E)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect">ForwardingQueue</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/base/Suppliers.html#ofInstance(T)"><B>ofInstance(T)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Suppliers.html" title="class in com.google.common.base">Suppliers</A>
+<DD>Returns a supplier that always supplies <code>instance</code>.
+<DT><A HREF="./com/google/common/base/Joiner.html#on(java.lang.String)"><B>on(String)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
+<DD>Returns a joiner which automatically places <code>separator</code> between
+ consecutive elements.
+<DT><A HREF="./com/google/common/base/Joiner.html#on(char)"><B>on(char)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
+<DD>Returns a joiner which automatically places <code>separator</code> between
+ consecutive elements.
+<DT><A HREF="./com/google/common/collect/Ordering.html#onResultOf(com.google.common.base.Function)"><B>onResultOf(Function&lt;F, ? extends T&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
+<DD>Returns a new ordering on <code>F</code> which orders elements by first applying
+ a function to them, then comparing those results using <code>this</code>.
+<DT><A HREF="./com/google/common/base/Predicates.html#or(java.lang.Iterable)"><B>or(Iterable&lt;? extends Predicate&lt;? super T&gt;&gt;)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
+<DD>Returns a predicate that evaluates to <code>true</code> if any one of its
+ components evaluates to <code>true</code>.
+<DT><A HREF="./com/google/common/base/Predicates.html#or(com.google.common.base.Predicate...)"><B>or(Predicate&lt;? super T&gt;...)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
+<DD>Returns a predicate that evaluates to <code>true</code> if any one of its
+ components evaluates to <code>true</code>.
+<DT><A HREF="./com/google/common/base/Predicates.html#or(com.google.common.base.Predicate, com.google.common.base.Predicate)"><B>or(Predicate&lt;? super T&gt;, Predicate&lt;? super T&gt;)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
+<DD>Returns a predicate that evaluates to <code>true</code> if either of its
+ components evaluates to <code>true</code>.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#orderedBy(java.util.Comparator)"><B>orderedBy(Comparator&lt;K&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
+<DD>Returns a builder that creates immutable sorted maps with an explicit
+ comparator.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#orderedBy(java.util.Comparator)"><B>orderedBy(Comparator&lt;E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
+<DD>Returns a builder that creates immutable sorted sets with an explicit
+ comparator.
+<DT><A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect"><B>Ordering</B></A>&lt;<A HREF="./com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A comparator with added methods to support common functions.<DT><A HREF="./com/google/common/collect/Ordering.html#Ordering()"><B>Ordering()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
+<DD>Constructs a new instance of this class (only invokable by the subclass
+ constructor, typically implicit).
+</DL>
+<HR>
+<A NAME="_P_"><!-- --></A><H2>
+<B>P</B></H2>
+<DL>
+<DT><A HREF="./com/google/common/collect/Iterables.html#paddedPartition(java.lang.Iterable, int)"><B>paddedPartition(Iterable&lt;T&gt;, int)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Divides an iterable into unmodifiable sublists of the given size, padding
+ the final iterable with null values if necessary.
+<DT><A HREF="./com/google/common/collect/Iterators.html#paddedPartition(java.util.Iterator, int)"><B>paddedPartition(Iterator&lt;T&gt;, int)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Divides an iterator into unmodifiable sublists of the given size, padding
+ the final iterator with null values if necessary.
+<DT><A HREF="./com/google/common/collect/Iterables.html#partition(java.lang.Iterable, int)"><B>partition(Iterable&lt;T&gt;, int)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Divides an iterable into unmodifiable sublists of the given size (the final
+ iterable may be smaller).
+<DT><A HREF="./com/google/common/collect/Iterators.html#partition(java.util.Iterator, int)"><B>partition(Iterator&lt;T&gt;, int)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Divides an iterator into unmodifiable sublists of the given size (the final
+ list may be smaller).
+<DT><A HREF="./com/google/common/collect/Lists.html#partition(java.util.List, int)"><B>partition(List&lt;T&gt;, int)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A>
+<DD>Returns consecutive <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#subList(int, int)" title="class or interface in java.util">sublists</A> of a list,
+ each of the same size (the final list may be smaller).
+<DT><A HREF="./com/google/common/collect/AbstractIterator.html#peek()"><B>peek()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect">AbstractIterator</A>
+<DD>Returns the next element in the iteration without advancing the iteration,
+ according to the contract of <A HREF="./com/google/common/collect/PeekingIterator.html#peek()"><CODE>PeekingIterator.peek()</CODE></A>.
+<DT><A HREF="./com/google/common/collect/ForwardingQueue.html#peek()"><B>peek()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect">ForwardingQueue</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/PeekingIterator.html#peek()"><B>peek()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect">PeekingIterator</A>
+<DD>Returns the next element in the iteration, without advancing the iteration.
+<DT><A HREF="./com/google/common/collect/Iterators.html#peekingIterator(java.util.Iterator)"><B>peekingIterator(Iterator&lt;? extends T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Returns a <code>PeekingIterator</code> backed by the given iterator.
+<DT><A HREF="./com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect"><B>PeekingIterator</B></A>&lt;<A HREF="./com/google/common/collect/PeekingIterator.html" title="type parameter in PeekingIterator">E</A>&gt; - Interface in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An iterator that supports a one-element lookahead while iterating.<DT><A HREF="./com/google/common/collect/ForwardingQueue.html#poll()"><B>poll()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect">ForwardingQueue</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base"><B>Preconditions</B></A> - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>Simple static methods to be called at the start of your own methods to verify
+ correct arguments and state.<DT><A HREF="./com/google/common/base/Predicate.html" title="interface in com.google.common.base"><B>Predicate</B></A>&lt;<A HREF="./com/google/common/base/Predicate.html" title="type parameter in Predicate">T</A>&gt; - Interface in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>Determines a true or false value for a given input.<DT><A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base"><B>Predicates</B></A> - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>Contains static factory methods for creating <code>Predicate</code> instances.<DT><A HREF="./com/google/common/collect/ForwardingListIterator.html#previous()"><B>previous()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingListIterator.html#previousIndex()"><B>previousIndex()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/BiMap.html#put(K, V)"><B>put(K, V)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>
+<DD>Associates the specified value with the specified key in this map
+ (optional operation).
+<DT><A HREF="./com/google/common/collect/EnumHashBiMap.html#put(K, V)"><B>put(K, V)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMap.html#put(K, V)"><B>put(K, V)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#put(K, V)"><B>put(K, V)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/HashBiMap.html#put(K, V)"><B>put(K, V)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableBiMap.Builder.html#put(K, V)"><B>put(K, V)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>
+<DD>Associates <code>key</code> with <code>value</code> in the built bimap.
+<DT><A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#put(java.lang.Class, T)"><B>put(Class&lt;T&gt;, T)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>
+<DD>Associates <code>key</code> with <code>value</code> in the built map.
+<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html#put(K, V)"><B>put(K, V)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>
+<DD>Adds a key-value mapping to the built multimap.
+<DT><A HREF="./com/google/common/collect/ImmutableMap.Builder.html#put(K, V)"><B>put(K, V)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>
+<DD>Associates <code>key</code> with <code>value</code> in the built map.
+<DT><A HREF="./com/google/common/collect/ImmutableMap.html#put(K, V)"><B>put(K, V)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
+<DD>Guaranteed to throw an exception and leave the map unmodified.
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html#put(K, V)"><B>put(K, V)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>
+<DD>Adds a key-value mapping to the built multimap.
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#put(K, V)"><B>put(K, V)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>Guaranteed to throw an exception and leave the multimap unmodified.
+<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html#put(K, V)"><B>put(K, V)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>
+<DD>Adds a key-value mapping to the built multimap if it is not already
+ present.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.Builder.html#put(K, V)"><B>put(K, V)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>
+<DD>Associates <code>key</code> with <code>value</code> in the built map.
+<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#put(K, V)"><B>put(K, V)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
+<DD>Stores a key-value pair in the multimap.
+<DT><A HREF="./com/google/common/collect/Multimap.html#put(K, V)"><B>put(K, V)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
+<DD>Stores a key-value pair in the multimap.
+<DT><A HREF="./com/google/common/collect/BiMap.html#putAll(java.util.Map)"><B>putAll(Map&lt;? extends K, ? extends V&gt;)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>
+<DD>Copies all of the mappings from the specified map to this map
+ (optional operation).
+<DT><A HREF="./com/google/common/collect/ForwardingMap.html#putAll(java.util.Map)"><B>putAll(Map&lt;? extends K, ? extends V&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#putAll(K, java.lang.Iterable)"><B>putAll(K, Iterable&lt;? extends V&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#putAll(com.google.common.collect.Multimap)"><B>putAll(Multimap&lt;? extends K, ? extends V&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableBiMap.Builder.html#putAll(java.util.Map)"><B>putAll(Map&lt;? extends K, ? extends V&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>
+<DD>Associates all of the given map's keys and values in the built bimap.
+<DT><A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#putAll(java.util.Map)"><B>putAll(Map&lt;? extends Class&lt;? extends T&gt;, ? extends T&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>
+<DD>Associates all of <code>map's</code> keys and values in the built map.
+<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html#putAll(K, java.lang.Iterable)"><B>putAll(K, Iterable&lt;? extends V&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>
+<DD>Stores a collection of values with the same key in the built multimap.
+<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html#putAll(K, V...)"><B>putAll(K, V...)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>
+<DD>Stores an array of values with the same key in the built multimap.
+<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html#putAll(com.google.common.collect.Multimap)"><B>putAll(Multimap&lt;? extends K, ? extends V&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>
+<DD>Stores another multimap's entries in the built multimap.
+<DT><A HREF="./com/google/common/collect/ImmutableMap.Builder.html#putAll(java.util.Map)"><B>putAll(Map&lt;? extends K, ? extends V&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>
+<DD>Associates all of the given map's keys and values in the built map.
+<DT><A HREF="./com/google/common/collect/ImmutableMap.html#putAll(java.util.Map)"><B>putAll(Map&lt;? extends K, ? extends V&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
+<DD>Guaranteed to throw an exception and leave the map unmodified.
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html#putAll(K, java.lang.Iterable)"><B>putAll(K, Iterable&lt;? extends V&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>
+<DD>Stores a collection of values with the same key in the built multimap.
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html#putAll(K, V...)"><B>putAll(K, V...)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>
+<DD>Stores an array of values with the same key in the built multimap.
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html#putAll(com.google.common.collect.Multimap)"><B>putAll(Multimap&lt;? extends K, ? extends V&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>
+<DD>Stores another multimap's entries in the built multimap.
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#putAll(K, java.lang.Iterable)"><B>putAll(K, Iterable&lt;? extends V&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>Guaranteed to throw an exception and leave the multimap unmodified.
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#putAll(com.google.common.collect.Multimap)"><B>putAll(Multimap&lt;? extends K, ? extends V&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>Guaranteed to throw an exception and leave the multimap unmodified.
+<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html#putAll(K, java.lang.Iterable)"><B>putAll(K, Iterable&lt;? extends V&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>
+<DD>Stores a collection of values with the same key in the built multimap.
+<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html#putAll(K, V...)"><B>putAll(K, V...)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>
+<DD>Stores an array of values with the same key in the built multimap.
+<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html#putAll(com.google.common.collect.Multimap)"><B>putAll(Multimap&lt;? extends K, ? extends V&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>
+<DD>Stores another multimap's entries in the built multimap.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.Builder.html#putAll(java.util.Map)"><B>putAll(Map&lt;? extends K, ? extends V&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>
+<DD>Associates all of the given map's keys and values in the built map.
+<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#putAll(K, java.lang.Iterable)"><B>putAll(K, Iterable&lt;? extends V&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#putAll(com.google.common.collect.Multimap)"><B>putAll(Multimap&lt;? extends K, ? extends V&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)"><B>putAll(K, Iterable&lt;? extends V&gt;)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
+<DD>Stores a collection of values with the same key.
+<DT><A HREF="./com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)"><B>putAll(Multimap&lt;? extends K, ? extends V&gt;)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
+<DD>Copies all of another multimap's key-value pairs into this multimap.
+<DT><A HREF="./com/google/common/collect/ForwardingConcurrentMap.html#putIfAbsent(K, V)"><B>putIfAbsent(K, V)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect">ForwardingConcurrentMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ClassToInstanceMap.html#putInstance(java.lang.Class, T)"><B>putInstance(Class&lt;T&gt;, T)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>
+<DD>Maps the specified class to the specified value.
+<DT><A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.html#putInstance(java.lang.Class, T)"><B>putInstance(Class&lt;T&gt;, T)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>
+<DD>Guaranteed to throw an exception and leave the map unmodified.
+<DT><A HREF="./com/google/common/collect/MutableClassToInstanceMap.html#putInstance(java.lang.Class, T)"><B>putInstance(Class&lt;T&gt;, T)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A>
+<DD>&nbsp;
+</DL>
+<HR>
+<A NAME="_R_"><!-- --></A><H2>
+<B>R</B></H2>
+<DL>
+<DT><A HREF="./com/google/common/collect/ConcurrentHashMultiset.html#remove(java.lang.Object, int)"><B>remove(Object, int)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>
+<DD>Removes a number of occurrences of the specified element from this
+ multiset.
+<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#remove(java.lang.Object)"><B>remove(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingConcurrentMap.html#remove(java.lang.Object, java.lang.Object)"><B>remove(Object, Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect">ForwardingConcurrentMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingIterator.html#remove()"><B>remove()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingList.html#remove(int)"><B>remove(int)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMap.html#remove(java.lang.Object)"><B>remove(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#remove(java.lang.Object, java.lang.Object)"><B>remove(Object, Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMultiset.html#remove(java.lang.Object, int)"><B>remove(Object, int)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingQueue.html#remove()"><B>remove()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect">ForwardingQueue</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#remove(java.lang.Object)"><B>remove(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
+<DD>Guaranteed to throw an exception and leave the collection unmodified.
+<DT><A HREF="./com/google/common/collect/ImmutableList.html#remove(int)"><B>remove(int)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
+<DD>Guaranteed to throw an exception and leave the list unmodified.
+<DT><A HREF="./com/google/common/collect/ImmutableMap.html#remove(java.lang.Object)"><B>remove(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
+<DD>Guaranteed to throw an exception and leave the map unmodified.
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#remove(java.lang.Object, java.lang.Object)"><B>remove(Object, Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>Guaranteed to throw an exception and leave the multimap unmodified.
+<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#remove(java.lang.Object, int)"><B>remove(Object, int)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
+<DD>Guaranteed to throw an exception and leave the collection unmodified.
+<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#remove(java.lang.Object, java.lang.Object)"><B>remove(Object, Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)"><B>remove(Object, Object)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
+<DD>Removes a key-value pair from the multimap.
+<DT><A HREF="./com/google/common/collect/Multiset.html#remove(java.lang.Object, int)"><B>remove(Object, int)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
+<DD>Removes a number of occurrences of the specified element from this
+ multiset.
+<DT><A HREF="./com/google/common/collect/Multiset.html#remove(java.lang.Object)"><B>remove(Object)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
+<DD>Removes a <i>single</i> occurrence of the specified element from this
+ multiset, if present.
+<DT><A HREF="./com/google/common/collect/PeekingIterator.html#remove()"><B>remove()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect">PeekingIterator</A>
+<DD>Removes from the underlying collection the last element returned
+ by this iterator (optional operation).
+<DT><A HREF="./com/google/common/collect/UnmodifiableIterator.html#remove()"><B>remove()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>
+<DD>Guaranteed to throw an exception and leave the underlying data unmodified.
+<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#removeAll(java.util.Collection)"><B>removeAll(Collection&lt;?&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#removeAll(java.lang.Object)"><B>removeAll(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#removeAll(java.util.Collection)"><B>removeAll(Collection&lt;?&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
+<DD>Guaranteed to throw an exception and leave the collection unmodified.
+<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.html#removeAll(java.lang.Object)"><B>removeAll(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>
+<DD>Guaranteed to throw an exception and leave the multimap unmodified.
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#removeAll(java.lang.Object)"><B>removeAll(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>Guaranteed to throw an exception and leave the multimap unmodified.
+<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.html#removeAll(java.lang.Object)"><B>removeAll(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>
+<DD>Guaranteed to throw an exception and leave the multimap unmodified.
+<DT><A HREF="./com/google/common/collect/Iterables.html#removeAll(java.lang.Iterable, java.util.Collection)"><B>removeAll(Iterable&lt;?&gt;, Collection&lt;?&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Removes, from an iterable, every element that belongs to the provided
+ collection.
+<DT><A HREF="./com/google/common/collect/Iterators.html#removeAll(java.util.Iterator, java.util.Collection)"><B>removeAll(Iterator&lt;?&gt;, Collection&lt;?&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Traverses an iterator and removes every element that belongs to the
+ provided collection.
+<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#removeAll(java.lang.Object)"><B>removeAll(Object)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
+<DD>Removes all values associated with a given key.
+<DT><A HREF="./com/google/common/collect/ListMultimap.html#removeAll(java.lang.Object)"><B>removeAll(Object)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>
+<DD>Removes all values associated with a given key.
+<DT><A HREF="./com/google/common/collect/Multimap.html#removeAll(java.lang.Object)"><B>removeAll(Object)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
+<DD>Removes all values associated with a given key.
+<DT><A HREF="./com/google/common/collect/Multiset.html#removeAll(java.util.Collection)"><B>removeAll(Collection&lt;?&gt;)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
+<DD>Removes all of this collection's elements that are also contained in the
+ specified collection (optional operation).
+<DT><A HREF="./com/google/common/collect/SetMultimap.html#removeAll(java.lang.Object)"><B>removeAll(Object)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>
+<DD>Removes all values associated with a given key.
+<DT><A HREF="./com/google/common/collect/SortedSetMultimap.html#removeAll(java.lang.Object)"><B>removeAll(Object)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>
+<DD>Removes all values associated with a given key.
+<DT><A HREF="./com/google/common/collect/ConcurrentHashMultiset.html#removeExactly(java.lang.Object, int)"><B>removeExactly(Object, int)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>
+<DD>Removes exactly the specified number of occurrences of <code>element</code>, or
+ makes no change if this is not possible.
+<DT><A HREF="./com/google/common/collect/ForwardingConcurrentMap.html#replace(K, V)"><B>replace(K, V)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect">ForwardingConcurrentMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingConcurrentMap.html#replace(K, V, V)"><B>replace(K, V, V)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect">ForwardingConcurrentMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#replaceValues(K, java.lang.Iterable)"><B>replaceValues(K, Iterable&lt;? extends V&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.html#replaceValues(K, java.lang.Iterable)"><B>replaceValues(K, Iterable&lt;? extends V&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>
+<DD>Guaranteed to throw an exception and leave the multimap unmodified.
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#replaceValues(K, java.lang.Iterable)"><B>replaceValues(K, Iterable&lt;? extends V&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>Guaranteed to throw an exception and leave the multimap unmodified.
+<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.html#replaceValues(K, java.lang.Iterable)"><B>replaceValues(K, Iterable&lt;? extends V&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>
+<DD>Guaranteed to throw an exception and leave the multimap unmodified.
+<DT><A HREF="./com/google/common/collect/LinkedHashMultimap.html#replaceValues(K, java.lang.Iterable)"><B>replaceValues(K, Iterable&lt;? extends V&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>
+<DD>Stores a collection of values with the same key, replacing any existing
+ values for that key.
+<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#replaceValues(K, java.lang.Iterable)"><B>replaceValues(K, Iterable&lt;? extends V&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
+<DD>Stores a collection of values with the same key, replacing any existing
+ values for that key.
+<DT><A HREF="./com/google/common/collect/ListMultimap.html#replaceValues(K, java.lang.Iterable)"><B>replaceValues(K, Iterable&lt;? extends V&gt;)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>
+<DD>Stores a collection of values with the same key, replacing any existing
+ values for that key.
+<DT><A HREF="./com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)"><B>replaceValues(K, Iterable&lt;? extends V&gt;)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
+<DD>Stores a collection of values with the same key, replacing any existing
+ values for that key.
+<DT><A HREF="./com/google/common/collect/SetMultimap.html#replaceValues(K, java.lang.Iterable)"><B>replaceValues(K, Iterable&lt;? extends V&gt;)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>
+<DD>Stores a collection of values with the same key, replacing any existing
+ values for that key.
+<DT><A HREF="./com/google/common/collect/SortedSetMultimap.html#replaceValues(K, java.lang.Iterable)"><B>replaceValues(K, Iterable&lt;? extends V&gt;)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>
+<DD>Stores a collection of values with the same key, replacing any existing
+ values for that key.
+<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#retainAll(java.util.Collection)"><B>retainAll(Collection&lt;?&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#retainAll(java.util.Collection)"><B>retainAll(Collection&lt;?&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
+<DD>Guaranteed to throw an exception and leave the collection unmodified.
+<DT><A HREF="./com/google/common/collect/Iterables.html#retainAll(java.lang.Iterable, java.util.Collection)"><B>retainAll(Iterable&lt;?&gt;, Collection&lt;?&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Removes, from an iterable, every element that does not belong to the
+ provided collection.
+<DT><A HREF="./com/google/common/collect/Iterators.html#retainAll(java.util.Iterator, java.util.Collection)"><B>retainAll(Iterator&lt;?&gt;, Collection&lt;?&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Traverses an iterator and removes every element that does not belong to the
+ provided collection.
+<DT><A HREF="./com/google/common/collect/Multiset.html#retainAll(java.util.Collection)"><B>retainAll(Collection&lt;?&gt;)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
+<DD>Retains only the elements in this collection that are contained in the
+ specified collection (optional operation).
+<DT><A HREF="./com/google/common/collect/Iterables.html#reverse(java.util.List)"><B>reverse(List&lt;T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Adapts a list to an iterable with reversed iteration order.
+<DT><A HREF="./com/google/common/collect/Ordering.html#reverse()"><B>reverse()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
+<DD>Returns the reverse of this ordering; the <code>Ordering</code> equivalent to
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#reverseOrder(java.util.Comparator)" title="class or interface in java.util"><CODE>Collections.reverseOrder(Comparator)</CODE></A>.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#reverseOrder()"><B>reverseOrder()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
+<DD>Returns a builder that creates immutable sorted maps whose keys are
+ ordered by the reverse of their natural ordering.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#reverseOrder()"><B>reverseOrder()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
+<DD>Returns a builder that creates immutable sorted sets whose elements are
+ ordered by the reverse of their natural ordering.
+<DT><A HREF="./com/google/common/collect/MapDifference.ValueDifference.html#rightValue()"><B>rightValue()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect">MapDifference.ValueDifference</A>
+<DD>Returns the value from the right map (possibly null).
+</DL>
+<HR>
+<A NAME="_S_"><!-- --></A><H2>
+<B>S</B></H2>
+<DL>
+<DT><A HREF="./com/google/common/collect/ForwardingList.html#set(int, E)"><B>set(int, E)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingListIterator.html#set(E)"><B>set(E)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableList.html#set(int, E)"><B>set(int, E)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
+<DD>Guaranteed to throw an exception and leave the list unmodified.
+<DT><A HREF="./com/google/common/collect/ConcurrentHashMultiset.html#setCount(E, int)"><B>setCount(E, int)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>
+<DD>Adds or removes occurrences of <code>element</code> such that the <A HREF="./com/google/common/collect/ConcurrentHashMultiset.html#count(java.lang.Object)"><CODE>ConcurrentHashMultiset.count(java.lang.Object)</CODE></A>
+ of the element becomes <code>count</code>.
+<DT><A HREF="./com/google/common/collect/ConcurrentHashMultiset.html#setCount(E, int, int)"><B>setCount(E, int, int)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>
+<DD>Sets the number of occurrences of <code>element</code> to <code>newCount</code>, but
+ only if the count is currently <code>oldCount</code>.
+<DT><A HREF="./com/google/common/collect/ForwardingMultiset.html#setCount(E, int)"><B>setCount(E, int)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMultiset.html#setCount(E, int, int)"><B>setCount(E, int, int)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html#setCount(E, int)"><B>setCount(E, int)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>
+<DD>Adds or removes the necessary occurrences of an element such that the
+ element attains the desired count.
+<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#setCount(E, int)"><B>setCount(E, int)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
+<DD>Guaranteed to throw an exception and leave the collection unmodified.
+<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#setCount(E, int, int)"><B>setCount(E, int, int)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
+<DD>Guaranteed to throw an exception and leave the collection unmodified.
+<DT><A HREF="./com/google/common/collect/Multiset.html#setCount(E, int)"><B>setCount(E, int)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
+<DD>Adds or removes the necessary occurrences of an element such that the
+ element attains the desired count.
+<DT><A HREF="./com/google/common/collect/Multiset.html#setCount(E, int, int)"><B>setCount(E, int, int)</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
+<DD>Conditionally sets the count of an element to a new value, as described in
+ <A HREF="./com/google/common/collect/Multiset.html#setCount(E, int)"><CODE>Multiset.setCount(Object, int)</CODE></A>, provided that the element has the expected
+ current count.
+<DT><A HREF="./com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><B>SetMultimap</B></A>&lt;<A HREF="./com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>,<A HREF="./com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt; - Interface in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A <code>Multimap</code> that cannot hold duplicate key-value pairs.<DT><A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect"><B>Sets</B></A> - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Static utility methods pertaining to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> instances.<DT><A HREF="./com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect"><B>Sets.SetView</B></A>&lt;<A HREF="./com/google/common/collect/Sets.SetView.html" title="type parameter in Sets.SetView">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An unmodifiable view of a set which may be backed by other sets; this view
+ will change as the backing sets do.<DT><A HREF="./com/google/common/collect/ForwardingMapEntry.html#setValue(V)"><B>setValue(V)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect">ForwardingMapEntry</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Iterators.html#singletonIterator(T)"><B>singletonIterator(T)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Returns an iterator containing only <code>value</code>.
+<DT><A HREF="./com/google/common/collect/ConcurrentHashMultiset.html#size()"><B>size()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>
+<DD>Returns the number of elements in this collection.
+<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#size()"><B>size()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMap.html#size()"><B>size()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#size()"><B>size()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#size()"><B>size()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#size()"><B>size()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#size()"><B>size()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#size()"><B>size()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Iterables.html#size(java.lang.Iterable)"><B>size(Iterable&lt;?&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Returns the number of elements in <code>iterable</code>.
+<DT><A HREF="./com/google/common/collect/Iterators.html#size(java.util.Iterator)"><B>size(Iterator&lt;?&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Returns the number of elements remaining in <code>iterator</code>.
+<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#size()"><B>size()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Multimap.html#size()"><B>size()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
+<DD>Returns the number of key-value pairs in the multimap.
+<DT><A HREF="./com/google/common/base/Joiner.html#skipNulls()"><B>skipNulls()</B></A> -
+Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
+<DD>Returns a joiner with the same behavior as this joiner, except
+ automatically skipping over any provided null elements.
+<DT><A HREF="./com/google/common/collect/MapMaker.html#softKeys()"><B>softKeys()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A>
+<DD>Specifies that each key (not value) stored in the map should be
+ wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>SoftReference</CODE></A> (by default, strong references
+ are used).
+<DT><A HREF="./com/google/common/collect/MapMaker.html#softValues()"><B>softValues()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A>
+<DD>Specifies that each value (not key) stored in the map should be
+ wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>SoftReference</CODE></A> (by default, strong references
+ are used).
+<DT><A HREF="./com/google/common/collect/Ordering.html#sortedCopy(java.lang.Iterable)"><B>sortedCopy(Iterable&lt;E&gt;)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
+<DD>Returns a copy of the given iterable sorted by this ordering.
+<DT><A HREF="./com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect"><B>SortedSetMultimap</B></A>&lt;<A HREF="./com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>,<A HREF="./com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt; - Interface in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A <code>SetMultimap</code> whose set of values for a given key are kept sorted;
+ that is, they comprise a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A>.<DT><A HREF="./com/google/common/collect/ForwardingList.html#subList(int, int)"><B>subList(int, int)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableList.html#subList(int, int)"><B>subList(int, int)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
+<DD>Returns an immutable list of the elements between the specified <code>fromIndex</code>, inclusive, and <code>toIndex</code>, exclusive.
+<DT><A HREF="./com/google/common/collect/ForwardingSortedMap.html#subMap(K, K)"><B>subMap(K, K)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#subMap(K, K)"><B>subMap(K, K)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
+<DD>This method returns a <code>ImmutableSortedMap</code>, consisting of the entries
+ whose keys ranges from <code>fromKey</code>, inclusive, to <code>toKey</code>,
+ exclusive.
+<DT><A HREF="./com/google/common/collect/ForwardingSortedSet.html#subSet(E, E)"><B>subSet(E, E)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#subSet(E, E)"><B>subSet(E, E)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
+<DD>Returns a view of the portion of this set whose elements range
+ from <tt>fromElement</tt>, inclusive, to <tt>toElement</tt>,
+ exclusive.
+<DT><A HREF="./com/google/common/base/Supplier.html" title="interface in com.google.common.base"><B>Supplier</B></A>&lt;<A HREF="./com/google/common/base/Supplier.html" title="type parameter in Supplier">T</A>&gt; - Interface in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>A class that can supply objects of a single type.<DT><A HREF="./com/google/common/base/Suppliers.html" title="class in com.google.common.base"><B>Suppliers</B></A> - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>Useful suppliers.<DT><A HREF="./com/google/common/collect/Maps.html#synchronizedBiMap(com.google.common.collect.BiMap)"><B>synchronizedBiMap(BiMap&lt;K, V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
+<DD>Returns a synchronized (thread-safe) bimap backed by the specified bimap.
+<DT><A HREF="./com/google/common/collect/Multimaps.html#synchronizedListMultimap(com.google.common.collect.ListMultimap)"><B>synchronizedListMultimap(ListMultimap&lt;K, V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
+<DD>Returns a synchronized (thread-safe) <code>ListMultimap</code> backed by the
+ specified multimap.
+<DT><A HREF="./com/google/common/collect/Multimaps.html#synchronizedMultimap(com.google.common.collect.Multimap)"><B>synchronizedMultimap(Multimap&lt;K, V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
+<DD>Returns a synchronized (thread-safe) multimap backed by the specified
+ multimap.
+<DT><A HREF="./com/google/common/collect/Multimaps.html#synchronizedSetMultimap(com.google.common.collect.SetMultimap)"><B>synchronizedSetMultimap(SetMultimap&lt;K, V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
+<DD>Returns a synchronized (thread-safe) <code>SetMultimap</code> backed by the
+ specified multimap.
+<DT><A HREF="./com/google/common/collect/Multimaps.html#synchronizedSortedSetMultimap(com.google.common.collect.SortedSetMultimap)"><B>synchronizedSortedSetMultimap(SortedSetMultimap&lt;K, V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
+<DD>Returns a synchronized (thread-safe) <code>SortedSetMultimap</code> backed by
+ the specified multimap.
+<DT><A HREF="./com/google/common/base/Suppliers.html#synchronizedSupplier(com.google.common.base.Supplier)"><B>synchronizedSupplier(Supplier&lt;T&gt;)</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Suppliers.html" title="class in com.google.common.base">Suppliers</A>
+<DD>Returns a supplier whose <code>get()</code> method synchronizes on
+ <code>delegate</code> before calling it, making it thread-safe.
+</DL>
+<HR>
+<A NAME="_T_"><!-- --></A><H2>
+<B>T</B></H2>
+<DL>
+<DT><A HREF="./com/google/common/collect/ForwardingSortedMap.html#tailMap(K)"><B>tailMap(K)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#tailMap(K)"><B>tailMap(K)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
+<DD>This method returns a <code>ImmutableSortedMap</code>, consisting of the entries
+ whose keys are greater than or equals to <code>fromKey</code>.
+<DT><A HREF="./com/google/common/collect/ForwardingSortedSet.html#tailSet(E)"><B>tailSet(E)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#tailSet(E)"><B>tailSet(E)</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
+<DD>Returns a view of the portion of this set whose elements are
+ greater than or equal to <tt>fromElement</tt>.
+<DT><A HREF="./com/google/common/collect/ConcurrentHashMultiset.html#toArray()"><B>toArray()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ConcurrentHashMultiset.html#toArray(T[])"><B>toArray(T[])</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#toArray()"><B>toArray()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#toArray(T[])"><B>toArray(T[])</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#toArray()"><B>toArray()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#toArray(T[])"><B>toArray(T[])</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Iterables.html#toArray(java.lang.Iterable, java.lang.Class)"><B>toArray(Iterable&lt;? extends T&gt;, Class&lt;T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Copies an iterable's elements into an array.
+<DT><A HREF="./com/google/common/collect/Iterators.html#toArray(java.util.Iterator, java.lang.Class)"><B>toArray(Iterator&lt;? extends T&gt;, Class&lt;T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Copies an iterator's elements into an array.
+<DT><A HREF="./com/google/common/collect/ForwardingObject.html#toString()"><B>toString()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A>
+<DD>Returns the string representation generated by the delegate's
+ <code>toString</code> method.
+<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#toString()"><B>toString()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#toString()"><B>toString()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMap.html#toString()"><B>toString()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#toString()"><B>toString()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#toString()"><B>toString()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Iterables.html#toString(java.lang.Iterable)"><B>toString(Iterable&lt;?&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Returns a string representation of <code>iterable</code>, with the format
+ <code>[e1, e2, ..., en]</code>.
+<DT><A HREF="./com/google/common/collect/Iterators.html#toString(java.util.Iterator)"><B>toString(Iterator&lt;?&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Returns a string representation of <code>iterator</code>, with the format
+ <code>[e1, e2, ..., en]</code>.
+<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#toString()"><B>toString()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
+<DD>Returns a string representation of the multimap, generated by calling
+ <code>toString</code> on the map returned by <A HREF="./com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.
+<DT><A HREF="./com/google/common/collect/Multiset.Entry.html#toString()"><B>toString()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>
+<DD>Returns the canonical string representation of this entry, defined as
+ follows.
+<DT><A HREF="./com/google/common/collect/Multiset.html#toString()"><B>toString()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
+<DD>Returns a string representation of the object.
+<DT><A HREF="./com/google/common/base/Functions.html#toStringFunction()"><B>toStringFunction()</B></A> -
+Static method in class com.google.common.base.<A HREF="./com/google/common/base/Functions.html" title="class in com.google.common.base">Functions</A>
+<DD>Returns a function that calls <code>toString()</code> on its argument.
+<DT><A HREF="./com/google/common/collect/Collections2.html#transform(java.util.Collection, com.google.common.base.Function)"><B>transform(Collection&lt;F&gt;, Function&lt;? super F, T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Collections2.html" title="class in com.google.common.collect">Collections2</A>
+<DD>Returns a collection that applies <code>function</code> to each element of
+ <code>fromCollection</code>.
+<DT><A HREF="./com/google/common/collect/Iterables.html#transform(java.lang.Iterable, com.google.common.base.Function)"><B>transform(Iterable&lt;F&gt;, Function&lt;? super F, ? extends T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Returns an iterable that applies <code>function</code> to each element of <code>fromIterable</code>.
+<DT><A HREF="./com/google/common/collect/Iterators.html#transform(java.util.Iterator, com.google.common.base.Function)"><B>transform(Iterator&lt;F&gt;, Function&lt;? super F, ? extends T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Returns an iterator that applies <code>function</code> to each element of <code>fromIterator</code>.
+<DT><A HREF="./com/google/common/collect/Lists.html#transform(java.util.List, com.google.common.base.Function)"><B>transform(List&lt;F&gt;, Function&lt;? super F, ? extends T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A>
+<DD>Returns a list that applies <code>function</code> to each element of <code>fromList</code>.
+<DT><A HREF="./com/google/common/collect/Maps.html#transformValues(java.util.Map, com.google.common.base.Function)"><B>transformValues(Map&lt;K, V1&gt;, Function&lt;? super V1, V2&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
+<DD>Returns a view of a map where each value is transformed by a function.
+<DT><A HREF="./com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect"><B>TreeMultimap</B></A>&lt;<A HREF="./com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">K</A>,<A HREF="./com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Implementation of <code>Multimap</code> whose keys and values are ordered by
+ their natural ordering or by supplied comparators.<DT><A HREF="./com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect"><B>TreeMultiset</B></A>&lt;<A HREF="./com/google/common/collect/TreeMultiset.html" title="type parameter in TreeMultiset">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A multiset which maintains the ordering of its elements, according to either
+ their natural order or an explicit <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util"><CODE>Comparator</CODE></A>.<DT><A HREF="./com/google/common/collect/ArrayListMultimap.html#trimToSize()"><B>trimToSize()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>
+<DD>Reduces the memory used by this <code>ArrayListMultimap</code>, if feasible.
+</DL>
+<HR>
+<A NAME="_U_"><!-- --></A><H2>
+<B>U</B></H2>
+<DL>
+<DT><A HREF="./com/google/common/collect/Sets.html#union(java.util.Set, java.util.Set)"><B>union(Set&lt;? extends E&gt;, Set&lt;? extends E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
+<DD>Returns an unmodifiable <b>view</b> of the union of two sets.
+<DT><A HREF="./com/google/common/collect/Maps.html#uniqueIndex(java.lang.Iterable, com.google.common.base.Function)"><B>uniqueIndex(Iterable&lt;V&gt;, Function&lt;? super V, K&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
+<DD>Returns an immutable map for which the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util"><CODE>Map.values()</CODE></A> are the given
+ elements in the given order, and each key is the product of invoking a
+ supplied function on its corresponding value.
+<DT><A HREF="./com/google/common/collect/Maps.html#unmodifiableBiMap(com.google.common.collect.BiMap)"><B>unmodifiableBiMap(BiMap&lt;? extends K, ? extends V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
+<DD>Returns an unmodifiable view of the specified bimap.
+<DT><A HREF="./com/google/common/collect/Iterables.html#unmodifiableIterable(java.lang.Iterable)"><B>unmodifiableIterable(Iterable&lt;T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
+<DD>Returns an unmodifiable view of <code>iterable</code>.
+<DT><A HREF="./com/google/common/collect/Iterators.html#unmodifiableIterator(java.util.Iterator)"><B>unmodifiableIterator(Iterator&lt;T&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
+<DD>Returns an unmodifiable view of <code>iterator</code>.
+<DT><A HREF="./com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect"><B>UnmodifiableIterator</B></A>&lt;<A HREF="./com/google/common/collect/UnmodifiableIterator.html" title="type parameter in UnmodifiableIterator">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An iterator that does not support <A HREF="./com/google/common/collect/UnmodifiableIterator.html#remove()"><CODE>UnmodifiableIterator.remove()</CODE></A>.<DT><A HREF="./com/google/common/collect/UnmodifiableIterator.html#UnmodifiableIterator()"><B>UnmodifiableIterator()</B></A> -
+Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/Multimaps.html#unmodifiableListMultimap(com.google.common.collect.ListMultimap)"><B>unmodifiableListMultimap(ListMultimap&lt;K, V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
+<DD>Returns an unmodifiable view of the specified <code>ListMultimap</code>.
+<DT><A HREF="./com/google/common/collect/Multimaps.html#unmodifiableMultimap(com.google.common.collect.Multimap)"><B>unmodifiableMultimap(Multimap&lt;K, V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
+<DD>Returns an unmodifiable view of the specified multimap.
+<DT><A HREF="./com/google/common/collect/Multisets.html#unmodifiableMultiset(com.google.common.collect.Multiset)"><B>unmodifiableMultiset(Multiset&lt;? extends E&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multisets.html" title="class in com.google.common.collect">Multisets</A>
+<DD>Returns an unmodifiable view of the specified multiset.
+<DT><A HREF="./com/google/common/collect/Multimaps.html#unmodifiableSetMultimap(com.google.common.collect.SetMultimap)"><B>unmodifiableSetMultimap(SetMultimap&lt;K, V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
+<DD>Returns an unmodifiable view of the specified <code>SetMultimap</code>.
+<DT><A HREF="./com/google/common/collect/Multimaps.html#unmodifiableSortedSetMultimap(com.google.common.collect.SortedSetMultimap)"><B>unmodifiableSortedSetMultimap(SortedSetMultimap&lt;K, V&gt;)</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
+<DD>Returns an unmodifiable view of the specified <code>SortedSetMultimap</code>.
+<DT><A HREF="./com/google/common/base/Joiner.MapJoiner.html#useForNull(java.lang.String)"><B>useForNull(String)</B></A> -
+Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A>
+<DD>Returns a map joiner with the same behavior as this one, except
+ automatically substituting <code>nullText</code> for any provided null keys or
+ values.
+<DT><A HREF="./com/google/common/base/Joiner.html#useForNull(java.lang.String)"><B>useForNull(String)</B></A> -
+Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
+<DD>Returns a joiner with the same behavior as this one, except automatically
+ substituting <code>nullText</code> for any provided null elements.
+<DT><A HREF="./com/google/common/collect/Ordering.html#usingToString()"><B>usingToString()</B></A> -
+Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
+<DD>Returns an ordering that compares objects by the natural ordering of their
+ string representations as returned by <code>toString()</code>.
+</DL>
+<HR>
+<A NAME="_V_"><!-- --></A><H2>
+<B>V</B></H2>
+<DL>
+<DT><A HREF="./com/google/common/collect/SortedSetMultimap.html#valueComparator()"><B>valueComparator()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>
+<DD>Returns the comparator that orders the multimap values, with a <code>null</code>
+ indicating that natural ordering is used.
+<DT><A HREF="./com/google/common/collect/TreeMultimap.html#valueComparator()"><B>valueComparator()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/BiMap.html#values()"><B>values()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>
+<DD>Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> view of the values contained in this map.
+<DT><A HREF="./com/google/common/collect/ForwardingMap.html#values()"><B>values()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#values()"><B>values()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#values()"><B>values()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
+<DD>Returns an immutable set of the values in this map.
+<DT><A HREF="./com/google/common/collect/ImmutableMap.html#values()"><B>values()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
+<DD>Returns an immutable collection of the values in this map.
+<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#values()"><B>values()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
+<DD>Returns an immutable collection of the values in this multimap.
+<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#values()"><B>values()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
+<DD>Returns an immutable collection of the values in this map, sorted by the
+ ordering of the corresponding keys.
+<DT><A HREF="./com/google/common/collect/LinkedHashMultimap.html#values()"><B>values()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>
+<DD>Returns a collection of all values in the multimap.
+<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#values()"><B>values()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
+<DD>Returns a collection of all values in the multimap.
+<DT><A HREF="./com/google/common/collect/Multimap.html#values()"><B>values()</B></A> -
+Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
+<DD>Returns a collection of all values in the multimap.
+<DT><A HREF="./com/google/common/collect/EnumBiMap.html#valueType()"><B>valueType()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A>
+<DD>Returns the associated value type.
+<DT><A HREF="./com/google/common/annotations/VisibleForTesting.html" title="annotation in com.google.common.annotations"><B>VisibleForTesting</B></A> - Annotation Type in <A HREF="./com/google/common/annotations/package-summary.html">com.google.common.annotations</A><DD>An annotation that indicates that the visibility of a type or member has
+ been relaxed to make the code testable.</DL>
+<HR>
+<A NAME="_W_"><!-- --></A><H2>
+<B>W</B></H2>
+<DL>
+<DT><A HREF="./com/google/common/collect/MapMaker.html#weakKeys()"><B>weakKeys()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A>
+<DD>Specifies that each key (not value) stored in the map should be
+ wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>WeakReference</CODE></A> (by default, strong references
+ are used).
+<DT><A HREF="./com/google/common/collect/MapMaker.html#weakValues()"><B>weakValues()</B></A> -
+Method in class com.google.common.collect.<A HREF="./com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A>
+<DD>Specifies that each value (not key) stored in the map should be
+ wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>WeakReference</CODE></A> (by default, strong references
+ are used).
+<DT><A HREF="./com/google/common/base/Joiner.html#withKeyValueSeparator(java.lang.String)"><B>withKeyValueSeparator(String)</B></A> -
+Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
+<DD>Returns a <code>MapJoiner</code> using the given key-value separator, and the
+ same configuration as this <code>Joiner</code> otherwise.
+</DL>
+<HR>
+<A HREF="#_A_">A</A> <A HREF="#_B_">B</A> <A HREF="#_C_">C</A> <A HREF="#_D_">D</A> <A HREF="#_E_">E</A> <A HREF="#_F_">F</A> <A HREF="#_G_">G</A> <A HREF="#_H_">H</A> <A HREF="#_I_">I</A> <A HREF="#_J_">J</A> <A HREF="#_K_">K</A> <A HREF="#_L_">L</A> <A HREF="#_M_">M</A> <A HREF="#_N_">N</A> <A HREF="#_O_">O</A> <A HREF="#_P_">P</A> <A HREF="#_R_">R</A> <A HREF="#_S_">S</A> <A HREF="#_T_">T</A> <A HREF="#_U_">U</A> <A HREF="#_V_">V</A> <A HREF="#_W_">W</A>
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="./index.html?index-all.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="index-all.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="./allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="./allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/index.html b/javadoc/index.html
new file mode 100644
index 0000000..2434eb2
--- /dev/null
+++ b/javadoc/index.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 09 09:28:18 PST 2009-->
+<TITLE>
+Google Collections Library 1.0-rc5
+</TITLE>
+<SCRIPT type="text/javascript">
+ targetPage = "" + window.location.search;
+ if (targetPage != "" && targetPage != "undefined")
+ targetPage = targetPage.substring(1);
+ if (targetPage.indexOf(":") != -1)
+ targetPage = "undefined";
+ function loadFrames() {
+ if (targetPage != "" && targetPage != "undefined")
+ top.classFrame.location = top.targetPage;
+ }
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+</HEAD>
+<FRAMESET cols="20%,80%" title="" onLoad="top.loadFrames()">
+<FRAMESET rows="30%,70%" title="" onLoad="top.loadFrames()">
+<FRAME src="overview-frame.html" name="packageListFrame" title="All Packages">
+<FRAME src="allclasses-frame.html" name="packageFrame" title="All classes and interfaces (except non-static nested types)">
+</FRAMESET>
+<FRAME src="overview-summary.html" name="classFrame" title="Package, class and interface descriptions" scrolling="yes">
+<NOFRAMES>
+<H2>
+Frame Alert</H2>
+
+<P>
+This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+<BR>
+Link to<A HREF="overview-summary.html">Non-frame version.</A>
+</NOFRAMES>
+</FRAMESET>
+</HTML>
diff --git a/javadoc/overview-frame.html b/javadoc/overview-frame.html
new file mode 100644
index 0000000..3b10ae4
--- /dev/null
+++ b/javadoc/overview-frame.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Overview List (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+
+</HEAD>
+
+<BODY BGCOLOR="white">
+
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
+<TR>
+<TH ALIGN="left" NOWRAP><FONT size="+1" CLASS="FrameTitleFont">
+<B></B></FONT></TH>
+</TR>
+</TABLE>
+
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
+<TR>
+<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="allclasses-frame.html" target="packageFrame">All Classes</A></FONT>
+<P>
+<FONT size="+1" CLASS="FrameHeadingFont">
+Packages</FONT>
+<BR>
+<FONT CLASS="FrameItemFont"><A HREF="com/google/common/annotations/package-frame.html" target="packageFrame">com.google.common.annotations</A></FONT>
+<BR>
+<FONT CLASS="FrameItemFont"><A HREF="com/google/common/base/package-frame.html" target="packageFrame">com.google.common.base</A></FONT>
+<BR>
+<FONT CLASS="FrameItemFont"><A HREF="com/google/common/collect/package-frame.html" target="packageFrame">com.google.common.collect</A></FONT>
+<BR>
+</TD>
+</TR>
+</TABLE>
+
+<P>
+&nbsp;
+</BODY>
+</HTML>
diff --git a/javadoc/overview-summary.html b/javadoc/overview-summary.html
new file mode 100644
index 0000000..2313728
--- /dev/null
+++ b/javadoc/overview-summary.html
@@ -0,0 +1,160 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:18 PST 2009 -->
+<TITLE>
+Overview (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Overview (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Overview</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html?overview-summary.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="overview-summary.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Packages</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="20%"><B><A HREF="com/google/common/annotations/package-summary.html">com.google.common.annotations</A></B></TD>
+<TD>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="20%"><B><A HREF="com/google/common/base/package-summary.html">com.google.common.base</A></B></TD>
+<TD>Miscellaneous common util classes and annotations.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="20%"><B><A HREF="com/google/common/collect/package-summary.html">com.google.common.collect</A></B></TD>
+<TD>This package contains generic collection interfaces and implementations, and
+ other utilities for working with collections.</TD>
+</TR>
+</TABLE>
+
+<P>
+&nbsp;<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Overview</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html?overview-summary.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="overview-summary.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/overview-tree.html b/javadoc/overview-tree.html
new file mode 100644
index 0000000..d0bbf61
--- /dev/null
+++ b/javadoc/overview-tree.html
@@ -0,0 +1,259 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Class Hierarchy (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Class Hierarchy (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html?overview-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="overview-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+Hierarchy For All Packages</H2>
+</CENTER>
+<DL>
+<DT><B>Package Hierarchies:</B><DD><A HREF="com/google/common/annotations/package-tree.html">com.google.common.annotations</A>, <A HREF="com/google/common/base/package-tree.html">com.google.common.base</A>, <A HREF="com/google/common/collect/package-tree.html">com.google.common.collect</A></DL>
+<HR>
+<H2>
+Class Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><B>Object</B></A><UL>
+<LI TYPE="circle">java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util"><B>AbstractCollection</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;)
+<UL>
+<LI TYPE="circle">java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractSet.html?is-external=true" title="class or interface in java.util"><B>AbstractSet</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;)
+<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect"><B>Sets.SetView</B></A>&lt;E&gt;</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect"><B>ConcurrentHashMultiset</B></A>&lt;E&gt; (implements java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect"><B>EnumMultiset</B></A>&lt;E&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect"><B>HashMultiset</B></A>&lt;E&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect"><B>LinkedHashMultiset</B></A>&lt;E&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect"><B>TreeMultiset</B></A>&lt;E&gt;</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect"><B>ArrayListMultimap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Collections2.html" title="class in com.google.common.collect"><B>Collections2</B></A><LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base"><B>FinalizableReferenceQueue</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><B>ForwardingObject</B></A><UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect"><B>ForwardingCollection</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;)
+<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect"><B>ForwardingList</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt;)
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect"><B>ForwardingMultiset</B></A>&lt;E&gt; (implements com.google.common.collect.<A HREF="com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;)
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect"><B>ForwardingQueue</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</A>&lt;E&gt;)
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect"><B>ForwardingSet</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;)
+<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect"><B>ForwardingSortedSet</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;E&gt;)
+</UL>
+</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect"><B>ForwardingIterator</B></A>&lt;T&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;)
+<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect"><B>ForwardingListIterator</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;E&gt;)
+</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect"><B>ForwardingMap</B></A>&lt;K,V&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;)
+<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect"><B>EnumBiMap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect"><B>EnumHashBiMap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect"><B>ForwardingConcurrentMap</B></A>&lt;K,V&gt; (implements java.util.concurrent.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;K,V&gt;)
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect"><B>ForwardingSortedMap</B></A>&lt;K,V&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;K,V&gt;)
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect"><B>HashBiMap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>ImmutableClassToInstanceMap</B></A>&lt;B&gt; (implements com.google.common.collect.<A HREF="com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>&lt;B&gt;)
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>MutableClassToInstanceMap</B></A>&lt;B&gt; (implements com.google.common.collect.<A HREF="com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>&lt;B&gt;)
+</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect"><B>ForwardingMapEntry</B></A>&lt;K,V&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;)
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect"><B>ForwardingMultimap</B></A>&lt;K,V&gt; (implements com.google.common.collect.<A HREF="com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;)
+</UL>
+<LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Functions.html" title="class in com.google.common.base"><B>Functions</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect"><B>HashMultimap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect"><B>ImmutableClassToInstanceMap.Builder</B></A>&lt;B&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect"><B>ImmutableCollection</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;, java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
+<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect"><B>ImmutableList</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt;, java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util">RandomAccess</A>)
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect"><B>ImmutableMultiset</B></A>&lt;E&gt; (implements com.google.common.collect.<A HREF="com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;)
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect"><B>ImmutableSet</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;)
+<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect"><B>ImmutableSortedSet</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;E&gt;)
+</UL>
+</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect"><B>ImmutableList.Builder</B></A>&lt;E&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><B>ImmutableMap</B></A>&lt;K,V&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;, java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
+<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect"><B>ImmutableBiMap</B></A>&lt;K,V&gt; (implements com.google.common.collect.<A HREF="com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;)
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect"><B>ImmutableSortedMap</B></A>&lt;K,V&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;K,V&gt;)
+</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect"><B>ImmutableMap.Builder</B></A>&lt;K,V&gt;<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect"><B>ImmutableBiMap.Builder</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect"><B>ImmutableSortedMap.Builder</B></A>&lt;K,V&gt;</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect"><B>ImmutableMultimap</B></A>&lt;K,V&gt; (implements com.google.common.collect.<A HREF="com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;, java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
+<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect"><B>ImmutableListMultimap</B></A>&lt;K,V&gt; (implements com.google.common.collect.<A HREF="com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;)
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect"><B>ImmutableSetMultimap</B></A>&lt;K,V&gt; (implements com.google.common.collect.<A HREF="com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;)
+</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect"><B>ImmutableMultimap.Builder</B></A>&lt;K,V&gt;<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect"><B>ImmutableListMultimap.Builder</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect"><B>ImmutableSetMultimap.Builder</B></A>&lt;K,V&gt;</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect"><B>ImmutableMultiset.Builder</B></A>&lt;E&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect"><B>ImmutableSet.Builder</B></A>&lt;E&gt;<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect"><B>ImmutableSortedSet.Builder</B></A>&lt;E&gt;</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Iterables.html" title="class in com.google.common.collect"><B>Iterables</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Iterators.html" title="class in com.google.common.collect"><B>Iterators</B></A><LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Joiner.html" title="class in com.google.common.base"><B>Joiner</B></A><LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base"><B>Joiner.MapJoiner</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect"><B>LinkedHashMultimap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect"><B>LinkedListMultimap</B></A>&lt;K,V&gt; (implements com.google.common.collect.<A HREF="com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;, java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Lists.html" title="class in com.google.common.collect"><B>Lists</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/MapMaker.html" title="class in com.google.common.collect"><B>MapMaker</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Maps.html" title="class in com.google.common.collect"><B>Maps</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Multimaps.html" title="class in com.google.common.collect"><B>Multimaps</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Multisets.html" title="class in com.google.common.collect"><B>Multisets</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect"><B>ObjectArrays</B></A><LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Objects.html" title="class in com.google.common.base"><B>Objects</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Ordering.html" title="class in com.google.common.collect"><B>Ordering</B></A>&lt;T&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;T&gt;)
+<LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Preconditions.html" title="class in com.google.common.base"><B>Preconditions</B></A><LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Predicates.html" title="class in com.google.common.base"><B>Predicates</B></A><LI TYPE="circle">java.lang.ref.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true" title="class or interface in java.lang.ref"><B>Reference</B></A>&lt;T&gt;<UL>
+<LI TYPE="circle">java.lang.ref.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/PhantomReference.html?is-external=true" title="class or interface in java.lang.ref"><B>PhantomReference</B></A>&lt;T&gt;<UL>
+<LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base"><B>FinalizablePhantomReference</B></A>&lt;T&gt; (implements com.google.common.base.<A HREF="com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A>)
+</UL>
+<LI TYPE="circle">java.lang.ref.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><B>SoftReference</B></A>&lt;T&gt;<UL>
+<LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base"><B>FinalizableSoftReference</B></A>&lt;T&gt; (implements com.google.common.base.<A HREF="com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A>)
+</UL>
+<LI TYPE="circle">java.lang.ref.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><B>WeakReference</B></A>&lt;T&gt;<UL>
+<LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base"><B>FinalizableWeakReference</B></A>&lt;T&gt; (implements com.google.common.base.<A HREF="com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A>)
+</UL>
+</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Sets.html" title="class in com.google.common.collect"><B>Sets</B></A><LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Suppliers.html" title="class in com.google.common.base"><B>Suppliers</B></A><LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang"><B>Throwable</B></A> (implements java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
+<UL>
+<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang"><B>Exception</B></A><UL>
+<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang"><B>RuntimeException</B></A><UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ComputationException.html" title="class in com.google.common.collect"><B>ComputationException</B></A><UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect"><B>AsynchronousComputationException</B></A></UL>
+</UL>
+</UL>
+</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect"><B>TreeMultimap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect"><B>UnmodifiableIterator</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;)
+<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect"><B>AbstractIterator</B></A>&lt;T&gt;</UL>
+</UL>
+</UL>
+<H2>
+Interface Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base"><B>FinalizableReference</B></A><LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Function.html" title="interface in com.google.common.base"><B>Function</B></A>&lt;F,T&gt;<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang"><B>Iterable</B></A>&lt;T&gt;<UL>
+<LI TYPE="circle">java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><B>Collection</B></A>&lt;E&gt;<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><B>Multiset</B></A>&lt;E&gt;</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><B>Multiset</B></A>&lt;E&gt;</UL>
+<LI TYPE="circle">java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util"><B>Iterator</B></A>&lt;E&gt;<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect"><B>PeekingIterator</B></A>&lt;E&gt;</UL>
+<LI TYPE="circle">java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><B>Map</B></A>&lt;K,V&gt;<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><B>BiMap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect"><B>ClassToInstanceMap</B></A>&lt;B&gt;</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect"><B>MapDifference</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect"><B>MapDifference.ValueDifference</B></A>&lt;V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><B>Multimap</B></A>&lt;K,V&gt;<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><B>ListMultimap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><B>SetMultimap</B></A>&lt;K,V&gt;<UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect"><B>SortedSetMultimap</B></A>&lt;K,V&gt;</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect"><B>SortedSetMultimap</B></A>&lt;K,V&gt;</UL>
+<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect"><B>Multiset.Entry</B></A>&lt;E&gt;<LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Predicate.html" title="interface in com.google.common.base"><B>Predicate</B></A>&lt;T&gt;<LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Supplier.html" title="interface in com.google.common.base"><B>Supplier</B></A>&lt;T&gt;</UL>
+<H2>
+Annotation Type Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">com.google.common.annotations.<A HREF="com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations"><B>GwtIncompatible</B></A> (implements java.lang.annotation.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</A>)
+<LI TYPE="circle">com.google.common.annotations.<A HREF="com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><B>GwtCompatible</B></A> (implements java.lang.annotation.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</A>)
+<LI TYPE="circle">com.google.common.annotations.<A HREF="com/google/common/annotations/VisibleForTesting.html" title="annotation in com.google.common.annotations"><B>VisibleForTesting</B></A> (implements java.lang.annotation.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</A>)
+</UL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html?overview-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="overview-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/package-list b/javadoc/package-list
new file mode 100644
index 0000000..1dfc55e
--- /dev/null
+++ b/javadoc/package-list
@@ -0,0 +1,3 @@
+com.google.common.annotations
+com.google.common.base
+com.google.common.collect
diff --git a/javadoc/resources/inherit.gif b/javadoc/resources/inherit.gif
new file mode 100644
index 0000000..c814867
--- /dev/null
+++ b/javadoc/resources/inherit.gif
Binary files differ
diff --git a/javadoc/serialized-form.html b/javadoc/serialized-form.html
new file mode 100644
index 0000000..4bb0f37
--- /dev/null
+++ b/javadoc/serialized-form.html
@@ -0,0 +1,1290 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.6.0-google-internal) on Wed Dec 09 09:28:17 PST 2009 -->
+<TITLE>
+Serialized Form (Google Collections Library 1.0-rc5)
+</TITLE>
+
+<META NAME="date" CONTENT="2009-12-09">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Serialized Form (Google Collections Library 1.0-rc5)";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html?serialized-form.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="serialized-form.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H1>
+Serialized Form</H1>
+</CENTER>
+<HR SIZE="4" NOSHADE>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="center"><FONT SIZE="+2">
+<B>Package</B> <B>com.google.common.collect</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="com.google.common.collect.ArrayListMultimap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">com.google.common.collect.ArrayListMultimap</A> extends com.google.common.collect.AbstractListMultimap&lt;<A HREF="com/google/common/collect/ArrayListMultimap.html" title="type parameter in ArrayListMultimap">K</A>,<A HREF="com/google/common/collect/ArrayListMultimap.html" title="type parameter in ArrayListMultimap">V</A>&gt; implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<B>serialVersionUID:&nbsp;</B>0L
+
+<P>
+<A NAME="serialized_methods"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Serialization Methods</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
+readObject</H3>
+<PRE>
+private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
+</DL>
+</DL>
+<HR>
+<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
+writeObject</H3>
+<PRE>
+private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD><DL>
+<DT><B>Serial Data:</B></DT>
+ <DD>expectedValuesPerKey, number of distinct keys, and then for
+ each distinct key: the key, number of values for that key, and the
+ key's values</DD>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
+</DL>
+</DL>
+
+<P>
+<A NAME="com.google.common.collect.AsynchronousComputationException"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect">com.google.common.collect.AsynchronousComputationException</A> extends <A HREF="com/google/common/collect/ComputationException.html" title="class in com.google.common.collect">ComputationException</A> implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<B>serialVersionUID:&nbsp;</B>0L
+
+<P>
+
+<P>
+<A NAME="com.google.common.collect.ComputationException"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/common/collect/ComputationException.html" title="class in com.google.common.collect">com.google.common.collect.ComputationException</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang">RuntimeException</A> implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<B>serialVersionUID:&nbsp;</B>0L
+
+<P>
+
+<P>
+<A NAME="com.google.common.collect.ConcurrentHashMultiset"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">com.google.common.collect.ConcurrentHashMultiset</A> extends com.google.common.collect.AbstractMultiset&lt;<A HREF="com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt; implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<B>serialVersionUID:&nbsp;</B>0L
+
+<P>
+<A NAME="serialized_methods"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Serialization Methods</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
+readObject</H3>
+<PRE>
+private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
+</DL>
+</DL>
+<HR>
+<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
+writeObject</H3>
+<PRE>
+private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD><DL>
+<DT><B>Serial Data:</B></DT>
+ <DD>the number of distinct elements, the first element, its count,
+ the second element, its count, and so on</DD>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
+</DL>
+</DL>
+
+<P>
+<A NAME="com.google.common.collect.EnumBiMap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">com.google.common.collect.EnumBiMap</A> extends com.google.common.collect.AbstractBiMap&lt;<A HREF="com/google/common/collect/EnumBiMap.html" title="type parameter in EnumBiMap">K</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;<A HREF="com/google/common/collect/EnumBiMap.html" title="type parameter in EnumBiMap">K</A>&gt;,<A HREF="com/google/common/collect/EnumBiMap.html" title="type parameter in EnumBiMap">V</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;<A HREF="com/google/common/collect/EnumBiMap.html" title="type parameter in EnumBiMap">V</A>&gt;&gt; implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<B>serialVersionUID:&nbsp;</B>0L
+
+<P>
+<A NAME="serialized_methods"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Serialization Methods</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
+readObject</H3>
+<PRE>
+private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
+</DL>
+</DL>
+<HR>
+<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
+writeObject</H3>
+<PRE>
+private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD><DL>
+<DT><B>Serial Data:</B></DT>
+ <DD>the key class, value class, number of entries, first key, first
+ value, second key, second value, and so on.</DD>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
+</DL>
+</DL>
+
+<P>
+<A NAME="com.google.common.collect.EnumHashBiMap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">com.google.common.collect.EnumHashBiMap</A> extends com.google.common.collect.AbstractBiMap&lt;<A HREF="com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;<A HREF="com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A>&gt;,<A HREF="com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">V</A>&gt; implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<B>serialVersionUID:&nbsp;</B>0L
+
+<P>
+<A NAME="serialized_methods"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Serialization Methods</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
+readObject</H3>
+<PRE>
+private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
+</DL>
+</DL>
+<HR>
+<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
+writeObject</H3>
+<PRE>
+private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD><DL>
+<DT><B>Serial Data:</B></DT>
+ <DD>the key class, number of entries, first key, first value,
+ second key, second value, and so on.</DD>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
+</DL>
+</DL>
+
+<P>
+<A NAME="com.google.common.collect.EnumMultiset"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">com.google.common.collect.EnumMultiset</A> extends com.google.common.collect.AbstractMapBasedMultiset&lt;<A HREF="com/google/common/collect/EnumMultiset.html" title="type parameter in EnumMultiset">E</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;<A HREF="com/google/common/collect/EnumMultiset.html" title="type parameter in EnumMultiset">E</A>&gt;&gt; implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<B>serialVersionUID:&nbsp;</B>0L
+
+<P>
+<A NAME="serialized_methods"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Serialization Methods</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
+readObject</H3>
+<PRE>
+private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
+<DL>
+<DD><DL>
+<DT><B>Serial Data:</B></DT>
+ <DD>the <code>Class&lt;E&gt;</code> for the enum type, the number of distinct
+ elements, the first element, its count, the second element, its count,
+ and so on</DD>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
+</DL>
+</DL>
+<HR>
+<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
+writeObject</H3>
+<PRE>
+private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
+</DL>
+</DL>
+
+<P>
+<A NAME="com.google.common.collect.HashBiMap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">com.google.common.collect.HashBiMap</A> extends com.google.common.collect.AbstractBiMap&lt;<A HREF="com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">K</A>,<A HREF="com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">V</A>&gt; implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<B>serialVersionUID:&nbsp;</B>0L
+
+<P>
+<A NAME="serialized_methods"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Serialization Methods</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
+readObject</H3>
+<PRE>
+private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
+</DL>
+</DL>
+<HR>
+<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
+writeObject</H3>
+<PRE>
+private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD><DL>
+<DT><B>Serial Data:</B></DT>
+ <DD>the number of entries, first key, first value, second key,
+ second value, and so on.</DD>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
+</DL>
+</DL>
+
+<P>
+<A NAME="com.google.common.collect.HashMultimap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">com.google.common.collect.HashMultimap</A> extends com.google.common.collect.AbstractSetMultimap&lt;<A HREF="com/google/common/collect/HashMultimap.html" title="type parameter in HashMultimap">K</A>,<A HREF="com/google/common/collect/HashMultimap.html" title="type parameter in HashMultimap">V</A>&gt; implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<B>serialVersionUID:&nbsp;</B>0L
+
+<P>
+<A NAME="serialized_methods"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Serialization Methods</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
+readObject</H3>
+<PRE>
+private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
+</DL>
+</DL>
+<HR>
+<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
+writeObject</H3>
+<PRE>
+private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD><DL>
+<DT><B>Serial Data:</B></DT>
+ <DD>expectedValuesPerKey, number of distinct keys, and then for
+ each distinct key: the key, number of values for that key, and the
+ key's values</DD>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
+</DL>
+</DL>
+
+<P>
+<A NAME="com.google.common.collect.HashMultiset"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">com.google.common.collect.HashMultiset</A> extends com.google.common.collect.AbstractMapBasedMultiset&lt;<A HREF="com/google/common/collect/HashMultiset.html" title="type parameter in HashMultiset">E</A>&gt; implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<B>serialVersionUID:&nbsp;</B>0L
+
+<P>
+<A NAME="serialized_methods"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Serialization Methods</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
+readObject</H3>
+<PRE>
+private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
+</DL>
+</DL>
+<HR>
+<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
+writeObject</H3>
+<PRE>
+private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD><DL>
+<DT><B>Serial Data:</B></DT>
+ <DD>the number of distinct elements, the first element, its count,
+ the second element, its count, and so on</DD>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
+</DL>
+</DL>
+
+<P>
+<A NAME="com.google.common.collect.ImmutableBiMap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableBiMap</A> extends <A HREF="com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt; implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="serialized_methods"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Serialization Methods</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="writeReplace()"><!-- --></A><H3>
+writeReplace</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A> <B>writeReplace</B>()</PRE>
+<DL>
+<DD><DL>
+</DD>
+</DL>
+</DL>
+
+<P>
+<A NAME="com.google.common.collect.ImmutableCollection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableCollection</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A> implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="serialized_methods"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Serialization Methods</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="writeReplace()"><!-- --></A><H3>
+writeReplace</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A> <B>writeReplace</B>()</PRE>
+<DL>
+<DD><DL>
+</DD>
+</DL>
+</DL>
+
+<P>
+<A NAME="com.google.common.collect.ImmutableList"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableList</A> extends <A HREF="com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt; implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="serialized_methods"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Serialization Methods</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
+readObject</H3>
+<PRE>
+private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InvalidObjectException.html?is-external=true" title="class or interface in java.io">InvalidObjectException</A></PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/InvalidObjectException.html?is-external=true" title="class or interface in java.io">InvalidObjectException</A></CODE></DD>
+</DL>
+</DL>
+<HR>
+<A NAME="writeReplace()"><!-- --></A><H3>
+writeReplace</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A> <B>writeReplace</B>()</PRE>
+<DL>
+<DD><DL>
+</DD>
+</DL>
+</DL>
+
+<P>
+<A NAME="com.google.common.collect.ImmutableListMultimap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableListMultimap</A> extends <A HREF="com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;<A HREF="com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>,<A HREF="com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt; implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<B>serialVersionUID:&nbsp;</B>0L
+
+<P>
+<A NAME="serialized_methods"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Serialization Methods</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
+readObject</H3>
+<PRE>
+private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
+</DL>
+</DL>
+<HR>
+<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
+writeObject</H3>
+<PRE>
+private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD><DL>
+<DT><B>Serial Data:</B></DT>
+ <DD>number of distinct keys, and then for each distinct key: the
+ key, the number of values for that key, and the key's values</DD>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
+</DL>
+</DL>
+
+<P>
+<A NAME="com.google.common.collect.ImmutableMap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableMap</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A> implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="serialized_methods"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Serialization Methods</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="writeReplace()"><!-- --></A><H3>
+writeReplace</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A> <B>writeReplace</B>()</PRE>
+<DL>
+<DD><DL>
+</DD>
+</DL>
+</DL>
+
+<P>
+<A NAME="com.google.common.collect.ImmutableMultimap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableMultimap</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A> implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<B>serialVersionUID:&nbsp;</B>0L
+
+<P>
+
+<P>
+<A NAME="com.google.common.collect.ImmutableMultiset"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableMultiset</A> extends <A HREF="com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt; implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<B>serialVersionUID:&nbsp;</B>0L
+
+<P>
+<A NAME="serialized_methods"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Serialization Methods</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
+readObject</H3>
+<PRE>
+private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
+</DL>
+</DL>
+<HR>
+<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
+writeObject</H3>
+<PRE>
+private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD><DL>
+<DT><B>Serial Data:</B></DT>
+ <DD>the number of distinct elements, the first element, its count,
+ the second element, its count, and so on</DD>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
+</DL>
+</DL>
+<HR>
+<A NAME="writeReplace()"><!-- --></A><H3>
+writeReplace</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A> <B>writeReplace</B>()</PRE>
+<DL>
+<DD><DL>
+</DD>
+</DL>
+</DL>
+
+<P>
+<A NAME="com.google.common.collect.ImmutableSet"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableSet</A> extends <A HREF="com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt; implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="serialized_methods"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Serialization Methods</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="writeReplace()"><!-- --></A><H3>
+writeReplace</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A> <B>writeReplace</B>()</PRE>
+<DL>
+<DD><DL>
+</DD>
+</DL>
+</DL>
+
+<P>
+<A NAME="com.google.common.collect.ImmutableSetMultimap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableSetMultimap</A> extends <A HREF="com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;<A HREF="com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt; implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<B>serialVersionUID:&nbsp;</B>0L
+
+<P>
+<A NAME="serialized_methods"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Serialization Methods</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
+readObject</H3>
+<PRE>
+private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
+</DL>
+</DL>
+<HR>
+<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
+writeObject</H3>
+<PRE>
+private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD><DL>
+<DT><B>Serial Data:</B></DT>
+ <DD>number of distinct keys, and then for each distinct key: the
+ key, the number of values for that key, and the key's values</DD>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
+</DL>
+</DL>
+
+<P>
+<A NAME="com.google.common.collect.ImmutableSortedMap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableSortedMap</A> extends com.google.common.collect.ImmutableSortedMapFauxverideShim&lt;<A HREF="com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt; implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<B>serialVersionUID:&nbsp;</B>0L
+
+<P>
+<A NAME="serialized_methods"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Serialization Methods</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="writeReplace()"><!-- --></A><H3>
+writeReplace</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A> <B>writeReplace</B>()</PRE>
+<DL>
+<DD><DL>
+</DD>
+</DL>
+</DL>
+
+<P>
+<A NAME="com.google.common.collect.ImmutableSortedSet"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableSortedSet</A> extends com.google.common.collect.ImmutableSortedSetFauxverideShim&lt;<A HREF="com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt; implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="serialized_methods"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Serialization Methods</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
+readObject</H3>
+<PRE>
+private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InvalidObjectException.html?is-external=true" title="class or interface in java.io">InvalidObjectException</A></PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/InvalidObjectException.html?is-external=true" title="class or interface in java.io">InvalidObjectException</A></CODE></DD>
+</DL>
+</DL>
+<HR>
+<A NAME="writeReplace()"><!-- --></A><H3>
+writeReplace</H3>
+<PRE>
+<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A> <B>writeReplace</B>()</PRE>
+<DL>
+<DD><DL>
+</DD>
+</DL>
+</DL>
+
+<P>
+<A NAME="com.google.common.collect.LinkedHashMultimap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">com.google.common.collect.LinkedHashMultimap</A> extends com.google.common.collect.AbstractSetMultimap&lt;<A HREF="com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">K</A>,<A HREF="com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt; implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<B>serialVersionUID:&nbsp;</B>0L
+
+<P>
+<A NAME="serialized_methods"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Serialization Methods</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
+readObject</H3>
+<PRE>
+private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
+</DL>
+</DL>
+<HR>
+<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
+writeObject</H3>
+<PRE>
+private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD><DL>
+<DT><B>Serial Data:</B></DT>
+ <DD>the number of distinct keys, and then for each distinct key:
+ the first key, the number of values for that key, and the key's values,
+ followed by successive keys and values from the entries() ordering</DD>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
+</DL>
+</DL>
+
+<P>
+<A NAME="com.google.common.collect.LinkedHashMultiset"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">com.google.common.collect.LinkedHashMultiset</A> extends com.google.common.collect.AbstractMapBasedMultiset&lt;<A HREF="com/google/common/collect/LinkedHashMultiset.html" title="type parameter in LinkedHashMultiset">E</A>&gt; implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<B>serialVersionUID:&nbsp;</B>0L
+
+<P>
+<A NAME="serialized_methods"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Serialization Methods</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
+readObject</H3>
+<PRE>
+private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
+</DL>
+</DL>
+<HR>
+<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
+writeObject</H3>
+<PRE>
+private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD><DL>
+<DT><B>Serial Data:</B></DT>
+ <DD>the number of distinct elements, the first element, its count,
+ the second element, its count, and so on</DD>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
+</DL>
+</DL>
+
+<P>
+<A NAME="com.google.common.collect.LinkedListMultimap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">com.google.common.collect.LinkedListMultimap</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A> implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<B>serialVersionUID:&nbsp;</B>0L
+
+<P>
+<A NAME="serialized_methods"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Serialization Methods</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
+readObject</H3>
+<PRE>
+private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
+</DL>
+</DL>
+<HR>
+<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
+writeObject</H3>
+<PRE>
+private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD><DL>
+<DT><B>Serial Data:</B></DT>
+ <DD>the number of distinct keys, and then for each distinct key:
+ the first key, the number of values for that key, and the key's values,
+ followed by successive keys and values from the entries() ordering</DD>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
+</DL>
+</DL>
+
+<P>
+<A NAME="com.google.common.collect.TreeMultimap"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">com.google.common.collect.TreeMultimap</A> extends com.google.common.collect.AbstractSortedSetMultimap&lt;<A HREF="com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">K</A>,<A HREF="com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">V</A>&gt; implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<B>serialVersionUID:&nbsp;</B>0L
+
+<P>
+<A NAME="serialized_methods"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Serialization Methods</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
+readObject</H3>
+<PRE>
+private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
+</DL>
+</DL>
+<HR>
+<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
+writeObject</H3>
+<PRE>
+private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD><DL>
+<DT><B>Serial Data:</B></DT>
+ <DD>key comparator, value comparator, number of distinct keys, and
+ then for each distinct key: the key, number of values for that key, and
+ key values</DD>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
+</DL>
+</DL>
+
+<P>
+<A NAME="com.google.common.collect.TreeMultiset"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">com.google.common.collect.TreeMultiset</A> extends com.google.common.collect.AbstractMapBasedMultiset&lt;<A HREF="com/google/common/collect/TreeMultiset.html" title="type parameter in TreeMultiset">E</A>&gt; implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<B>serialVersionUID:&nbsp;</B>0L
+
+<P>
+<A NAME="serialized_methods"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Serialization Methods</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
+readObject</H3>
+<PRE>
+private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
+ <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
+</DL>
+</DL>
+<HR>
+<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
+writeObject</H3>
+<PRE>
+private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
+ throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD><DL>
+<DT><B>Serial Data:</B></DT>
+ <DD>the comparator, the number of distinct elements, the first
+ element, its count, the second element, its count, and so on</DD>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
+</DL>
+</DL>
+
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html?serialized-form.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="serialized-form.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/stylesheet.css b/javadoc/stylesheet.css
new file mode 100644
index 0000000..6ea9e51
--- /dev/null
+++ b/javadoc/stylesheet.css
@@ -0,0 +1,29 @@
+/* Javadoc style sheet */
+
+/* Define colors, fonts and other style attributes here to override the defaults */
+
+/* Page background color */
+body { background-color: #FFFFFF; color:#000000 }
+
+/* Headings */
+h1 { font-size: 145% }
+
+/* Table colors */
+.TableHeadingColor { background: #CCCCFF; color:#000000 } /* Dark mauve */
+.TableSubHeadingColor { background: #EEEEFF; color:#000000 } /* Light mauve */
+.TableRowColor { background: #FFFFFF; color:#000000 } /* White */
+
+/* Font used in left-hand frame lists */
+.FrameTitleFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
+.FrameHeadingFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
+.FrameItemFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
+
+/* Navigation bar fonts and colors */
+.NavBarCell1 { background-color:#EEEEFF; color:#000000} /* Light mauve */
+.NavBarCell1Rev { background-color:#00008B; color:#FFFFFF} /* Dark Blue */
+.NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;color:#000000;}
+.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;color:#FFFFFF;}
+
+.NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000}
+.NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000}
+
diff --git a/lib/cglib-nodep-2.2.jar b/lib/cglib-nodep-2.2.jar
new file mode 100644
index 0000000..ed07cb5
--- /dev/null
+++ b/lib/cglib-nodep-2.2.jar
Binary files differ
diff --git a/lib/easymock-2.4.jar b/lib/easymock-2.4.jar
new file mode 100644
index 0000000..de59168
--- /dev/null
+++ b/lib/easymock-2.4.jar
Binary files differ
diff --git a/lib/easymockclassextension-2.4.jar b/lib/easymockclassextension-2.4.jar
new file mode 100644
index 0000000..7d098a7
--- /dev/null
+++ b/lib/easymockclassextension-2.4.jar
Binary files differ
diff --git a/lib/gwt-servlet.jar b/lib/gwt-servlet.jar
new file mode 100644
index 0000000..91b064b
--- /dev/null
+++ b/lib/gwt-servlet.jar
Binary files differ
diff --git a/lib/jsr305.jar b/lib/jsr305.jar
new file mode 100644
index 0000000..cf5f561
--- /dev/null
+++ b/lib/jsr305.jar
Binary files differ
diff --git a/lib/junit.jar b/lib/junit.jar
new file mode 100644
index 0000000..674d71e
--- /dev/null
+++ b/lib/junit.jar
Binary files differ
diff --git a/lib/tl4j-1.1.0.jar b/lib/tl4j-1.1.0.jar
new file mode 100644
index 0000000..1686b87
--- /dev/null
+++ b/lib/tl4j-1.1.0.jar
Binary files differ
diff --git a/src/com/google/common/annotations/GwtCompatible.java b/src/com/google/common/annotations/GwtCompatible.java
new file mode 100644
index 0000000..25c8da1
--- /dev/null
+++ b/src/com/google/common/annotations/GwtCompatible.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.annotations;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * The presence of this annotation on a type indicates that the type may be
+ * used with the
+ * <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT).
+ * When applied to a method, the return type of the method is GWT compatible.
+ * It's useful to indicate that an instance created by factory methods has a GWT
+ * serializable type. In the following example,
+ *
+ * <pre style="code">
+ * {@literal @}GwtCompatible
+ * class Lists {
+ * ...
+ * {@literal @}GwtCompatible(serializable = true)
+ * static &lt;E> List&lt;E> newArrayList(E... elements) {
+ * ...
+ * }
+ * }
+ * </pre>
+ * The return value of {@code Lists.newArrayList(E[])} has GWT
+ * serializable type. It is also useful in specifying contracts of interface
+ * methods. In the following example,
+ *
+ * <pre style="code">
+ * {@literal @}GwtCompatible
+ * interface ListFactory {
+ * ...
+ * {@literal @}GwtCompatible(serializable = true)
+ * &lt;E> List&lt;E> newArrayList(E... elements);
+ * }
+ * </pre>
+ * The {@code newArrayList(E[])} method of all implementations of {@code
+ * ListFactory} is expected to return a value with a GWT serializable type.
+ *
+ * <p>Note that a {@code GwtCompatible} type may have some {@link
+ * GwtIncompatible} methods.
+ *
+ * @author Charles Fry
+ * @author Hayward Chan
+ */
+@Retention(RetentionPolicy.CLASS)
+@Target({ ElementType.TYPE, ElementType.METHOD })
+// @Documented - uncomment when GWT support is official
+@GwtCompatible
+public @interface GwtCompatible {
+
+ /**
+ * When {@code true}, the annotated type or the type of the method return
+ * value is GWT serializable.
+ *
+ * @see <a href="http://code.google.com/docreader/#p=google-web-toolkit-doc-1-5&t=DevGuideSerializableTypes">
+ * Documentation about GWT serialization</a>
+ */
+ boolean serializable() default false;
+
+ /**
+ * When {@code true}, the annotated type is emulated in GWT. The emulated
+ * source (also known as super-source) is different from the implementation
+ * used by the JVM.
+ *
+ * @see <a href="http://code.google.com/docreader/#p=google-web-toolkit-doc-1-5&t=DevGuideModuleXml">
+ * Documentation about GWT emulated source</a>
+ */
+ boolean emulated() default false;
+}
diff --git a/src/com/google/common/annotations/GwtIncompatible.java b/src/com/google/common/annotations/GwtIncompatible.java
new file mode 100644
index 0000000..7899797
--- /dev/null
+++ b/src/com/google/common/annotations/GwtIncompatible.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.annotations;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * The presence of this annotation on a method indicates that the method may
+ * <em>not</em> be used with the
+ * <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT),
+ * even though its type is annotated as {@link GwtCompatible} and accessible in
+ * GWT. They can cause GWT compilation errors or simply unexpected exceptions
+ * when used in GWT.
+ *
+ * <p>Note that this annotation should only be applied to methods of types which
+ * are annotated as {@link GwtCompatible}.
+ *
+ * @author Charles Fry
+ */
+@Retention(RetentionPolicy.CLASS)
+@Target(ElementType.METHOD)
+// @Documented - uncomment when GWT support is official
+@GwtCompatible
+public @interface GwtIncompatible {
+
+ /**
+ * Describes why the annotated element is incompatible with GWT. Since this is
+ * generally due to a dependence on a type/method which GWT doesn't support,
+ * it is sufficient to simply reference the unsupported type/method. E.g.
+ * "Class.isInstance".
+ */
+ String value();
+
+}
diff --git a/src/com/google/common/annotations/VisibleForTesting.java b/src/com/google/common/annotations/VisibleForTesting.java
new file mode 100644
index 0000000..d890ba6
--- /dev/null
+++ b/src/com/google/common/annotations/VisibleForTesting.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.annotations;
+
+/**
+ * An annotation that indicates that the visibility of a type or member has
+ * been relaxed to make the code testable.
+ *
+ * @author Johannes Henkel
+ */
+@GwtCompatible
+public @interface VisibleForTesting {}
diff --git a/src/com/google/common/base/FinalizablePhantomReference.java b/src/com/google/common/base/FinalizablePhantomReference.java
new file mode 100644
index 0000000..4d5eec0
--- /dev/null
+++ b/src/com/google/common/base/FinalizablePhantomReference.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.base;
+
+import java.lang.ref.PhantomReference;
+
+/**
+ * Phantom reference with a {@code finalizeReferent()} method which a
+ * background thread invokes after the garbage collector reclaims the
+ * referent. This is a simpler alternative to using a {@link
+ * java.lang.ref.ReferenceQueue}.
+ *
+ * <p>Unlike a normal phantom reference, this reference will be cleared
+ * automatically.
+ *
+ * @author Bob Lee
+ */
+public abstract class FinalizablePhantomReference<T>
+ extends PhantomReference<T> implements FinalizableReference {
+
+ /**
+ * Constructs a new finalizable phantom reference.
+ *
+ * @param referent to phantom reference
+ * @param queue that should finalize the referent
+ */
+ protected FinalizablePhantomReference(T referent,
+ FinalizableReferenceQueue queue) {
+ super(referent, queue.queue);
+ queue.cleanUp();
+ }
+}
diff --git a/src/com/google/common/base/FinalizableReference.java b/src/com/google/common/base/FinalizableReference.java
new file mode 100644
index 0000000..f2e185f
--- /dev/null
+++ b/src/com/google/common/base/FinalizableReference.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.base;
+
+/**
+ * Implemented by references that have code to run after garbage collection of
+ * their referents.
+ *
+ * @see FinalizableReferenceQueue
+ * @author Bob Lee
+ */
+public interface FinalizableReference {
+
+ /**
+ * Invoked on a background thread after the referent has been garbage
+ * collected unless security restrictions prevented starting a background
+ * thread, in which case this method is invoked when new references
+ * are created.
+ */
+ void finalizeReferent();
+}
diff --git a/src/com/google/common/base/FinalizableReferenceQueue.java b/src/com/google/common/base/FinalizableReferenceQueue.java
new file mode 100644
index 0000000..531ba0d
--- /dev/null
+++ b/src/com/google/common/base/FinalizableReferenceQueue.java
@@ -0,0 +1,313 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.base;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.lang.ref.Reference;
+import java.lang.ref.ReferenceQueue;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * A reference queue with an associated background thread that dequeues
+ * references and invokes {@link FinalizableReference#finalizeReferent()} on
+ * them.
+ *
+ * <p>Keep a strong reference to this object until all of the associated
+ * referents have been finalized. If this object is garbage collected earlier,
+ * the backing thread will not invoke {@code finalizeReferent()} on the
+ * remaining references.
+ *
+ * @author Bob Lee
+ */
+public class FinalizableReferenceQueue {
+
+ /*
+ * The Finalizer thread keeps a phantom reference to this object. When the
+ * client (ReferenceMap, for example) no longer has a strong reference to
+ * this object, the garbage collector will reclaim it and enqueue the
+ * phantom reference. The enqueued reference will trigger the Finalizer to
+ * stop.
+ *
+ * If this library is loaded in the system class loader,
+ * FinalizableReferenceQueue can load Finalizer directly with no problems.
+ *
+ * If this library is loaded in an application class loader, it's important
+ * that Finalizer not have a strong reference back to the class loader.
+ * Otherwise, you could have a graph like this:
+ *
+ * Finalizer Thread
+ * runs instance of -> Finalizer.class
+ * loaded by -> Application class loader
+ * which loaded -> ReferenceMap.class
+ * which has a static -> FinalizableReferenceQueue instance
+ *
+ * Even if no other references to classes from the application class loader
+ * remain, the Finalizer thread keeps an indirect strong reference to the
+ * queue in ReferenceMap, which keeps the Finalizer running, and as a result,
+ * the application class loader can never be reclaimed.
+ *
+ * This means that dynamically loaded web applications and OSGi bundles can't
+ * be unloaded.
+ *
+ * If the library is loaded in an application class loader, we try to break
+ * the cycle by loading Finalizer in its own independent class loader:
+ *
+ * System class loader
+ * -> Application class loader
+ * -> ReferenceMap
+ * -> FinalizableReferenceQueue
+ * -> etc.
+ * -> Decoupled class loader
+ * -> Finalizer
+ *
+ * Now, Finalizer no longer keeps an indirect strong reference to the
+ * static FinalizableReferenceQueue field in ReferenceMap. The application
+ * class loader can be reclaimed at which point the Finalizer thread will
+ * stop and its decoupled class loader can also be reclaimed.
+ *
+ * If any of this fails along the way, we fall back to loading Finalizer
+ * directly in the application class loader.
+ */
+
+ private static final Logger logger
+ = Logger.getLogger(FinalizableReferenceQueue.class.getName());
+
+ private static final String FINALIZER_CLASS_NAME
+ = "com.google.common.base.internal.Finalizer";
+
+ /** Reference to Finalizer.startFinalizer(). */
+ private static final Method startFinalizer;
+ static {
+ Class<?> finalizer = loadFinalizer(
+ new SystemLoader(), new DecoupledLoader(), new DirectLoader());
+ startFinalizer = getStartFinalizer(finalizer);
+ }
+
+ /**
+ * The actual reference queue that our background thread will poll.
+ */
+ final ReferenceQueue<Object> queue;
+
+ /**
+ * Whether or not the background thread started successfully.
+ */
+ final boolean threadStarted;
+
+ /**
+ * Constructs a new queue.
+ */
+ @SuppressWarnings("unchecked")
+ public FinalizableReferenceQueue() {
+ // We could start the finalizer lazily, but I'd rather it blow up early.
+ ReferenceQueue<Object> queue;
+ boolean threadStarted = false;
+ try {
+ queue = (ReferenceQueue<Object>) startFinalizer.invoke(null,
+ FinalizableReference.class, this);
+ threadStarted = true;
+ } catch (IllegalAccessException e) {
+ // Finalizer.startFinalizer() is public.
+ throw new AssertionError(e);
+ } catch (Throwable t) {
+ logger.log(Level.INFO, "Failed to start reference finalizer thread."
+ + " Reference cleanup will only occur when new references are"
+ + " created.", t);
+ queue = new ReferenceQueue<Object>();
+ }
+
+ this.queue = queue;
+ this.threadStarted = threadStarted;
+ }
+
+ /**
+ * Repeatedly dequeues references from the queue and invokes
+ * {@link FinalizableReference#finalizeReferent()} on them until the queue
+ * is empty. This method is a no-op if the background thread was created
+ * successfully.
+ */
+ void cleanUp() {
+ if (threadStarted) {
+ return;
+ }
+
+ Reference<?> reference;
+ while ((reference = queue.poll()) != null) {
+ /*
+ * This is for the benefit of phantom references. Weak and soft
+ * references will have already been cleared by this point.
+ */
+ reference.clear();
+ try {
+ ((FinalizableReference) reference).finalizeReferent();
+ } catch (Throwable t) {
+ logger.log(Level.SEVERE, "Error cleaning up after reference.", t);
+ }
+ }
+ }
+
+ /**
+ * Iterates through the given loaders until it finds one that can load
+ * Finalizer.
+ *
+ * @return Finalizer.class
+ */
+ private static Class<?> loadFinalizer(FinalizerLoader... loaders) {
+ for (FinalizerLoader loader : loaders) {
+ Class<?> finalizer = loader.loadFinalizer();
+ if (finalizer != null) {
+ return finalizer;
+ }
+ }
+
+ throw new AssertionError();
+ }
+
+ /**
+ * Loads Finalizer.class.
+ */
+ interface FinalizerLoader {
+
+ /**
+ * Returns Finalizer.class or null if this loader shouldn't or can't load
+ * it.
+ *
+ * @throws SecurityException if we don't have the appropriate privileges
+ */
+ Class<?> loadFinalizer();
+ }
+
+ /**
+ * Tries to load Finalizer from the system class loader. If Finalizer is
+ * in the system class path, we needn't create a separate loader.
+ */
+ static class SystemLoader implements FinalizerLoader {
+ public Class<?> loadFinalizer() {
+ ClassLoader systemLoader;
+ try {
+ systemLoader = ClassLoader.getSystemClassLoader();
+ } catch (SecurityException e) {
+ logger.info("Not allowed to access system class loader.");
+ return null;
+ }
+ if (systemLoader != null) {
+ try {
+ return systemLoader.loadClass(FINALIZER_CLASS_NAME);
+ } catch (ClassNotFoundException e) {
+ // Ignore. Finalizer is simply in a child class loader.
+ return null;
+ }
+ } else {
+ return null;
+ }
+ }
+ }
+
+ /**
+ * Try to load Finalizer in its own class loader. If Finalizer's thread
+ * had a direct reference to our class loader (which could be that of
+ * a dynamically loaded web application or OSGi bundle), it would prevent
+ * our class loader from getting garbage collected.
+ */
+ static class DecoupledLoader implements FinalizerLoader {
+
+ private static final String LOADING_ERROR = "Could not load Finalizer in"
+ + " its own class loader. Loading Finalizer in the current class loader"
+ + " instead. As a result, you will not be able to garbage collect this"
+ + " class loader. To support reclaiming this class loader, either"
+ + " resolve the underlying issue, or move Google Collections to your"
+ + " system class path.";
+
+ public Class<?> loadFinalizer() {
+ try {
+ /*
+ * We use URLClassLoader because it's the only concrete class loader
+ * implementation in the JDK. If we used our own ClassLoader subclass,
+ * Finalizer would indirectly reference this class loader:
+ *
+ * Finalizer.class ->
+ * CustomClassLoader ->
+ * CustomClassLoader.class ->
+ * This class loader
+ *
+ * System class loader will (and must) be the parent.
+ */
+ ClassLoader finalizerLoader = newLoader(getBaseUrl());
+ return finalizerLoader.loadClass(FINALIZER_CLASS_NAME);
+ } catch (Exception e) {
+ logger.log(Level.WARNING, LOADING_ERROR, e);
+ return null;
+ }
+ }
+
+ /**
+ * Gets URL for base of path containing Finalizer.class.
+ */
+ URL getBaseUrl() throws IOException {
+ // Find URL pointing to Finalizer.class file.
+ String finalizerPath = FINALIZER_CLASS_NAME.replace('.', '/') + ".class";
+ URL finalizerUrl = getClass().getClassLoader().getResource(finalizerPath);
+ if (finalizerUrl == null) {
+ throw new FileNotFoundException(finalizerPath);
+ }
+
+ // Find URL pointing to base of class path.
+ String urlString = finalizerUrl.toString();
+ if (!urlString.endsWith(finalizerPath)) {
+ throw new IOException("Unsupported path style: " + urlString);
+ }
+ urlString = urlString.substring(0,
+ urlString.length() - finalizerPath.length());
+ return new URL(finalizerUrl, urlString);
+ }
+
+ /** Creates a class loader with the given base URL as its classpath. */
+ URLClassLoader newLoader(URL base) {
+ return new URLClassLoader(new URL[] { base });
+ }
+ }
+
+ /**
+ * Loads Finalizer directly using the current class loader. We won't be
+ * able to garbage collect this class loader, but at least the world
+ * doesn't end.
+ */
+ static class DirectLoader implements FinalizerLoader {
+ public Class<?> loadFinalizer() {
+ try {
+ return Class.forName(FINALIZER_CLASS_NAME);
+ } catch (ClassNotFoundException e) {
+ throw new AssertionError(e);
+ }
+ }
+ }
+
+ /**
+ * Looks up Finalizer.startFinalizer().
+ */
+ static Method getStartFinalizer(Class<?> finalizer) {
+ try {
+ return finalizer.getMethod("startFinalizer", Class.class, Object.class);
+ } catch (NoSuchMethodException e) {
+ throw new AssertionError(e);
+ }
+ }
+}
diff --git a/src/com/google/common/base/FinalizableSoftReference.java b/src/com/google/common/base/FinalizableSoftReference.java
new file mode 100644
index 0000000..764fdd2
--- /dev/null
+++ b/src/com/google/common/base/FinalizableSoftReference.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.base;
+
+import java.lang.ref.SoftReference;
+
+/**
+ * Soft reference with a {@code finalizeReferent()} method which a background
+ * thread invokes after the garbage collector reclaims the referent. This is a
+ * simpler alternative to using a {@link java.lang.ref.ReferenceQueue}.
+ *
+ * @author Bob Lee
+ */
+public abstract class FinalizableSoftReference<T> extends SoftReference<T>
+ implements FinalizableReference {
+
+ /**
+ * Constructs a new finalizable soft reference.
+ *
+ * @param referent to softly reference
+ * @param queue that should finalize the referent
+ */
+ protected FinalizableSoftReference(T referent,
+ FinalizableReferenceQueue queue) {
+ super(referent, queue.queue);
+ queue.cleanUp();
+ }
+}
diff --git a/src/com/google/common/base/FinalizableWeakReference.java b/src/com/google/common/base/FinalizableWeakReference.java
new file mode 100644
index 0000000..5c590a5
--- /dev/null
+++ b/src/com/google/common/base/FinalizableWeakReference.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.base;
+
+import java.lang.ref.WeakReference;
+
+/**
+ * Weak reference with a {@code finalizeReferent()} method which a background
+ * thread invokes after the garbage collector reclaims the referent. This is a
+ * simpler alternative to using a {@link java.lang.ref.ReferenceQueue}.
+ *
+ * @author Bob Lee
+ */
+public abstract class FinalizableWeakReference<T> extends WeakReference<T>
+ implements FinalizableReference {
+
+ /**
+ * Constructs a new finalizable weak reference.
+ *
+ * @param referent to weakly reference
+ * @param queue that should finalize the referent
+ */
+ protected FinalizableWeakReference(T referent,
+ FinalizableReferenceQueue queue) {
+ super(referent, queue.queue);
+ queue.cleanUp();
+ }
+}
diff --git a/src/com/google/common/base/Function.java b/src/com/google/common/base/Function.java
new file mode 100644
index 0000000..684287b
--- /dev/null
+++ b/src/com/google/common/base/Function.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+
+import javax.annotation.Nullable;
+
+/**
+ * A transformation from one object to another. For example, a
+ * {@code StringToIntegerFunction} may implement
+ * <code>Function&lt;String,Integer&gt;</code> and transform integers in
+ * {@code String} format to {@code Integer} format.
+ *
+ * <p>The transformation on the source object does not necessarily result in
+ * an object of a different type. For example, a
+ * {@code FarenheitToCelsiusFunction} may implement
+ * <code>Function&lt;Float,Float&gt;</code>.
+ *
+ * <p>Implementations which may cause side effects upon evaluation are strongly
+ * encouraged to state this fact clearly in their API documentation.
+ *
+ * @param <F> the type of the function input
+ * @param <T> the type of the function output
+ * @author Kevin Bourrillion
+ * @author Scott Bonneau
+ */
+@GwtCompatible
+public interface Function<F, T> {
+
+ /**
+ * Applies the function to an object of type {@code F}, resulting in an object
+ * of type {@code T}. Note that types {@code F} and {@code T} may or may not
+ * be the same.
+ *
+ * @param from the source object
+ * @return the resulting object
+ */
+ T apply(@Nullable F from);
+
+ /**
+ * Indicates whether some other object is equal to this {@code Function}.
+ * This method can return {@code true} <i>only</i> if the specified object is
+ * also a {@code Function} and, for every input object {@code o}, it returns
+ * exactly the same value. Thus, {@code function1.equals(function2)} implies
+ * that either {@code function1.apply(o)} and {@code function2.apply(o)} are
+ * both null, or {@code function1.apply(o).equals(function2.apply(o))}.
+ *
+ * <p>Note that it is always safe <em>not</em> to override
+ * {@link Object#equals}.
+ */
+ boolean equals(@Nullable Object obj);
+}
diff --git a/src/com/google/common/base/Functions.java b/src/com/google/common/base/Functions.java
new file mode 100644
index 0000000..17250e9
--- /dev/null
+++ b/src/com/google/common/base/Functions.java
@@ -0,0 +1,285 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.io.Serializable;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * Useful functions.
+ *
+ * <p>All methods returns serializable functions as long as they're given
+ * serializable parameters.
+ *
+ * @author Mike Bostock
+ * @author Vlad Patryshev
+ * @author Jared Levy
+ */
+@GwtCompatible
+public final class Functions {
+ private Functions() {}
+
+ /**
+ * Returns a function that calls {@code toString()} on its argument. The
+ * function does not accept nulls; it will throw a
+ * {@link NullPointerException} when applied to {@code null}.
+ */
+ public static Function<Object, String> toStringFunction() {
+ return ToStringFunction.INSTANCE;
+ }
+
+ // enum singleton pattern
+ private enum ToStringFunction implements Function<Object, String> {
+ INSTANCE;
+
+ public String apply(Object o) {
+ return o.toString();
+ }
+
+ @Override public String toString() {
+ return "toString";
+ }
+ }
+
+ /**
+ * Returns the identity function.
+ */
+ @SuppressWarnings("unchecked")
+ public static <E> Function<E, E> identity() {
+ return (Function<E, E>) IdentityFunction.INSTANCE;
+ }
+
+ // enum singleton pattern
+ private enum IdentityFunction implements Function<Object, Object> {
+ INSTANCE;
+
+ public Object apply(Object o) {
+ return o;
+ }
+
+ @Override public String toString() {
+ return "identity";
+ }
+ }
+
+ /**
+ * Returns a function which performs a map lookup. The returned function
+ * throws an {@link IllegalArgumentException} if given a key that does not
+ * exist in the map.
+ */
+ public static <K, V> Function<K, V> forMap(Map<K, V> map) {
+ return new FunctionForMapNoDefault<K, V>(map);
+ }
+
+ private static class FunctionForMapNoDefault<K, V>
+ implements Function<K, V>, Serializable {
+ final Map<K, V> map;
+
+ FunctionForMapNoDefault(Map<K, V> map) {
+ this.map = checkNotNull(map);
+ }
+ public V apply(K key) {
+ V result = map.get(key);
+ checkArgument(result != null || map.containsKey(key),
+ "Key '%s' not present in map", key);
+ return result;
+ }
+ @Override public boolean equals(Object o) {
+ if (o instanceof FunctionForMapNoDefault) {
+ FunctionForMapNoDefault<?, ?> that = (FunctionForMapNoDefault<?, ?>) o;
+ return map.equals(that.map);
+ }
+ return false;
+ }
+ @Override public int hashCode() {
+ return map.hashCode();
+ }
+ @Override public String toString() {
+ return "forMap(" + map + ")";
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Returns a function which performs a map lookup with a default value. The
+ * function created by this method returns {@code defaultValue} for all
+ * inputs that do not belong to the map's key set.
+ *
+ * @param map source map that determines the function behavior
+ * @param defaultValue the value to return for inputs that aren't map keys
+ * @return function that returns {@code map.get(a)} when {@code a} is a key,
+ * or {@code defaultValue} otherwise
+ */
+ public static <K, V> Function<K, V> forMap(
+ Map<K, ? extends V> map, @Nullable V defaultValue) {
+ return new ForMapWithDefault<K, V>(map, defaultValue);
+ }
+
+ private static class ForMapWithDefault<K, V>
+ implements Function<K, V>, Serializable {
+ final Map<K, ? extends V> map;
+ final V defaultValue;
+
+ ForMapWithDefault(Map<K, ? extends V> map, V defaultValue) {
+ this.map = checkNotNull(map);
+ this.defaultValue = defaultValue;
+ }
+ public V apply(K key) {
+ return map.containsKey(key) ? map.get(key) : defaultValue;
+ }
+ @Override public boolean equals(Object o) {
+ if (o instanceof ForMapWithDefault) {
+ ForMapWithDefault<?, ?> that = (ForMapWithDefault<?, ?>) o;
+ return map.equals(that.map)
+ && Objects.equal(defaultValue, that.defaultValue);
+ }
+ return false;
+ }
+ @Override public int hashCode() {
+ return Objects.hashCode(map, defaultValue);
+ }
+ @Override public String toString() {
+ return "forMap(" + map + ", defaultValue=" + defaultValue + ")";
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Returns the composition of two functions. For {@code f: A->B} and
+ * {@code g: B->C}, composition is defined as the function h such that
+ * {@code h(a) == g(f(a))} for each {@code a}.
+ *
+ * @see <a href="//en.wikipedia.org/wiki/Function_composition">
+ * function composition</a>
+ *
+ * @param g the second function to apply
+ * @param f the first function to apply
+ * @return the composition of {@code f} and {@code g}
+ */
+ public static <A, B, C> Function<A, C> compose(
+ Function<B, C> g, Function<A, ? extends B> f) {
+ return new FunctionComposition<A, B, C>(g, f);
+ }
+
+ private static class FunctionComposition<A, B, C>
+ implements Function<A, C>, Serializable {
+ private final Function<B, C> g;
+ private final Function<A, ? extends B> f;
+
+ public FunctionComposition(Function<B, C> g,
+ Function<A, ? extends B> f) {
+ this.g = checkNotNull(g);
+ this.f = checkNotNull(f);
+ }
+ public C apply(A a) {
+ return g.apply(f.apply(a));
+ }
+ @Override public boolean equals(Object obj) {
+ if (obj instanceof FunctionComposition) {
+ FunctionComposition<?, ?, ?> that = (FunctionComposition<?, ?, ?>) obj;
+ return f.equals(that.f) && g.equals(that.g);
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ return f.hashCode() ^ g.hashCode();
+ }
+ @Override public String toString() {
+ return g.toString() + "(" + f.toString() + ")";
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Creates a function that returns the same boolean output as the given
+ * predicate for all inputs.
+ */
+ public static <T> Function<T, Boolean> forPredicate(Predicate<T> predicate) {
+ return new PredicateFunction<T>(predicate);
+ }
+
+ /** @see Functions#forPredicate */
+ private static class PredicateFunction<T>
+ implements Function<T, Boolean>, Serializable {
+ private final Predicate<T> predicate;
+
+ private PredicateFunction(Predicate<T> predicate) {
+ this.predicate = checkNotNull(predicate);
+ }
+
+ public Boolean apply(T t) {
+ return predicate.apply(t);
+ }
+ @Override public boolean equals(Object obj) {
+ if (obj instanceof PredicateFunction) {
+ PredicateFunction<?> that = (PredicateFunction<?>) obj;
+ return predicate.equals(that.predicate);
+ }
+ return false;
+ }
+ @Override public int hashCode() {
+ return predicate.hashCode();
+ }
+ @Override public String toString() {
+ return "forPredicate(" + predicate + ")";
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Creates a function that returns {@code value} for any input.
+ *
+ * @param value the constant value for the function to return
+ * @return a function that always returns {@code value}
+ */
+ public static <E> Function<Object, E> constant(@Nullable E value) {
+ return new ConstantFunction<E>(value);
+ }
+
+ private static class ConstantFunction<E>
+ implements Function<Object, E>, Serializable {
+ private final E value;
+
+ public ConstantFunction(@Nullable E value) {
+ this.value = value;
+ }
+ public E apply(Object from) {
+ return value;
+ }
+ @Override public boolean equals(Object obj) {
+ if (obj instanceof ConstantFunction) {
+ ConstantFunction<?> that = (ConstantFunction<?>) obj;
+ return Objects.equal(value, that.value);
+ }
+ return false;
+ }
+ @Override public int hashCode() {
+ return (value == null) ? 0 : value.hashCode();
+ }
+ @Override public String toString() {
+ return "constant(" + value + ")";
+ }
+ private static final long serialVersionUID = 0;
+ }
+}
diff --git a/src/com/google/common/base/Joiner.java b/src/com/google/common/base/Joiner.java
new file mode 100644
index 0000000..2f3d002
--- /dev/null
+++ b/src/com/google/common/base/Joiner.java
@@ -0,0 +1,341 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.io.IOException;
+import java.util.AbstractList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import javax.annotation.Nullable;
+
+/**
+ * An object which joins pieces of text (specified as an array, {@link
+ * Iterable}, varargs or even a {@link Map}) with a separator. It either
+ * appends the results to an {@link Appendable} or returns them as a {@link
+ * String}. Example: <pre> {@code
+ *
+ * Joiner joiner = Joiner.on("; ").skipNulls();
+ * . . .
+ * return joiner.join("Harry", null, "Ron", "Hermione");}</pre>
+ *
+ * This returns the string {@code "Harry; Ron; Hermione"}. Note that all input
+ * elements are converted to strings using {@link Object#toString()} before
+ * being appended.
+ *
+ * <p>If neither {@link #skipNulls()} nor {@link #useForNull(String)} is
+ * specified, the joining methods will throw {@link NullPointerException} if any
+ * given element is null.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible public class Joiner {
+ /**
+ * Returns a joiner which automatically places {@code separator} between
+ * consecutive elements.
+ */
+ public static Joiner on(String separator) {
+ return new Joiner(separator);
+ }
+
+ /**
+ * Returns a joiner which automatically places {@code separator} between
+ * consecutive elements.
+ */
+ public static Joiner on(char separator) {
+ return new Joiner(String.valueOf(separator));
+ }
+
+ private final String separator;
+
+ private Joiner(String separator) {
+ this.separator = checkNotNull(separator);
+ }
+
+ private Joiner(Joiner prototype) {
+ this.separator = prototype.separator;
+ }
+
+ /**
+ * Appends the string representation of each of {@code parts}, using the
+ * previously configured separator between each, to {@code appendable}.
+ */
+ public <A extends Appendable> A appendTo(A appendable, Iterable<?> parts)
+ throws IOException {
+ checkNotNull(appendable);
+ Iterator<?> iterator = parts.iterator();
+ if (iterator.hasNext()) {
+ appendable.append(toString(iterator.next()));
+ while (iterator.hasNext()) {
+ appendable.append(separator);
+ appendable.append(toString(iterator.next()));
+ }
+ }
+ return appendable;
+ }
+
+ /**
+ * Appends the string representation of each of {@code parts}, using the
+ * previously configured separator between each, to {@code appendable}.
+ */
+ public final <A extends Appendable> A appendTo(
+ A appendable, Object[] parts) throws IOException {
+ return appendTo(appendable, Arrays.asList(parts));
+ }
+
+ /**
+ * Appends to {@code appendable} the string representation of each of the
+ * remaining arguments.
+ */
+ public final <A extends Appendable> A appendTo(A appendable,
+ @Nullable Object first, @Nullable Object second, Object... rest)
+ throws IOException {
+ return appendTo(appendable, iterable(first, second, rest));
+ }
+
+ /**
+ * Appends the string representation of each of {@code parts}, using the
+ * previously configured separator between each, to {@code builder}. Identical
+ * to {@link #appendTo(Appendable, Iterable)}, except that it does not throw
+ * {@link IOException}.
+ */
+ public final StringBuilder appendTo(StringBuilder builder, Iterable<?> parts)
+ {
+ try {
+ appendTo((Appendable) builder, parts);
+ } catch (IOException impossible) {
+ throw new AssertionError(impossible);
+ }
+ return builder;
+ }
+
+ /**
+ * Appends the string representation of each of {@code parts}, using the
+ * previously configured separator between each, to {@code builder}. Identical
+ * to {@link #appendTo(Appendable, Iterable)}, except that it does not throw
+ * {@link IOException}.
+ */
+ public final StringBuilder appendTo(StringBuilder builder, Object[] parts) {
+ return appendTo(builder, Arrays.asList(parts));
+ }
+
+ /**
+ * Appends to {@code builder} the string representation of each of the
+ * remaining arguments. Identical to {@link #appendTo(Appendable, Object,
+ * Object, Object[])}, except that it does not throw {@link IOException}.
+ */
+ public final StringBuilder appendTo(StringBuilder builder,
+ @Nullable Object first, @Nullable Object second, Object... rest) {
+ return appendTo(builder, iterable(first, second, rest));
+ }
+
+ /**
+ * Returns a string containing the string representation of each of {@code
+ * parts}, using the previously configured separator between each.
+ */
+ public final String join(Iterable<?> parts) {
+ return appendTo(new StringBuilder(), parts).toString();
+ }
+
+ /**
+ * Returns a string containing the string representation of each of {@code
+ * parts}, using the previously configured separator between each.
+ */
+ public final String join(Object[] parts) {
+ return join(Arrays.asList(parts));
+ }
+
+ /**
+ * Returns a string containing the string representation of each argument,
+ * using the previously configured separator between each.
+ */
+ public final String join(
+ @Nullable Object first, @Nullable Object second, Object... rest) {
+ return join(iterable(first, second, rest));
+ }
+
+ /**
+ * Returns a joiner with the same behavior as this one, except automatically
+ * substituting {@code nullText} for any provided null elements.
+ */
+ public Joiner useForNull(final String nullText) {
+ checkNotNull(nullText);
+ return new Joiner(this) {
+ @Override CharSequence toString(Object part) {
+ return (part == null) ? nullText : Joiner.this.toString(part);
+ }
+ @Override public Joiner useForNull(String nullText) {
+ checkNotNull(nullText); // weird, just to satisfy NullPointerTester!
+ // TODO: fix that?
+ throw new UnsupportedOperationException("already specified useForNull");
+ }
+ @Override public Joiner skipNulls() {
+ throw new UnsupportedOperationException("already specified useForNull");
+ }
+ };
+ }
+
+ /**
+ * Returns a joiner with the same behavior as this joiner, except
+ * automatically skipping over any provided null elements.
+ */
+ public Joiner skipNulls() {
+ return new Joiner(this) {
+ @Override public <A extends Appendable> A appendTo(
+ A appendable, Iterable<?> parts) throws IOException {
+ checkNotNull(appendable, "appendable");
+ checkNotNull(parts, "parts");
+ Iterator<?> iterator = parts.iterator();
+ while (iterator.hasNext()) {
+ Object part = iterator.next();
+ if (part != null) {
+ appendable.append(Joiner.this.toString(part));
+ break;
+ }
+ }
+ while (iterator.hasNext()) {
+ Object part = iterator.next();
+ if (part != null) {
+ appendable.append(separator);
+ appendable.append(Joiner.this.toString(part));
+ }
+ }
+ return appendable;
+ }
+ @Override public Joiner useForNull(String nullText) {
+ checkNotNull(nullText); // weird, just to satisfy NullPointerTester!
+ throw new UnsupportedOperationException("already specified skipNulls");
+ }
+ @Override public MapJoiner withKeyValueSeparator(String kvs) {
+ checkNotNull(kvs); // weird, just to satisfy NullPointerTester!
+ throw new UnsupportedOperationException(
+ "can't use .skipNulls() with maps");
+ }
+ };
+ }
+
+ /**
+ * Returns a {@code MapJoiner} using the given key-value separator, and the
+ * same configuration as this {@code Joiner} otherwise.
+ */
+ public MapJoiner withKeyValueSeparator(String keyValueSeparator) {
+ return new MapJoiner(this, checkNotNull(keyValueSeparator));
+ }
+
+ /**
+ * An object that joins map entries in the same manner as {@code Joiner} joins
+ * iterables and arrays.
+ */
+ public static class MapJoiner {
+ private Joiner joiner;
+ private String keyValueSeparator;
+
+ private MapJoiner(Joiner joiner, String keyValueSeparator) {
+ this.joiner = joiner;
+ this.keyValueSeparator = keyValueSeparator;
+ }
+
+ /**
+ * Appends the string representation of each entry of {@code map}, using the
+ * previously configured separator and key-value separator, to {@code
+ * appendable}.
+ */
+ public <A extends Appendable> A appendTo(A appendable, Map<?, ?> map)
+ throws IOException {
+ checkNotNull(appendable);
+ Iterator<? extends Map.Entry<?, ?>> iterator = map.entrySet().iterator();
+ if (iterator.hasNext()) {
+ Entry<?, ?> entry = iterator.next();
+ appendable.append(joiner.toString(entry.getKey()));
+ appendable.append(keyValueSeparator);
+ appendable.append(joiner.toString(entry.getValue()));
+ while (iterator.hasNext()) {
+ appendable.append(joiner.separator);
+ Entry<?, ?> e = iterator.next();
+ appendable.append(joiner.toString(e.getKey()));
+ appendable.append(keyValueSeparator);
+ appendable.append(joiner.toString(e.getValue()));
+ }
+ }
+ return appendable;
+ }
+
+ /**
+ * Appends the string representation of each entry of {@code map}, using the
+ * previously configured separator and key-value separator, to {@code
+ * builder}. Identical to {@link #appendTo(Appendable, Map)}, except that it
+ * does not throw {@link IOException}.
+ */
+ public StringBuilder appendTo(StringBuilder builder, Map<?, ?> map) {
+ try {
+ appendTo((Appendable) builder, map);
+ } catch (IOException impossible) {
+ throw new AssertionError(impossible);
+ }
+ return builder;
+ }
+
+ /**
+ * Returns a string containing the string representation of each entry of
+ * {@code map}, using the previously configured separator and key-value
+ * separator.
+ */
+ public String join(Map<?, ?> map) {
+ return appendTo(new StringBuilder(), map).toString();
+ }
+
+ /**
+ * Returns a map joiner with the same behavior as this one, except
+ * automatically substituting {@code nullText} for any provided null keys or
+ * values.
+ */
+ public MapJoiner useForNull(String nullText) {
+ return new MapJoiner(joiner.useForNull(nullText), keyValueSeparator);
+ }
+ }
+
+ CharSequence toString(Object part) {
+ return (part instanceof CharSequence)
+ ? (CharSequence) part
+ : part.toString();
+ }
+
+ private static Iterable<Object> iterable(
+ final Object first, final Object second, final Object[] rest) {
+ checkNotNull(rest);
+ return new AbstractList<Object>() {
+ @Override public int size() {
+ return rest.length + 2;
+ }
+ @Override public Object get(int index) {
+ switch (index) {
+ case 0:
+ return first;
+ case 1:
+ return second;
+ default:
+ return rest[index - 2];
+ }
+ }
+ };
+ }
+}
diff --git a/src/com/google/common/base/Objects.java b/src/com/google/common/base/Objects.java
new file mode 100644
index 0000000..e20a944
--- /dev/null
+++ b/src/com/google/common/base/Objects.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Arrays;
+
+import javax.annotation.Nullable;
+
+/**
+ * Helper functions that can operate on any {@code Object}.
+ *
+ * @author Laurence Gonsalves
+ */
+@GwtCompatible
+public final class Objects {
+ private Objects() {}
+
+ /**
+ * Determines whether two possibly-null objects are equal. Returns:
+ *
+ * <ul>
+ * <li>{@code true} if {@code a} and {@code b} are both null.
+ * <li>{@code true} if {@code a} and {@code b} are both non-null and they are
+ * equal according to {@link Object#equals(Object)}.
+ * <li>{@code false} in all other situations.
+ * </ul>
+ *
+ * <p>This assumes that any non-null objects passed to this function conform
+ * to the {@code equals()} contract.
+ */
+ public static boolean equal(@Nullable Object a, @Nullable Object b) {
+ return a == b || (a != null && a.equals(b));
+ }
+
+ /**
+ * Generates a hash code for multiple values. The hash code is generated by
+ * calling {@link Arrays#hashCode(Object[])}.
+ *
+ * <p>This is useful for implementing {@link Object#hashCode()}. For example,
+ * in an object that has three properties, {@code x}, {@code y}, and
+ * {@code z}, one could write:
+ * <pre>
+ * public int hashCode() {
+ * return Objects.hashCode(getX(), getY(), getZ());
+ * }</pre>
+ *
+ * <b>Warning</b>: When a single object is supplied, the returned hash code
+ * does not equal the hash code of that object.
+ */
+ public static int hashCode(Object... objects) {
+ return Arrays.hashCode(objects);
+ }
+}
diff --git a/src/com/google/common/base/Platform.java b/src/com/google/common/base/Platform.java
new file mode 100644
index 0000000..ac422c2
--- /dev/null
+++ b/src/com/google/common/base/Platform.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * Methods factored out so that they can be emulated differently in GWT.
+ *
+ * @author Jesse Wilson
+ */
+@GwtCompatible(emulated = true)
+final class Platform {
+ private Platform() {}
+
+ /**
+ * Calls {@link Class#isInstance(Object)}.
+ *
+ * <p>This method is not supported in GWT yet.
+ */
+ static boolean isInstance(Class<?> clazz, Object obj) {
+ return clazz.isInstance(obj);
+ }
+}
diff --git a/src/com/google/common/base/Preconditions.java b/src/com/google/common/base/Preconditions.java
new file mode 100644
index 0000000..d0b811a
--- /dev/null
+++ b/src/com/google/common/base/Preconditions.java
@@ -0,0 +1,403 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.VisibleForTesting;
+
+import java.util.NoSuchElementException;
+
+/**
+ * Simple static methods to be called at the start of your own methods to verify
+ * correct arguments and state. This allows constructs such as
+ * <pre>
+ * if (count <= 0) {
+ * throw new IllegalArgumentException("must be positive: " + count);
+ * }</pre>
+ *
+ * to be replaced with the more compact
+ * <pre>
+ * checkArgument(count > 0, "must be positive: %s", count);</pre>
+ *
+ * Note that the sense of the expression is inverted; with {@code Preconditions}
+ * you declare what you expect to be <i>true</i>, just as you do with an
+ * <a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/assert.html">
+ * {@code assert}</a> or a JUnit {@code assertTrue} call.
+ *
+ * <p><b>Warning:</b> only the {@code "%s"} specifier is recognized as a
+ * placeholder in these messages, not the full range of {@link
+ * String#format(String, Object[])} specifiers.
+ *
+ * <p>Take care not to confuse precondition checking with other similar types
+ * of checks! Precondition exceptions -- including those provided here, but also
+ * {@link IndexOutOfBoundsException}, {@link NoSuchElementException}, {@link
+ * UnsupportedOperationException} and others -- are used to signal that the
+ * <i>calling method</i> has made an error. This tells the caller that it should
+ * not have invoked the method when it did, with the arguments it did, or
+ * perhaps ever. Postcondition or other invariant failures should not throw
+ * these types of exceptions.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+public final class Preconditions {
+ private Preconditions() {}
+
+ /**
+ * Ensures the truth of an expression involving one or more parameters to the
+ * calling method.
+ *
+ * @param expression a boolean expression
+ * @throws IllegalArgumentException if {@code expression} is false
+ */
+ public static void checkArgument(boolean expression) {
+ if (!expression) {
+ throw new IllegalArgumentException();
+ }
+ }
+
+ /**
+ * Ensures the truth of an expression involving one or more parameters to the
+ * calling method.
+ *
+ * @param expression a boolean expression
+ * @param errorMessage the exception message to use if the check fails; will
+ * be converted to a string using {@link String#valueOf(Object)}
+ * @throws IllegalArgumentException if {@code expression} is false
+ */
+ public static void checkArgument(boolean expression, Object errorMessage) {
+ if (!expression) {
+ throw new IllegalArgumentException(String.valueOf(errorMessage));
+ }
+ }
+
+ /**
+ * Ensures the truth of an expression involving one or more parameters to the
+ * calling method.
+ *
+ * @param expression a boolean expression
+ * @param errorMessageTemplate a template for the exception message should the
+ * check fail. The message is formed by replacing each {@code %s}
+ * placeholder in the template with an argument. These are matched by
+ * position - the first {@code %s} gets {@code errorMessageArgs[0]}, etc.
+ * Unmatched arguments will be appended to the formatted message in square
+ * braces. Unmatched placeholders will be left as-is.
+ * @param errorMessageArgs the arguments to be substituted into the message
+ * template. Arguments are converted to strings using
+ * {@link String#valueOf(Object)}.
+ * @throws IllegalArgumentException if {@code expression} is false
+ * @throws NullPointerException if the check fails and either {@code
+ * errorMessageTemplate} or {@code errorMessageArgs} is null (don't let
+ * this happen)
+ */
+ public static void checkArgument(boolean expression,
+ String errorMessageTemplate, Object... errorMessageArgs) {
+ if (!expression) {
+ throw new IllegalArgumentException(
+ format(errorMessageTemplate, errorMessageArgs));
+ }
+ }
+
+ /**
+ * Ensures the truth of an expression involving the state of the calling
+ * instance, but not involving any parameters to the calling method.
+ *
+ * @param expression a boolean expression
+ * @throws IllegalStateException if {@code expression} is false
+ */
+ public static void checkState(boolean expression) {
+ if (!expression) {
+ throw new IllegalStateException();
+ }
+ }
+
+ /**
+ * Ensures the truth of an expression involving the state of the calling
+ * instance, but not involving any parameters to the calling method.
+ *
+ * @param expression a boolean expression
+ * @param errorMessage the exception message to use if the check fails; will
+ * be converted to a string using {@link String#valueOf(Object)}
+ * @throws IllegalStateException if {@code expression} is false
+ */
+ public static void checkState(boolean expression, Object errorMessage) {
+ if (!expression) {
+ throw new IllegalStateException(String.valueOf(errorMessage));
+ }
+ }
+
+ /**
+ * Ensures the truth of an expression involving the state of the calling
+ * instance, but not involving any parameters to the calling method.
+ *
+ * @param expression a boolean expression
+ * @param errorMessageTemplate a template for the exception message should the
+ * check fail. The message is formed by replacing each {@code %s}
+ * placeholder in the template with an argument. These are matched by
+ * position - the first {@code %s} gets {@code errorMessageArgs[0]}, etc.
+ * Unmatched arguments will be appended to the formatted message in square
+ * braces. Unmatched placeholders will be left as-is.
+ * @param errorMessageArgs the arguments to be substituted into the message
+ * template. Arguments are converted to strings using
+ * {@link String#valueOf(Object)}.
+ * @throws IllegalStateException if {@code expression} is false
+ * @throws NullPointerException if the check fails and either {@code
+ * errorMessageTemplate} or {@code errorMessageArgs} is null (don't let
+ * this happen)
+ */
+ public static void checkState(boolean expression,
+ String errorMessageTemplate, Object... errorMessageArgs) {
+ if (!expression) {
+ throw new IllegalStateException(
+ format(errorMessageTemplate, errorMessageArgs));
+ }
+ }
+
+ /**
+ * Ensures that an object reference passed as a parameter to the calling
+ * method is not null.
+ *
+ * @param reference an object reference
+ * @return the non-null reference that was validated
+ * @throws NullPointerException if {@code reference} is null
+ */
+ public static <T> T checkNotNull(T reference) {
+ if (reference == null) {
+ throw new NullPointerException();
+ }
+ return reference;
+ }
+
+ /**
+ * Ensures that an object reference passed as a parameter to the calling
+ * method is not null.
+ *
+ * @param reference an object reference
+ * @param errorMessage the exception message to use if the check fails; will
+ * be converted to a string using {@link String#valueOf(Object)}
+ * @return the non-null reference that was validated
+ * @throws NullPointerException if {@code reference} is null
+ */
+ public static <T> T checkNotNull(T reference, Object errorMessage) {
+ if (reference == null) {
+ throw new NullPointerException(String.valueOf(errorMessage));
+ }
+ return reference;
+ }
+
+ /**
+ * Ensures that an object reference passed as a parameter to the calling
+ * method is not null.
+ *
+ * @param reference an object reference
+ * @param errorMessageTemplate a template for the exception message should the
+ * check fail. The message is formed by replacing each {@code %s}
+ * placeholder in the template with an argument. These are matched by
+ * position - the first {@code %s} gets {@code errorMessageArgs[0]}, etc.
+ * Unmatched arguments will be appended to the formatted message in square
+ * braces. Unmatched placeholders will be left as-is.
+ * @param errorMessageArgs the arguments to be substituted into the message
+ * template. Arguments are converted to strings using
+ * {@link String#valueOf(Object)}.
+ * @return the non-null reference that was validated
+ * @throws NullPointerException if {@code reference} is null
+ */
+ public static <T> T checkNotNull(T reference, String errorMessageTemplate,
+ Object... errorMessageArgs) {
+ if (reference == null) {
+ // If either of these parameters is null, the right thing happens anyway
+ throw new NullPointerException(
+ format(errorMessageTemplate, errorMessageArgs));
+ }
+ return reference;
+ }
+
+ /**
+ * Ensures that {@code index} specifies a valid <i>element</i> in an array,
+ * list or string of size {@code size}. An element index may range from zero,
+ * inclusive, to {@code size}, exclusive.
+ *
+ * @param index a user-supplied index identifying an element of an array, list
+ * or string
+ * @param size the size of that array, list or string
+ * @return the value of {@code index}
+ * @throws IndexOutOfBoundsException if {@code index} is negative or is not
+ * less than {@code size}
+ * @throws IllegalArgumentException if {@code size} is negative
+ */
+ public static int checkElementIndex(int index, int size) {
+ return checkElementIndex(index, size, "index");
+ }
+
+ /**
+ * Ensures that {@code index} specifies a valid <i>element</i> in an array,
+ * list or string of size {@code size}. An element index may range from zero,
+ * inclusive, to {@code size}, exclusive.
+ *
+ * @param index a user-supplied index identifying an element of an array, list
+ * or string
+ * @param size the size of that array, list or string
+ * @param desc the text to use to describe this index in an error message
+ * @return the value of {@code index}
+ * @throws IndexOutOfBoundsException if {@code index} is negative or is not
+ * less than {@code size}
+ * @throws IllegalArgumentException if {@code size} is negative
+ */
+ public static int checkElementIndex(int index, int size, String desc) {
+ // Carefully optimized for execution by hotspot (explanatory comment above)
+ if (index < 0 || index >= size) {
+ throw new IndexOutOfBoundsException(badElementIndex(index, size, desc));
+ }
+ return index;
+ }
+
+ private static String badElementIndex(int index, int size, String desc) {
+ if (index < 0) {
+ return format("%s (%s) must not be negative", desc, index);
+ } else if (size < 0) {
+ throw new IllegalArgumentException("negative size: " + size);
+ } else { // index >= size
+ return format("%s (%s) must be less than size (%s)", desc, index, size);
+ }
+ }
+
+ /**
+ * Ensures that {@code index} specifies a valid <i>position</i> in an array,
+ * list or string of size {@code size}. A position index may range from zero
+ * to {@code size}, inclusive.
+ *
+ * @param index a user-supplied index identifying a position in an array, list
+ * or string
+ * @param size the size of that array, list or string
+ * @return the value of {@code index}
+ * @throws IndexOutOfBoundsException if {@code index} is negative or is
+ * greater than {@code size}
+ * @throws IllegalArgumentException if {@code size} is negative
+ */
+ public static int checkPositionIndex(int index, int size) {
+ return checkPositionIndex(index, size, "index");
+ }
+
+ /**
+ * Ensures that {@code index} specifies a valid <i>position</i> in an array,
+ * list or string of size {@code size}. A position index may range from zero
+ * to {@code size}, inclusive.
+ *
+ * @param index a user-supplied index identifying a position in an array, list
+ * or string
+ * @param size the size of that array, list or string
+ * @param desc the text to use to describe this index in an error message
+ * @return the value of {@code index}
+ * @throws IndexOutOfBoundsException if {@code index} is negative or is
+ * greater than {@code size}
+ * @throws IllegalArgumentException if {@code size} is negative
+ */
+ public static int checkPositionIndex(int index, int size, String desc) {
+ // Carefully optimized for execution by hotspot (explanatory comment above)
+ if (index < 0 || index > size) {
+ throw new IndexOutOfBoundsException(badPositionIndex(index, size, desc));
+ }
+ return index;
+ }
+
+ private static String badPositionIndex(int index, int size, String desc) {
+ if (index < 0) {
+ return format("%s (%s) must not be negative", desc, index);
+ } else if (size < 0) {
+ throw new IllegalArgumentException("negative size: " + size);
+ } else { // index > size
+ return format("%s (%s) must not be greater than size (%s)",
+ desc, index, size);
+ }
+ }
+
+ /**
+ * Ensures that {@code start} and {@code end} specify a valid <i>positions</i>
+ * in an array, list or string of size {@code size}, and are in order. A
+ * position index may range from zero to {@code size}, inclusive.
+ *
+ * @param start a user-supplied index identifying a starting position in an
+ * array, list or string
+ * @param end a user-supplied index identifying a ending position in an array,
+ * list or string
+ * @param size the size of that array, list or string
+ * @throws IndexOutOfBoundsException if either index is negative or is
+ * greater than {@code size}, or if {@code end} is less than {@code start}
+ * @throws IllegalArgumentException if {@code size} is negative
+ */
+ public static void checkPositionIndexes(int start, int end, int size) {
+ // Carefully optimized for execution by hotspot (explanatory comment above)
+ if (start < 0 || end < start || end > size) {
+ throw new IndexOutOfBoundsException(badPositionIndexes(start, end, size));
+ }
+ }
+
+ private static String badPositionIndexes(int start, int end, int size) {
+ if (start < 0 || start > size) {
+ return badPositionIndex(start, size, "start index");
+ }
+ if (end < 0 || end > size) {
+ return badPositionIndex(end, size, "end index");
+ }
+ // end < start
+ return format("end index (%s) must not be less than start index (%s)",
+ end, start);
+ }
+
+ /**
+ * Substitutes each {@code %s} in {@code template} with an argument. These
+ * are matched by position - the first {@code %s} gets {@code args[0]}, etc.
+ * If there are more arguments than placeholders, the unmatched arguments will
+ * be appended to the end of the formatted message in square braces.
+ *
+ * @param template a non-null string containing 0 or more {@code %s}
+ * placeholders.
+ * @param args the arguments to be substituted into the message
+ * template. Arguments are converted to strings using
+ * {@link String#valueOf(Object)}. Arguments can be null.
+ */
+ @VisibleForTesting static String format(String template, Object... args) {
+ // start substituting the arguments into the '%s' placeholders
+ StringBuilder builder = new StringBuilder(
+ template.length() + 16 * args.length);
+ int templateStart = 0;
+ int i = 0;
+ while (i < args.length) {
+ int placeholderStart = template.indexOf("%s", templateStart);
+ if (placeholderStart == -1) {
+ break;
+ }
+ builder.append(template.substring(templateStart, placeholderStart));
+ builder.append(args[i++]);
+ templateStart = placeholderStart + 2;
+ }
+ builder.append(template.substring(templateStart));
+
+ // if we run out of placeholders, append the extra args in square braces
+ if (i < args.length) {
+ builder.append(" [");
+ builder.append(args[i++]);
+ while (i < args.length) {
+ builder.append(", ");
+ builder.append(args[i++]);
+ }
+ builder.append("]");
+ }
+
+ return builder.toString();
+ }
+}
diff --git a/src/com/google/common/base/Predicate.java b/src/com/google/common/base/Predicate.java
new file mode 100644
index 0000000..9db3db2
--- /dev/null
+++ b/src/com/google/common/base/Predicate.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+
+import javax.annotation.Nullable;
+
+/**
+ * Determines a true or false value for a given input. For example, a
+ * {@code RegexPredicate} might implement {@code Predicate<String>}, and return
+ * {@code true} for any string that matches its given regular expression.
+ *
+ * <p>Implementations which may cause side effects upon evaluation are strongly
+ * encouraged to state this fact clearly in their API documentation.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+public interface Predicate<T> {
+
+ /*
+ * This interface does not extend Function<T, Boolean> because doing so would
+ * let predicates return null.
+ */
+
+ /**
+ * Applies this predicate to the given object.
+ *
+ * @param input the input that the predicate should act on
+ * @return the value of this predicate when applied to the input {@code t}
+ */
+ boolean apply(@Nullable T input);
+
+ /**
+ * Indicates whether some other object is equal to this {@code Predicate}.
+ * This method can return {@code true} <i>only</i> if the specified object is
+ * also a {@code Predicate} and, for every input object {@code input}, it
+ * returns exactly the same value. Thus, {@code predicate1.equals(predicate2)}
+ * implies that either {@code predicate1.apply(input)} and
+ * {@code predicate2.apply(input)} are both {@code true} or both
+ * {@code false}.
+ *
+ * <p>Note that it is always safe <i>not</i> to override
+ * {@link Object#equals}.
+ */
+ boolean equals(@Nullable Object obj);
+}
diff --git a/src/com/google/common/base/Predicates.java b/src/com/google/common/base/Predicates.java
new file mode 100644
index 0000000..6a2c1f0
--- /dev/null
+++ b/src/com/google/common/base/Predicates.java
@@ -0,0 +1,554 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+/**
+ * Contains static factory methods for creating {@code Predicate} instances.
+ *
+ * <p>All methods returns serializable predicates as long as they're given
+ * serializable parameters.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+public final class Predicates {
+ private Predicates() {}
+
+ // TODO: considering having these implement a VisitablePredicate interface
+ // which specifies an accept(PredicateVisitor) method.
+
+ /**
+ * Returns a predicate that always evaluates to {@code true}.
+ */
+ @GwtCompatible(serializable = true)
+ @SuppressWarnings("unchecked")
+ public static <T> Predicate<T> alwaysTrue() {
+ return (Predicate<T>) AlwaysTruePredicate.INSTANCE;
+ }
+
+ /**
+ * Returns a predicate that always evaluates to {@code false}.
+ */
+ @GwtCompatible(serializable = true)
+ @SuppressWarnings("unchecked")
+ public static <T> Predicate<T> alwaysFalse() {
+ return (Predicate<T>) AlwaysFalsePredicate.INSTANCE;
+ }
+
+ /**
+ * Returns a predicate that evaluates to {@code true} if the object reference
+ * being tested is null.
+ */
+ @SuppressWarnings("unchecked")
+ public static <T> Predicate<T> isNull() {
+ return (Predicate<T>) IsNullPredicate.INSTANCE;
+ }
+
+ /**
+ * Returns a predicate that evaluates to {@code true} if the object reference
+ * being tested is not null.
+ */
+ @SuppressWarnings("unchecked")
+ public static <T> Predicate<T> notNull() {
+ return (Predicate<T>) NotNullPredicate.INSTANCE;
+ }
+
+ /**
+ * Returns a predicate that evaluates to {@code true} if the given predicate
+ * evaluates to {@code false}.
+ */
+ public static <T> Predicate<T> not(Predicate<T> predicate) {
+ return new NotPredicate<T>(predicate);
+ }
+
+ /**
+ * Returns a predicate that evaluates to {@code true} if each of its
+ * components evaluates to {@code true}. The components are evaluated in
+ * order, and evaluation will be "short-circuited" as soon as a false
+ * predicate is found. It defensively copies the iterable passed in, so future
+ * changes to it won't alter the behavior of this predicate. If {@code
+ * components} is empty, the returned predicate will always evaluate to {@code
+ * true}.
+ */
+ public static <T> Predicate<T> and(
+ Iterable<? extends Predicate<? super T>> components) {
+ return new AndPredicate<T>(defensiveCopy(components));
+ }
+
+ /**
+ * Returns a predicate that evaluates to {@code true} if each of its
+ * components evaluates to {@code true}. The components are evaluated in
+ * order, and evaluation will be "short-circuited" as soon as a false
+ * predicate is found. It defensively copies the array passed in, so future
+ * changes to it won't alter the behavior of this predicate. If {@code
+ * components} is empty, the returned predicate will always evaluate to {@code
+ * true}.
+ */
+ public static <T> Predicate<T> and(Predicate<? super T>... components) {
+ return new AndPredicate<T>(defensiveCopy(components));
+ }
+
+ /**
+ * Returns a predicate that evaluates to {@code true} if both of its
+ * components evaluate to {@code true}. The components are evaluated in
+ * order, and evaluation will be "short-circuited" as soon as a false
+ * predicate is found.
+ */
+ public static <T> Predicate<T> and(Predicate<? super T> first,
+ Predicate<? super T> second) {
+ return new AndPredicate<T>(Predicates.<T>asList(
+ checkNotNull(first), checkNotNull(second)));
+ }
+
+ /**
+ * Returns a predicate that evaluates to {@code true} if any one of its
+ * components evaluates to {@code true}. The components are evaluated in
+ * order, and evaluation will be "short-circuited" as soon as as soon as a
+ * true predicate is found. It defensively copies the iterable passed in, so
+ * future changes to it won't alter the behavior of this predicate. If {@code
+ * components} is empty, the returned predicate will always evaluate to {@code
+ * false}.
+ */
+ public static <T> Predicate<T> or(
+ Iterable<? extends Predicate<? super T>> components) {
+ return new OrPredicate<T>(defensiveCopy(components));
+ }
+
+ /**
+ * Returns a predicate that evaluates to {@code true} if any one of its
+ * components evaluates to {@code true}. The components are evaluated in
+ * order, and evaluation will be "short-circuited" as soon as as soon as a
+ * true predicate is found. It defensively copies the array passed in, so
+ * future changes to it won't alter the behavior of this predicate. If {@code
+ * components} is empty, the returned predicate will always evaluate to {@code
+ * false}.
+ */
+ public static <T> Predicate<T> or(Predicate<? super T>... components) {
+ return new OrPredicate<T>(defensiveCopy(components));
+ }
+
+ /**
+ * Returns a predicate that evaluates to {@code true} if either of its
+ * components evaluates to {@code true}. The components are evaluated in
+ * order, and evaluation will be "short-circuited" as soon as as soon as a
+ * true predicate is found.
+ */
+ public static <T> Predicate<T> or(Predicate<? super T> first,
+ Predicate<? super T> second) {
+ return new OrPredicate<T>(Predicates.<T>asList(
+ checkNotNull(first), checkNotNull(second)));
+ }
+
+ /**
+ * Returns a predicate that evaluates to {@code true} if the object being
+ * tested {@code equals()} the given target or both are null.
+ */
+ public static <T> Predicate<T> equalTo(@Nullable T target) {
+ // TODO: Change signature to return Predicate<Object>.
+ return (target == null)
+ ? Predicates.<T>isNull()
+ : new IsEqualToPredicate<T>(target);
+ }
+
+ /**
+ * Returns a predicate that evaluates to {@code true} if the object being
+ * tested is an instance of the given class. If the object being tested
+ * is {@code null} this predicate evaluates to {@code false}.
+ *
+ * <p>If you want to filter an {@code Iterable} to narrow its type, consider
+ * using {@link com.google.common.collect.Iterables#filter(Iterable, Class)}
+ * in preference.
+ */
+ @GwtIncompatible("Class.isInstance")
+ public static Predicate<Object> instanceOf(Class<?> clazz) {
+ return new InstanceOfPredicate(clazz);
+ }
+
+ /**
+ * Returns a predicate that evaluates to {@code true} if the object reference
+ * being tested is a member of the given collection. It does not defensively
+ * copy the collection passed in, so future changes to it will alter the
+ * behavior of the predicate.
+ *
+ * This method can technically accept any Collection<?>, but using a typed
+ * collection helps prevent bugs. This approach doesn't block any potential
+ * users since it is always possible to use {@code Predicates.<Object>in()}.
+ *
+ * @param target the collection that may contain the function input
+ */
+ public static <T> Predicate<T> in(Collection<? extends T> target) {
+ return new InPredicate<T>(target);
+ }
+
+ /**
+ * Returns the composition of a function and a predicate. For every {@code x},
+ * the generated predicate returns {@code predicate(function(x))}.
+ *
+ * @return the composition of the provided function and predicate
+ */
+ public static <A, B> Predicate<A> compose(
+ Predicate<B> predicate, Function<A, ? extends B> function) {
+ return new CompositionPredicate<A, B>(predicate, function);
+ }
+
+ /** @see Predicates#alwaysTrue() */
+ // Package private for GWT serialization.
+ enum AlwaysTruePredicate implements Predicate<Object> {
+ INSTANCE;
+
+ public boolean apply(Object o) {
+ return true;
+ }
+ @Override public String toString() {
+ return "AlwaysTrue";
+ }
+ }
+
+ /** @see Predicates#alwaysFalse() */
+ // Package private for GWT serialization.
+ enum AlwaysFalsePredicate implements Predicate<Object> {
+ INSTANCE;
+
+ public boolean apply(Object o) {
+ return false;
+ }
+ @Override public String toString() {
+ return "AlwaysFalse";
+ }
+ }
+
+ /** @see Predicates#not(Predicate) */
+ private static class NotPredicate<T>
+ implements Predicate<T>, Serializable {
+ private final Predicate<T> predicate;
+
+ private NotPredicate(Predicate<T> predicate) {
+ this.predicate = checkNotNull(predicate);
+ }
+ public boolean apply(T t) {
+ return !predicate.apply(t);
+ }
+ @Override public int hashCode() {
+ return ~predicate.hashCode(); /* Invert all bits. */
+ }
+ @Override public boolean equals(Object obj) {
+ if (obj instanceof NotPredicate<?>) {
+ NotPredicate<?> that = (NotPredicate<?>) obj;
+ return predicate.equals(that.predicate);
+ }
+ return false;
+ }
+ @Override public String toString() {
+ return "Not(" + predicate.toString() + ")";
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ private static final Joiner commaJoiner = Joiner.on(",");
+
+ /** @see Predicates#and(Iterable) */
+ private static class AndPredicate<T>
+ implements Predicate<T>, Serializable {
+ private final Iterable<? extends Predicate<? super T>> components;
+
+ private AndPredicate(Iterable<? extends Predicate<? super T>> components) {
+ this.components = components;
+ }
+ public boolean apply(T t) {
+ for (Predicate<? super T> predicate : components) {
+ if (!predicate.apply(t)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ @Override public int hashCode() {
+ int result = -1; /* Start with all bits on. */
+ for (Predicate<? super T> predicate : components) {
+ result &= predicate.hashCode();
+ }
+ return result;
+ }
+ @Override public boolean equals(Object obj) {
+ if (obj instanceof AndPredicate<?>) {
+ AndPredicate<?> that = (AndPredicate<?>) obj;
+ return iterableElementsEqual(components, that.components);
+ }
+ return false;
+ }
+ @Override public String toString() {
+ return "And(" + commaJoiner.join(components) + ")";
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ /** @see Predicates#or(Iterable) */
+ private static class OrPredicate<T>
+ implements Predicate<T>, Serializable {
+ private final Iterable<? extends Predicate<? super T>> components;
+
+ private OrPredicate(Iterable<? extends Predicate<? super T>> components) {
+ this.components = components;
+ }
+ public boolean apply(T t) {
+ for (Predicate<? super T> predicate : components) {
+ if (predicate.apply(t)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ @Override public int hashCode() {
+ int result = 0; /* Start with all bits off. */
+ for (Predicate<? super T> predicate : components) {
+ result |= predicate.hashCode();
+ }
+ return result;
+ }
+ @Override public boolean equals(Object obj) {
+ if (obj instanceof OrPredicate<?>) {
+ OrPredicate<?> that = (OrPredicate<?>) obj;
+ return iterableElementsEqual(components, that.components);
+ }
+ return false;
+ }
+ @Override public String toString() {
+ return "Or(" + commaJoiner.join(components) + ")";
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ /** @see Predicates#equalTo(Object) */
+ private static class IsEqualToPredicate<T>
+ implements Predicate<T>, Serializable {
+ private final T target;
+
+ private IsEqualToPredicate(T target) {
+ this.target = target;
+ }
+ public boolean apply(T t) {
+ return target.equals(t);
+ }
+ @Override public int hashCode() {
+ return target.hashCode();
+ }
+ @Override public boolean equals(Object obj) {
+ if (obj instanceof IsEqualToPredicate) {
+ IsEqualToPredicate<?> that = (IsEqualToPredicate<?>) obj;
+ return target.equals(that.target);
+ }
+ return false;
+ }
+ @Override public String toString() {
+ return "IsEqualTo(" + target + ")";
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ /** @see Predicates#instanceOf(Class) */
+ private static class InstanceOfPredicate
+ implements Predicate<Object>, Serializable {
+ private final Class<?> clazz;
+
+ private InstanceOfPredicate(Class<?> clazz) {
+ this.clazz = checkNotNull(clazz);
+ }
+ public boolean apply(Object o) {
+ return Platform.isInstance(clazz, o);
+ }
+ @Override public int hashCode() {
+ return clazz.hashCode();
+ }
+ @Override public boolean equals(Object obj) {
+ if (obj instanceof InstanceOfPredicate) {
+ InstanceOfPredicate that = (InstanceOfPredicate) obj;
+ return clazz == that.clazz;
+ }
+ return false;
+ }
+ @Override public String toString() {
+ return "IsInstanceOf(" + clazz.getName() + ")";
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ /** @see Predicates#isNull() */
+ // enum singleton pattern
+ private enum IsNullPredicate implements Predicate<Object> {
+ INSTANCE;
+
+ public boolean apply(Object o) {
+ return o == null;
+ }
+ @Override public String toString() {
+ return "IsNull";
+ }
+ }
+
+ /** @see Predicates#notNull() */
+ // enum singleton pattern
+ private enum NotNullPredicate implements Predicate<Object> {
+ INSTANCE;
+
+ public boolean apply(Object o) {
+ return o != null;
+ }
+ @Override public String toString() {
+ return "NotNull";
+ }
+ }
+
+ /** @see Predicates#in(Collection) */
+ private static class InPredicate<T>
+ implements Predicate<T>, Serializable {
+ private final Collection<?> target;
+
+ private InPredicate(Collection<?> target) {
+ this.target = checkNotNull(target);
+ }
+
+ public boolean apply(T t) {
+ try {
+ return target.contains(t);
+ } catch (NullPointerException e) {
+ return false;
+ } catch (ClassCastException e) {
+ return false;
+ }
+ }
+
+ @Override public boolean equals(Object obj) {
+ if (obj instanceof InPredicate<?>) {
+ InPredicate<?> that = (InPredicate<?>) obj;
+ return target.equals(that.target);
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ return target.hashCode();
+ }
+
+ @Override public String toString() {
+ return "In(" + target + ")";
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ /** @see Predicates#compose(Predicate, Function) */
+ private static class CompositionPredicate<A, B>
+ implements Predicate<A>, Serializable {
+ final Predicate<B> p;
+ final Function<A, ? extends B> f;
+
+ private CompositionPredicate(Predicate<B> p, Function<A, ? extends B> f) {
+ this.p = checkNotNull(p);
+ this.f = checkNotNull(f);
+ }
+
+ public boolean apply(A a) {
+ return p.apply(f.apply(a));
+ }
+
+ @Override public boolean equals(Object obj) {
+ if (obj instanceof CompositionPredicate<?, ?>) {
+ CompositionPredicate<?, ?> that = (CompositionPredicate<?, ?>) obj;
+ return f.equals(that.f) && p.equals(that.p);
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ /*
+ * TODO: To leave the door open for future enhancement, this
+ * calculation should be coordinated with the hashCode() method of the
+ * corresponding composition method in Functions. To construct the
+ * composition:
+ * predicate(function2(function1(x)))
+ *
+ * There are two different ways of composing it:
+ * compose(predicate, compose(function2, function1))
+ * compose(compose(predicate, function2), function1)
+ *
+ * It would be nice if these could be equal.
+ */
+ return f.hashCode() ^ p.hashCode();
+ }
+
+ @Override public String toString() {
+ return p.toString() + "(" + f.toString() + ")";
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Determines whether the two Iterables contain equal elements. More
+ * specifically, this method returns {@code true} if {@code iterable1} and
+ * {@code iterable2} contain the same number of elements and every element of
+ * {@code iterable1} is equal to the corresponding element of {@code
+ * iterable2}.
+ *
+ * <p>This is not a general-purpose method; it assumes that the iterations
+ * contain no {@code null} elements.
+ */
+ private static boolean iterableElementsEqual(
+ Iterable<?> iterable1, Iterable<?> iterable2) {
+ Iterator<?> iterator1 = iterable1.iterator();
+ Iterator<?> iterator2 = iterable2.iterator();
+ while (iterator1.hasNext()) {
+ if (!iterator2.hasNext()) {
+ return false;
+ }
+ if (!iterator1.next().equals(iterator2.next())) {
+ return false;
+ }
+ }
+ return !iterator2.hasNext();
+ }
+
+ @SuppressWarnings("unchecked")
+ private static <T> List<Predicate<? super T>> asList(
+ Predicate<? super T> first, Predicate<? super T> second) {
+ return Arrays.<Predicate<? super T>>asList(first, second);
+ }
+
+ private static <T> List<T> defensiveCopy(T... array) {
+ return defensiveCopy(Arrays.asList(array));
+ }
+
+ static <T> List<T> defensiveCopy(Iterable<T> iterable) {
+ ArrayList<T> list = new ArrayList<T>();
+ for (T element : iterable) {
+ list.add(checkNotNull(element));
+ }
+ return list;
+ }
+}
diff --git a/src/com/google/common/base/Supplier.java b/src/com/google/common/base/Supplier.java
new file mode 100644
index 0000000..213e672
--- /dev/null
+++ b/src/com/google/common/base/Supplier.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * A class that can supply objects of a single type. Semantically, this could
+ * be a factory, generator, builder, closure, or something else entirely. No
+ * guarantees are implied by this interface.
+ *
+ * @author Harry Heymann
+ */
+@GwtCompatible
+public interface Supplier<T> {
+ /**
+ * Retrieves an instance of the appropriate type. The returned object may or
+ * may not be a new instance, depending on the implementation.
+ *
+ * @return an instance of the appropriate type
+ */
+ public T get();
+}
diff --git a/src/com/google/common/base/Suppliers.java b/src/com/google/common/base/Suppliers.java
new file mode 100644
index 0000000..8973b66
--- /dev/null
+++ b/src/com/google/common/base/Suppliers.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.VisibleForTesting;
+
+import java.io.Serializable;
+
+import javax.annotation.Nullable;
+
+/**
+ * Useful suppliers.
+ *
+ * <p>All methods return serializable suppliers as long as they're given
+ * serializable parameters.
+ *
+ * @author Laurence Gonsalves
+ * @author Harry Heymann
+ */
+public final class Suppliers {
+ private Suppliers() {}
+
+ /**
+ * Returns a new supplier which is the composition of the provided function
+ * and supplier. In other words, the new supplier's value will be computed by
+ * retrieving the value from {@code first}, and then applying
+ * {@code function} to that value. Note that the resulting supplier will not
+ * call {@code first} or invoke {@code function} until it is called.
+ */
+ public static <F, T> Supplier<T> compose(
+ Function<? super F, T> function, Supplier<F> first) {
+ Preconditions.checkNotNull(function);
+ Preconditions.checkNotNull(first);
+ return new SupplierComposition<F, T>(function, first);
+ }
+
+ private static class SupplierComposition<F, T>
+ implements Supplier<T>, Serializable {
+ final Function<? super F, ? extends T> function;
+ final Supplier<? extends F> first;
+
+ SupplierComposition(Function<? super F, ? extends T> function,
+ Supplier<? extends F> first) {
+ this.function = function;
+ this.first = first;
+ }
+ public T get() {
+ return function.apply(first.get());
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Returns a supplier which caches the instance retrieved during the first
+ * call to {@code get()} and returns that value on subsequent calls to
+ * {@code get()}. See:
+ * <a href="http://en.wikipedia.org/wiki/Memoization">memoization</a>
+ *
+ * <p>The returned supplier is thread-safe. The supplier's serialized form
+ * does not contain the cached value, which will be recalculated when {@code
+ * get()} is called on the reserialized instance.
+ */
+ public static <T> Supplier<T> memoize(Supplier<T> delegate) {
+ return new MemoizingSupplier<T>(Preconditions.checkNotNull(delegate));
+ }
+
+ @VisibleForTesting static class MemoizingSupplier<T>
+ implements Supplier<T>, Serializable {
+ final Supplier<T> delegate;
+ transient boolean initialized;
+ transient T value;
+
+ MemoizingSupplier(Supplier<T> delegate) {
+ this.delegate = delegate;
+ }
+
+ public synchronized T get() {
+ if (!initialized) {
+ value = delegate.get();
+ initialized = true;
+ }
+ return value;
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Returns a supplier that always supplies {@code instance}.
+ */
+ public static <T> Supplier<T> ofInstance(@Nullable T instance) {
+ return new SupplierOfInstance<T>(instance);
+ }
+
+ private static class SupplierOfInstance<T>
+ implements Supplier<T>, Serializable {
+ final T instance;
+
+ SupplierOfInstance(T instance) {
+ this.instance = instance;
+ }
+ public T get() {
+ return instance;
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Returns a supplier whose {@code get()} method synchronizes on
+ * {@code delegate} before calling it, making it thread-safe.
+ */
+ public static <T> Supplier<T> synchronizedSupplier(Supplier<T> delegate) {
+ return new ThreadSafeSupplier<T>(Preconditions.checkNotNull(delegate));
+ }
+
+ private static class ThreadSafeSupplier<T>
+ implements Supplier<T>, Serializable {
+ final Supplier<T> delegate;
+
+ ThreadSafeSupplier(Supplier<T> delegate) {
+ this.delegate = delegate;
+ }
+ public T get() {
+ synchronized (delegate) {
+ return delegate.get();
+ }
+ }
+ private static final long serialVersionUID = 0;
+ }
+}
diff --git a/src/com/google/common/base/internal/Finalizer.java b/src/com/google/common/base/internal/Finalizer.java
new file mode 100644
index 0000000..c517589
--- /dev/null
+++ b/src/com/google/common/base/internal/Finalizer.java
@@ -0,0 +1,207 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.base.internal;
+
+import java.lang.ref.PhantomReference;
+import java.lang.ref.Reference;
+import java.lang.ref.ReferenceQueue;
+import java.lang.ref.WeakReference;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Thread that finalizes referents. All references should implement
+ * {@code com.google.common.base.FinalizableReference}.
+ *
+ * <p>While this class is public, we consider it to be *internal* and not part
+ * of our published API. It is public so we can access it reflectively across
+ * class loaders in secure environments.
+ *
+ * <p>This class can't depend on other Google Collections code. If we were
+ * to load this class in the same class loader as the rest of
+ * Google Collections, this thread would keep an indirect strong reference
+ * to the class loader and prevent it from being garbage collected. This
+ * poses a problem for environments where you want to throw away the class
+ * loader. For example, dynamically reloading a web application or unloading
+ * an OSGi bundle.
+ *
+ * <p>{@code com.google.common.base.FinalizableReferenceQueue} loads this class
+ * in its own class loader. That way, this class doesn't prevent the main
+ * class loader from getting garbage collected, and this class can detect when
+ * the main class loader has been garbage collected and stop itself.
+ */
+public class Finalizer extends Thread {
+
+ private static final Logger logger
+ = Logger.getLogger(Finalizer.class.getName());
+
+ /** Name of FinalizableReference.class. */
+ private static final String FINALIZABLE_REFERENCE
+ = "com.google.common.base.FinalizableReference";
+
+ /**
+ * Starts the Finalizer thread. FinalizableReferenceQueue calls this method
+ * reflectively.
+ *
+ * @param finalizableReferenceClass FinalizableReference.class
+ * @param frq reference to instance of FinalizableReferenceQueue that started
+ * this thread
+ * @return ReferenceQueue which Finalizer will poll
+ */
+ public static ReferenceQueue<Object> startFinalizer(
+ Class<?> finalizableReferenceClass, Object frq) {
+ /*
+ * We use FinalizableReference.class for two things:
+ *
+ * 1) To invoke FinalizableReference.finalizeReferent()
+ *
+ * 2) To detect when FinalizableReference's class loader has to be garbage
+ * collected, at which point, Finalizer can stop running
+ */
+ if (!finalizableReferenceClass.getName().equals(FINALIZABLE_REFERENCE)) {
+ throw new IllegalArgumentException(
+ "Expected " + FINALIZABLE_REFERENCE + ".");
+ }
+
+ Finalizer finalizer = new Finalizer(finalizableReferenceClass, frq);
+ finalizer.start();
+ return finalizer.queue;
+ }
+
+ private final WeakReference<Class<?>> finalizableReferenceClassReference;
+ private final PhantomReference<Object> frqReference;
+ private final ReferenceQueue<Object> queue = new ReferenceQueue<Object>();
+
+ private static final Field inheritableThreadLocals
+ = getInheritableThreadLocalsField();
+
+ /** Constructs a new finalizer thread. */
+ private Finalizer(Class<?> finalizableReferenceClass, Object frq) {
+ super(Finalizer.class.getName());
+
+ this.finalizableReferenceClassReference
+ = new WeakReference<Class<?>>(finalizableReferenceClass);
+
+ // Keep track of the FRQ that started us so we know when to stop.
+ this.frqReference = new PhantomReference<Object>(frq, queue);
+
+ setDaemon(true);
+
+ try {
+ if (inheritableThreadLocals != null) {
+ inheritableThreadLocals.set(this, null);
+ }
+ } catch (Throwable t) {
+ logger.log(Level.INFO, "Failed to clear thread local values inherited"
+ + " by reference finalizer thread.", t);
+ }
+
+ // TODO: Priority?
+ }
+
+ /**
+ * Loops continuously, pulling references off the queue and cleaning them up.
+ */
+ @SuppressWarnings("InfiniteLoopStatement")
+ @Override
+ public void run() {
+ try {
+ while (true) {
+ try {
+ cleanUp(queue.remove());
+ } catch (InterruptedException e) { /* ignore */ }
+ }
+ } catch (ShutDown shutDown) { /* ignore */ }
+ }
+
+ /**
+ * Cleans up a single reference. Catches and logs all throwables.
+ */
+ private void cleanUp(Reference<?> reference) throws ShutDown {
+ Method finalizeReferentMethod = getFinalizeReferentMethod();
+ do {
+ /*
+ * This is for the benefit of phantom references. Weak and soft
+ * references will have already been cleared by this point.
+ */
+ reference.clear();
+
+ if (reference == frqReference) {
+ /*
+ * The client no longer has a reference to the
+ * FinalizableReferenceQueue. We can stop.
+ */
+ throw new ShutDown();
+ }
+
+ try {
+ finalizeReferentMethod.invoke(reference);
+ } catch (Throwable t) {
+ logger.log(Level.SEVERE, "Error cleaning up after reference.", t);
+ }
+
+ /*
+ * Loop as long as we have references available so as not to waste
+ * CPU looking up the Method over and over again.
+ */
+ } while ((reference = queue.poll()) != null);
+ }
+
+ /**
+ * Looks up FinalizableReference.finalizeReferent() method.
+ */
+ private Method getFinalizeReferentMethod() throws ShutDown {
+ Class<?> finalizableReferenceClass
+ = finalizableReferenceClassReference.get();
+ if (finalizableReferenceClass == null) {
+ /*
+ * FinalizableReference's class loader was reclaimed. While there's a
+ * chance that other finalizable references could be enqueued
+ * subsequently (at which point the class loader would be resurrected
+ * by virtue of us having a strong reference to it), we should pretty
+ * much just shut down and make sure we don't keep it alive any longer
+ * than necessary.
+ */
+ throw new ShutDown();
+ }
+ try {
+ return finalizableReferenceClass.getMethod("finalizeReferent");
+ } catch (NoSuchMethodException e) {
+ throw new AssertionError(e);
+ }
+ }
+
+ public static Field getInheritableThreadLocalsField() {
+ try {
+ Field inheritableThreadLocals
+ = Thread.class.getDeclaredField("inheritableThreadLocals");
+ inheritableThreadLocals.setAccessible(true);
+ return inheritableThreadLocals;
+ } catch (Throwable t) {
+ logger.log(Level.INFO, "Couldn't access Thread.inheritableThreadLocals."
+ + " Reference finalizer threads will inherit thread local"
+ + " values.");
+ return null;
+ }
+ }
+
+ /** Indicates that it's time to shut down the Finalizer. */
+ @SuppressWarnings("serial") // Never serialized or thrown out of this class.
+ private static class ShutDown extends Exception { }
+}
diff --git a/src/com/google/common/base/package-info.java b/src/com/google/common/base/package-info.java
new file mode 100644
index 0000000..9cfa5c7
--- /dev/null
+++ b/src/com/google/common/base/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Miscellaneous common util classes and annotations.
+ */
+package com.google.common.base;
diff --git a/src/com/google/common/collect/AbstractBiMap.java b/src/com/google/common/collect/AbstractBiMap.java
new file mode 100644
index 0000000..9c0170f
--- /dev/null
+++ b/src/com/google/common/collect/AbstractBiMap.java
@@ -0,0 +1,394 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Objects;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkState;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * A general-purpose bimap implementation using any two backing {@code Map}
+ * instances.
+ *
+ * <p>Note that this class contains {@code equals()} calls that keep it from
+ * supporting {@code IdentityHashMap} backing maps.
+ *
+ * @author Kevin Bourrillion
+ * @author Mike Bostock
+ */
+@GwtCompatible
+abstract class AbstractBiMap<K, V> extends ForwardingMap<K, V>
+ implements BiMap<K, V>, Serializable {
+
+ private transient Map<K, V> delegate;
+ private transient AbstractBiMap<V, K> inverse;
+
+ /** Package-private constructor for creating a map-backed bimap. */
+ AbstractBiMap(Map<K, V> forward, Map<V, K> backward) {
+ setDelegates(forward, backward);
+ }
+
+ /** Private constructor for inverse bimap. */
+ private AbstractBiMap(Map<K, V> backward, AbstractBiMap<V, K> forward) {
+ delegate = backward;
+ inverse = forward;
+ }
+
+ @Override protected Map<K, V> delegate() {
+ return delegate;
+ }
+
+ /**
+ * Specifies the delegate maps going in each direction. Called by the
+ * constructor and by subclasses during deserialization.
+ */
+ void setDelegates(Map<K, V> forward, Map<V, K> backward) {
+ checkState(delegate == null);
+ checkState(inverse == null);
+ checkArgument(forward.isEmpty());
+ checkArgument(backward.isEmpty());
+ checkArgument(forward != backward);
+ delegate = forward;
+ inverse = new Inverse<V, K>(backward, this);
+ }
+
+ void setInverse(AbstractBiMap<V, K> inverse) {
+ this.inverse = inverse;
+ }
+
+ // Query Operations (optimizations)
+
+ @Override public boolean containsValue(Object value) {
+ return inverse.containsKey(value);
+ }
+
+ // Modification Operations
+
+ @Override public V put(K key, V value) {
+ return putInBothMaps(key, value, false);
+ }
+
+ public V forcePut(K key, V value) {
+ return putInBothMaps(key, value, true);
+ }
+
+ private V putInBothMaps(@Nullable K key, @Nullable V value, boolean force) {
+ boolean containedKey = containsKey(key);
+ if (containedKey && Objects.equal(value, get(key))) {
+ return value;
+ }
+ if (force) {
+ inverse().remove(value);
+ } else {
+ checkArgument(!containsValue(value), "value already present: %s", value);
+ }
+ V oldValue = delegate.put(key, value);
+ updateInverseMap(key, containedKey, oldValue, value);
+ return oldValue;
+ }
+
+ private void updateInverseMap(
+ K key, boolean containedKey, V oldValue, V newValue) {
+ if (containedKey) {
+ removeFromInverseMap(oldValue);
+ }
+ inverse.delegate.put(newValue, key);
+ }
+
+ @Override public V remove(Object key) {
+ return containsKey(key) ? removeFromBothMaps(key) : null;
+ }
+
+ private V removeFromBothMaps(Object key) {
+ V oldValue = delegate.remove(key);
+ removeFromInverseMap(oldValue);
+ return oldValue;
+ }
+
+ private void removeFromInverseMap(V oldValue) {
+ inverse.delegate.remove(oldValue);
+ }
+
+ // Bulk Operations
+
+ @Override public void putAll(Map<? extends K, ? extends V> map) {
+ for (Entry<? extends K, ? extends V> entry : map.entrySet()) {
+ put(entry.getKey(), entry.getValue());
+ }
+ }
+
+ @Override public void clear() {
+ delegate.clear();
+ inverse.delegate.clear();
+ }
+
+ // Views
+
+ public BiMap<V, K> inverse() {
+ return inverse;
+ }
+
+ private transient Set<K> keySet;
+
+ @Override public Set<K> keySet() {
+ Set<K> result = keySet;
+ return (result == null) ? keySet = new KeySet() : result;
+ }
+
+ private class KeySet extends ForwardingSet<K> {
+ @Override protected Set<K> delegate() {
+ return delegate.keySet();
+ }
+
+ @Override public void clear() {
+ AbstractBiMap.this.clear();
+ }
+
+ @Override public boolean remove(Object key) {
+ if (!contains(key)) {
+ return false;
+ }
+ removeFromBothMaps(key);
+ return true;
+ }
+
+ @Override public boolean removeAll(Collection<?> keysToRemove) {
+ return Iterators.removeAll(iterator(), keysToRemove);
+ }
+
+ @Override public boolean retainAll(Collection<?> keysToRetain) {
+ return Iterators.retainAll(iterator(), keysToRetain);
+ }
+
+ @Override public Iterator<K> iterator() {
+ final Iterator<Entry<K, V>> iterator = delegate.entrySet().iterator();
+ return new Iterator<K>() {
+ Entry<K, V> entry;
+
+ public boolean hasNext() {
+ return iterator.hasNext();
+ }
+ public K next() {
+ entry = iterator.next();
+ return entry.getKey();
+ }
+ public void remove() {
+ checkState(entry != null);
+ V value = entry.getValue();
+ iterator.remove();
+ removeFromInverseMap(value);
+ }
+ };
+ }
+ }
+
+ private transient Set<V> valueSet;
+
+ @Override public Set<V> values() {
+ /*
+ * We can almost reuse the inverse's keySet, except we have to fix the
+ * iteration order so that it is consistent with the forward map.
+ */
+ Set<V> result = valueSet;
+ return (result == null) ? valueSet = new ValueSet() : result;
+ }
+
+ private class ValueSet extends ForwardingSet<V> {
+ final Set<V> valuesDelegate = inverse.keySet();
+
+ @Override protected Set<V> delegate() {
+ return valuesDelegate;
+ }
+
+ @Override public Iterator<V> iterator() {
+ final Iterator<V> iterator = delegate.values().iterator();
+ return new Iterator<V>() {
+ V valueToRemove;
+
+ /*@Override*/ public boolean hasNext() {
+ return iterator.hasNext();
+ }
+
+ /*@Override*/ public V next() {
+ return valueToRemove = iterator.next();
+ }
+
+ /*@Override*/ public void remove() {
+ iterator.remove();
+ removeFromInverseMap(valueToRemove);
+ }
+ };
+ }
+
+ @Override public Object[] toArray() {
+ return ObjectArrays.toArrayImpl(this);
+ }
+
+ @Override public <T> T[] toArray(T[] array) {
+ return ObjectArrays.toArrayImpl(this, array);
+ }
+
+ @Override public String toString() {
+ return Iterators.toString(iterator());
+ }
+ }
+
+ private transient Set<Entry<K, V>> entrySet;
+
+ @Override public Set<Entry<K, V>> entrySet() {
+ Set<Entry<K, V>> result = entrySet;
+ return (result == null) ? entrySet = new EntrySet() : result;
+ }
+
+ private class EntrySet extends ForwardingSet<Entry<K, V>> {
+ final Set<Entry<K, V>> esDelegate = delegate.entrySet();
+
+ @Override protected Set<Entry<K, V>> delegate() {
+ return esDelegate;
+ }
+
+ @Override public void clear() {
+ AbstractBiMap.this.clear();
+ }
+
+ @Override public boolean remove(Object object) {
+ if (!esDelegate.remove(object)) {
+ return false;
+ }
+ Entry<?, ?> entry = (Entry<?, ?>) object;
+ inverse.delegate.remove(entry.getValue());
+ return true;
+ }
+
+ @Override public Iterator<Entry<K, V>> iterator() {
+ final Iterator<Entry<K, V>> iterator = esDelegate.iterator();
+ return new Iterator<Entry<K, V>>() {
+ Entry<K, V> entry;
+
+ /*@Override*/ public boolean hasNext() {
+ return iterator.hasNext();
+ }
+
+ /*@Override*/ public Entry<K, V> next() {
+ entry = iterator.next();
+ final Entry<K, V> finalEntry = entry;
+
+ return new ForwardingMapEntry<K, V>() {
+ @Override protected Entry<K, V> delegate() {
+ return finalEntry;
+ }
+
+ @Override public V setValue(V value) {
+ // Preconditions keep the map and inverse consistent.
+ checkState(contains(this), "entry no longer in map");
+ // similar to putInBothMaps, but set via entry
+ if (Objects.equal(value, getValue())) {
+ return value;
+ }
+ checkArgument(!containsValue(value),
+ "value already present: %s", value);
+ V oldValue = finalEntry.setValue(value);
+ checkState(Objects.equal(value, get(getKey())),
+ "entry no longer in map");
+ updateInverseMap(getKey(), true, oldValue, value);
+ return oldValue;
+ }
+ };
+ }
+
+ /*@Override*/ public void remove() {
+ checkState(entry != null);
+ V value = entry.getValue();
+ iterator.remove();
+ removeFromInverseMap(value);
+ }
+ };
+ }
+
+ // See java.util.Collections.CheckedEntrySet for details on attacks.
+
+ @Override public Object[] toArray() {
+ return ObjectArrays.toArrayImpl(this);
+ }
+ @Override public <T> T[] toArray(T[] array) {
+ return ObjectArrays.toArrayImpl(this, array);
+ }
+ @Override public boolean contains(Object o) {
+ return Maps.containsEntryImpl(delegate(), o);
+ }
+ @Override public boolean containsAll(Collection<?> c) {
+ return Collections2.containsAll(this, c);
+ }
+ @Override public boolean removeAll(Collection<?> c) {
+ return Iterators.removeAll(iterator(), c);
+ }
+ @Override public boolean retainAll(Collection<?> c) {
+ return Iterators.retainAll(iterator(), c);
+ }
+ }
+
+ /** The inverse of any other {@code AbstractBiMap} subclass. */
+ private static class Inverse<K, V> extends AbstractBiMap<K, V> {
+ private Inverse(Map<K, V> backward, AbstractBiMap<V, K> forward) {
+ super(backward, forward);
+ }
+
+ /*
+ * Serialization stores the forward bimap, the inverse of this inverse.
+ * Deserialization calls inverse() on the forward bimap and returns that
+ * inverse.
+ *
+ * If a bimap and its inverse are serialized together, the deserialized
+ * instances have inverse() methods that return the other.
+ */
+
+ /**
+ * @serialData the forward bimap
+ */
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ stream.defaultWriteObject();
+ stream.writeObject(inverse());
+ }
+
+ @SuppressWarnings("unchecked") // reading data stored by writeObject
+ private void readObject(ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+ setInverse((AbstractBiMap<V, K>) stream.readObject());
+ }
+
+ Object readResolve() {
+ return inverse().inverse();
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/AbstractIterator.java b/src/com/google/common/collect/AbstractIterator.java
new file mode 100644
index 0000000..d65907b
--- /dev/null
+++ b/src/com/google/common/collect/AbstractIterator.java
@@ -0,0 +1,164 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import static com.google.common.base.Preconditions.checkState;
+
+import java.util.NoSuchElementException;
+
+/**
+ * This class provides a skeletal implementation of the {@code Iterator}
+ * interface, to make this interface easier to implement for certain types of
+ * data sources.
+ *
+ * <p>{@code Iterator} requires its implementations to support querying the
+ * end-of-data status without changing the iterator's state, using the {@link
+ * #hasNext} method. But many data sources, such as {@link
+ * java.io.Reader#read()}), do not expose this information; the only way to
+ * discover whether there is any data left is by trying to retrieve it. These
+ * types of data sources are ordinarily difficult to write iterators for. But
+ * using this class, one must implement only the {@link #computeNext} method,
+ * and invoke the {@link #endOfData} method when appropriate.
+ *
+ * <p>Another example is an iterator that skips over null elements in a backing
+ * iterator. This could be implemented as: <pre> {@code
+ *
+ * public static Iterator<String> skipNulls(final Iterator<String> in) {
+ * return new AbstractIterator<String>() {
+ * protected String computeNext() {
+ * while (in.hasNext()) {
+ * String s = in.next();
+ * if (s != null) {
+ * return s;
+ * }
+ * }
+ * return endOfData();
+ * }
+ * };
+ * }}</pre>
+ *
+ * This class supports iterators that include null elements.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+public abstract class AbstractIterator<T> extends UnmodifiableIterator<T> {
+ private State state = State.NOT_READY;
+
+ private enum State {
+ /** We have computed the next element and haven't returned it yet. */
+ READY,
+
+ /** We haven't yet computed or have already returned the element. */
+ NOT_READY,
+
+ /** We have reached the end of the data and are finished. */
+ DONE,
+
+ /** We've suffered an exception and are kaput. */
+ FAILED,
+ }
+
+ private T next;
+
+ /**
+ * Returns the next element. <b>Note:</b> the implementation must call {@link
+ * #endOfData()} when there are no elements left in the iteration. Failure to
+ * do so could result in an infinite loop.
+ *
+ * <p>The initial invocation of {@link #hasNext()} or {@link #next()} calls
+ * this method, as does the first invocation of {@code hasNext} or {@code
+ * next} following each successful call to {@code next}. Once the
+ * implementation either invokes {@code endOfData} or throws an exception,
+ * {@code computeNext} is guaranteed to never be called again.
+ *
+ * <p>If this method throws an exception, it will propagate outward to the
+ * {@code hasNext} or {@code next} invocation that invoked this method. Any
+ * further attempts to use the iterator will result in an {@link
+ * IllegalStateException}.
+ *
+ * <p>The implementation of this method may not invoke the {@code hasNext},
+ * {@code next}, or {@link #peek()} methods on this instance; if it does, an
+ * {@code IllegalStateException} will result.
+ *
+ * @return the next element if there was one. If {@code endOfData} was called
+ * during execution, the return value will be ignored.
+ * @throws RuntimeException if any unrecoverable error happens. This exception
+ * will propagate outward to the {@code hasNext()}, {@code next()}, or
+ * {@code peek()} invocation that invoked this method. Any further
+ * attempts to use the iterator will result in an
+ * {@link IllegalStateException}.
+ */
+ protected abstract T computeNext();
+
+ /**
+ * Implementations of {@code computeNext} <b>must</b> invoke this method when
+ * there are no elements left in the iteration.
+ *
+ * @return {@code null}; a convenience so your {@link #computeNext}
+ * implementation can use the simple statement {@code return endOfData();}
+ */
+ protected final T endOfData() {
+ state = State.DONE;
+ return null;
+ }
+
+ public final boolean hasNext() {
+ checkState(state != State.FAILED);
+ switch (state) {
+ case DONE:
+ return false;
+ case READY:
+ return true;
+ default:
+ }
+ return tryToComputeNext();
+ }
+
+ private boolean tryToComputeNext() {
+ state = State.FAILED; // temporary pessimism
+ next = computeNext();
+ if (state != State.DONE) {
+ state = State.READY;
+ return true;
+ }
+ return false;
+ }
+
+ public final T next() {
+ if (!hasNext()) {
+ throw new NoSuchElementException();
+ }
+ state = State.NOT_READY;
+ return next;
+ }
+
+ /**
+ * Returns the next element in the iteration without advancing the iteration,
+ * according to the contract of {@link PeekingIterator#peek()}.
+ *
+ * <p>Implementations of {@code AbstractIterator} that wish to expose this
+ * functionality should implement {@code PeekingIterator}.
+ */
+ public final T peek() {
+ if (!hasNext()) {
+ throw new NoSuchElementException();
+ }
+ return next;
+ }
+}
diff --git a/src/com/google/common/collect/AbstractListMultimap.java b/src/com/google/common/collect/AbstractListMultimap.java
new file mode 100644
index 0000000..4eca8e1
--- /dev/null
+++ b/src/com/google/common/collect/AbstractListMultimap.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * Basic implementation of the {@link ListMultimap} interface. It's a wrapper
+ * around {@link AbstractMultimap} that converts the returned collections into
+ * {@code Lists}. The {@link #createCollection} method must return a {@code
+ * List}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+abstract class AbstractListMultimap<K, V>
+ extends AbstractMultimap<K, V> implements ListMultimap<K, V> {
+ /**
+ * Creates a new multimap that uses the provided map.
+ *
+ * @param map place to store the mapping from each key to its corresponding
+ * values
+ */
+ protected AbstractListMultimap(Map<K, Collection<V>> map) {
+ super(map);
+ }
+
+ @Override abstract List<V> createCollection();
+
+ @Override public List<V> get(@Nullable K key) {
+ return (List<V>) super.get(key);
+ }
+
+ @Override public List<V> removeAll(@Nullable Object key) {
+ return (List<V>) super.removeAll(key);
+ }
+
+ @Override public List<V> replaceValues(
+ @Nullable K key, Iterable<? extends V> values) {
+ return (List<V>) super.replaceValues(key, values);
+ }
+
+ /**
+ * Stores a key-value pair in the multimap.
+ *
+ * @param key key to store in the multimap
+ * @param value value to store in the multimap
+ * @return {@code true} always
+ */
+ @Override public boolean put(@Nullable K key, @Nullable V value) {
+ return super.put(key, value);
+ }
+
+ /**
+ * Compares the specified object to this multimap for equality.
+ *
+ * <p>Two {@code ListMultimap} instances are equal if, for each key, they
+ * contain the same values in the same order. If the value orderings disagree,
+ * the multimaps will not be considered equal.
+ */
+ @Override public boolean equals(@Nullable Object object) {
+ return super.equals(object);
+ }
+
+ private static final long serialVersionUID = 6588350623831699109L;
+}
diff --git a/src/com/google/common/collect/AbstractMapBasedMultiset.java b/src/com/google/common/collect/AbstractMapBasedMultiset.java
new file mode 100644
index 0000000..d736868
--- /dev/null
+++ b/src/com/google/common/collect/AbstractMapBasedMultiset.java
@@ -0,0 +1,414 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.collect.Multisets.checkNonnegative;
+
+import java.io.InvalidObjectException;
+import java.io.ObjectStreamException;
+import java.io.Serializable;
+import java.util.AbstractSet;
+import java.util.Collection;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import javax.annotation.Nullable;
+
+/**
+ * Basic implementation of {@code Multiset<E>} backed by an instance of {@code
+ * Map<E, AtomicInteger>}.
+ *
+ * <p>For serialization to work, the subclass must specify explicit {@code
+ * readObject} and {@code writeObject} methods.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+abstract class AbstractMapBasedMultiset<E> extends AbstractMultiset<E>
+ implements Serializable {
+
+ // TODO: Replace AtomicInteger with a to-be-written IntegerHolder class for
+ // better performance.
+ private transient Map<E, AtomicInteger> backingMap;
+
+ /*
+ * Cache the size for efficiency. Using a long lets us avoid the need for
+ * overflow checking and ensures that size() will function correctly even if
+ * the multiset had once been larger than Integer.MAX_VALUE.
+ */
+ private transient long size;
+
+ /** Standard constructor. */
+ protected AbstractMapBasedMultiset(Map<E, AtomicInteger> backingMap) {
+ this.backingMap = checkNotNull(backingMap);
+ this.size = super.size();
+ }
+
+ Map<E, AtomicInteger> backingMap() {
+ return backingMap;
+ }
+
+ /** Used during deserialization only. The backing map must be empty. */
+ void setBackingMap(Map<E, AtomicInteger> backingMap) {
+ this.backingMap = backingMap;
+ }
+
+ // Required Implementations
+
+ private transient EntrySet entrySet;
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>Invoking {@link Multiset.Entry#getCount} on an entry in the returned
+ * set always returns the current count of that element in the multiset, as
+ * opposed to the count at the time the entry was retrieved.
+ */
+ @Override public Set<Multiset.Entry<E>> entrySet() {
+ EntrySet result = entrySet;
+ if (result == null) {
+ entrySet = result = new EntrySet();
+ }
+ return result;
+ }
+
+ private class EntrySet extends AbstractSet<Multiset.Entry<E>> {
+ @Override public Iterator<Multiset.Entry<E>> iterator() {
+ final Iterator<Map.Entry<E, AtomicInteger>> backingEntries
+ = backingMap.entrySet().iterator();
+ return new Iterator<Multiset.Entry<E>>() {
+ Map.Entry<E, AtomicInteger> toRemove;
+
+ public boolean hasNext() {
+ return backingEntries.hasNext();
+ }
+
+ public Multiset.Entry<E> next() {
+ final Map.Entry<E, AtomicInteger> mapEntry = backingEntries.next();
+ toRemove = mapEntry;
+ return new Multisets.AbstractEntry<E>() {
+ public E getElement() {
+ return mapEntry.getKey();
+ }
+ public int getCount() {
+ int count = mapEntry.getValue().get();
+ if (count == 0) {
+ AtomicInteger frequency = backingMap.get(getElement());
+ if (frequency != null) {
+ count = frequency.get();
+ }
+ }
+ return count;
+ }
+ };
+ }
+
+ public void remove() {
+ checkState(toRemove != null,
+ "no calls to next() since the last call to remove()");
+ size -= toRemove.getValue().getAndSet(0);
+ backingEntries.remove();
+ toRemove = null;
+ }
+ };
+ }
+
+ @Override public int size() {
+ return backingMap.size();
+ }
+
+ // The following overrides are for better performance.
+
+ @Override public void clear() {
+ for (AtomicInteger frequency : backingMap.values()) {
+ frequency.set(0);
+ }
+ backingMap.clear();
+ size = 0L;
+ }
+
+ @Override public boolean contains(Object o) {
+ if (o instanceof Entry) {
+ Entry<?> entry = (Entry<?>) o;
+ int count = count(entry.getElement());
+ return (count == entry.getCount()) && (count > 0);
+ }
+ return false;
+ }
+
+ @Override public boolean remove(Object o) {
+ if (contains(o)) {
+ Entry<?> entry = (Entry<?>) o;
+ AtomicInteger frequency = backingMap.remove(entry.getElement());
+ int numberRemoved = frequency.getAndSet(0);
+ size -= numberRemoved;
+ return true;
+ }
+ return false;
+ }
+ }
+
+ // Optimizations - Query Operations
+
+ @Override public int size() {
+ return (int) Math.min(this.size, Integer.MAX_VALUE);
+ }
+
+ @Override public Iterator<E> iterator() {
+ return new MapBasedMultisetIterator();
+ }
+
+ /*
+ * Not subclassing AbstractMultiset$MultisetIterator because next() needs to
+ * retrieve the Map.Entry<E, AtomicInteger> entry, which can then be used for
+ * a more efficient remove() call.
+ */
+ private class MapBasedMultisetIterator implements Iterator<E> {
+ final Iterator<Map.Entry<E, AtomicInteger>> entryIterator;
+ Map.Entry<E, AtomicInteger> currentEntry;
+ int occurrencesLeft;
+ boolean canRemove;
+
+ MapBasedMultisetIterator() {
+ this.entryIterator = backingMap.entrySet().iterator();
+ }
+
+ public boolean hasNext() {
+ return occurrencesLeft > 0 || entryIterator.hasNext();
+ }
+
+ public E next() {
+ if (occurrencesLeft == 0) {
+ currentEntry = entryIterator.next();
+ occurrencesLeft = currentEntry.getValue().get();
+ }
+ occurrencesLeft--;
+ canRemove = true;
+ return currentEntry.getKey();
+ }
+
+ public void remove() {
+ checkState(canRemove,
+ "no calls to next() since the last call to remove()");
+ int frequency = currentEntry.getValue().get();
+ if (frequency <= 0) {
+ throw new ConcurrentModificationException();
+ }
+ if (currentEntry.getValue().addAndGet(-1) == 0) {
+ entryIterator.remove();
+ }
+ size--;
+ canRemove = false;
+ }
+ }
+
+ @Override public int count(@Nullable Object element) {
+ AtomicInteger frequency = backingMap.get(element);
+ return (frequency == null) ? 0 : frequency.get();
+ }
+
+ // Optional Operations - Modification Operations
+
+ /**
+ * {@inheritDoc}
+ *
+ * @throws IllegalArgumentException if the call would result in more than
+ * {@link Integer#MAX_VALUE} occurrences of {@code element} in this
+ * multiset.
+ */
+ @Override public int add(@Nullable E element, int occurrences) {
+ if (occurrences == 0) {
+ return count(element);
+ }
+ checkArgument(
+ occurrences > 0, "occurrences cannot be negative: %s", occurrences);
+ AtomicInteger frequency = backingMap.get(element);
+ int oldCount;
+ if (frequency == null) {
+ oldCount = 0;
+ backingMap.put(element, new AtomicInteger(occurrences));
+ } else {
+ oldCount = frequency.get();
+ long newCount = (long) oldCount + (long) occurrences;
+ checkArgument(newCount <= Integer.MAX_VALUE,
+ "too many occurrences: %s", newCount);
+ frequency.getAndAdd(occurrences);
+ }
+ size += occurrences;
+ return oldCount;
+ }
+
+ @Override public int remove(@Nullable Object element, int occurrences) {
+ if (occurrences == 0) {
+ return count(element);
+ }
+ checkArgument(
+ occurrences > 0, "occurrences cannot be negative: %s", occurrences);
+ AtomicInteger frequency = backingMap.get(element);
+ if (frequency == null) {
+ return 0;
+ }
+
+ int oldCount = frequency.get();
+
+ int numberRemoved;
+ if (oldCount > occurrences) {
+ numberRemoved = occurrences;
+ } else {
+ numberRemoved = oldCount;
+ backingMap.remove(element);
+ }
+
+ frequency.addAndGet(-numberRemoved);
+ size -= numberRemoved;
+ return oldCount;
+ }
+
+ // Roughly a 33% performance improvement over AbstractMultiset.setCount().
+ @Override public int setCount(E element, int count) {
+ checkNonnegative(count, "count");
+
+ AtomicInteger existingCounter;
+ int oldCount;
+ if (count == 0) {
+ existingCounter = backingMap.remove(element);
+ oldCount = getAndSet(existingCounter, count);
+ } else {
+ existingCounter = backingMap.get(element);
+ oldCount = getAndSet(existingCounter, count);
+
+ if (existingCounter == null) {
+ backingMap.put(element, new AtomicInteger(count));
+ }
+ }
+
+ size += (count - oldCount);
+ return oldCount;
+ }
+
+ private static int getAndSet(AtomicInteger i, int count) {
+ if (i == null) {
+ return 0;
+ }
+
+ return i.getAndSet(count);
+ }
+
+ private int removeAllOccurrences(@Nullable Object element,
+ Map<E, AtomicInteger> map) {
+ AtomicInteger frequency = map.remove(element);
+ if (frequency == null) {
+ return 0;
+ }
+ int numberRemoved = frequency.getAndSet(0);
+ size -= numberRemoved;
+ return numberRemoved;
+ }
+
+ // Views
+
+ @Override Set<E> createElementSet() {
+ return new MapBasedElementSet(backingMap);
+ }
+
+ class MapBasedElementSet extends ForwardingSet<E> {
+
+ // This mapping is the usually the same as {@code backingMap}, but can be a
+ // submap in some implementations.
+ private final Map<E, AtomicInteger> map;
+ private final Set<E> delegate;
+
+ MapBasedElementSet(Map<E, AtomicInteger> map) {
+ this.map = map;
+ delegate = map.keySet();
+ }
+
+ @Override protected Set<E> delegate() {
+ return delegate;
+ }
+
+ // TODO: a way to not have to write this much code?
+
+ @Override public Iterator<E> iterator() {
+ final Iterator<Map.Entry<E, AtomicInteger>> entries
+ = map.entrySet().iterator();
+ return new Iterator<E>() {
+ Map.Entry<E, AtomicInteger> toRemove;
+
+ public boolean hasNext() {
+ return entries.hasNext();
+ }
+
+ public E next() {
+ toRemove = entries.next();
+ return toRemove.getKey();
+ }
+
+ public void remove() {
+ checkState(toRemove != null,
+ "no calls to next() since the last call to remove()");
+ size -= toRemove.getValue().getAndSet(0);
+ entries.remove();
+ toRemove = null;
+ }
+ };
+ }
+
+ @Override public boolean remove(Object element) {
+ return removeAllOccurrences(element, map) != 0;
+ }
+
+ @Override public boolean removeAll(Collection<?> elementsToRemove) {
+ return Iterators.removeAll(iterator(), elementsToRemove);
+ }
+
+ @Override public boolean retainAll(Collection<?> elementsToRetain) {
+ return Iterators.retainAll(iterator(), elementsToRetain);
+ }
+
+ @Override public void clear() {
+ if (map == backingMap) {
+ AbstractMapBasedMultiset.this.clear();
+ } else {
+ Iterator<E> i = iterator();
+ while (i.hasNext()) {
+ i.next();
+ i.remove();
+ }
+ }
+ }
+
+ public Map<E, AtomicInteger> getMap() {
+ return map;
+ }
+ }
+
+ // Don't allow default serialization.
+ @SuppressWarnings("unused") // actually used during deserialization
+ private void readObjectNoData() throws ObjectStreamException {
+ throw new InvalidObjectException("Stream data required");
+ }
+
+ private static final long serialVersionUID = -2250766705698539974L;
+}
diff --git a/src/com/google/common/collect/AbstractMapEntry.java b/src/com/google/common/collect/AbstractMapEntry.java
new file mode 100644
index 0000000..de99ad7
--- /dev/null
+++ b/src/com/google/common/collect/AbstractMapEntry.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Objects;
+
+import java.util.Map.Entry;
+
+import javax.annotation.Nullable;
+
+/**
+ * Implementation of the {@code equals}, {@code hashCode}, and {@code toString}
+ * methods of {@code Entry}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+abstract class AbstractMapEntry<K, V> implements Entry<K, V> {
+
+ public abstract K getKey();
+
+ public abstract V getValue();
+
+ public V setValue(V value) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ if (object instanceof Entry) {
+ Entry<?, ?> that = (Entry<?, ?>) object;
+ return Objects.equal(this.getKey(), that.getKey())
+ && Objects.equal(this.getValue(), that.getValue());
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ K k = getKey();
+ V v = getValue();
+ return ((k == null) ? 0 : k.hashCode()) ^ ((v == null) ? 0 : v.hashCode());
+ }
+
+ /**
+ * Returns a string representation of the form <code>{key}={value}</code>.
+ */
+ @Override public String toString() {
+ return getKey() + "=" + getValue();
+ }
+}
diff --git a/src/com/google/common/collect/AbstractMultimap.java b/src/com/google/common/collect/AbstractMultimap.java
new file mode 100644
index 0000000..cee4b37
--- /dev/null
+++ b/src/com/google/common/collect/AbstractMultimap.java
@@ -0,0 +1,1492 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+
+import java.io.Serializable;
+import java.util.AbstractCollection;
+import java.util.AbstractMap;
+import java.util.AbstractSet;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.RandomAccess;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.SortedSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * Basic implementation of the {@link Multimap} interface. This class represents
+ * a multimap as a map that associates each key with a collection of values. All
+ * methods of {@link Multimap} are supported, including those specified as
+ * optional in the interface.
+ *
+ * <p>To implement a multimap, a subclass must define the method {@link
+ * #createCollection()}, which creates an empty collection of values for a key.
+ *
+ * <p>The multimap constructor takes a map that has a single entry for each
+ * distinct key. When you insert a key-value pair with a key that isn't already
+ * in the multimap, {@code AbstractMultimap} calls {@link #createCollection()}
+ * to create the collection of values for that key. The subclass should not call
+ * {@link #createCollection()} directly, and a new instance should be created
+ * every time the method is called.
+ *
+ * <p>For example, the subclass could pass a {@link java.util.TreeMap} during
+ * construction, and {@link #createCollection()} could return a {@link
+ * java.util.TreeSet}, in which case the multimap's iterators would propagate
+ * through the keys and values in sorted order.
+ *
+ * <p>Keys and values may be null, as long as the underlying collection classes
+ * support null elements.
+ *
+ * <p>The collections created by {@link #createCollection()} may or may not
+ * allow duplicates. If the collection, such as a {@link Set}, does not support
+ * duplicates, an added key-value pair will replace an existing pair with the
+ * same key and value, if such a pair is present. With collections like {@link
+ * List} that allow duplicates, the collection will keep the existing key-value
+ * pairs while adding a new pair.
+ *
+ * <p>This class is not threadsafe when any concurrent operations update the
+ * multimap, even if the underlying map and {@link #createCollection()} method
+ * return threadsafe classes. Concurrent read operations will work correctly. To
+ * allow concurrent update operations, wrap your multimap with a call to {@link
+ * Multimaps#synchronizedMultimap}.
+ *
+ * <p>For serialization to work, the subclass must specify explicit
+ * {@code readObject} and {@code writeObject} methods.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+abstract class AbstractMultimap<K, V> implements Multimap<K, V>, Serializable {
+ /*
+ * Here's an outline of the overall design.
+ *
+ * The map variable contains the collection of values associated with each
+ * key. When a key-value pair is added to a multimap that didn't previously
+ * contain any values for that key, a new collection generated by
+ * createCollection is added to the map. That same collection instance
+ * remains in the map as long as the multimap has any values for the key. If
+ * all values for the key are removed, the key and collection are removed
+ * from the map.
+ *
+ * The get method returns a WrappedCollection, which decorates the collection
+ * in the map (if the key is present) or an empty collection (if the key is
+ * not present). When the collection delegate in the WrappedCollection is
+ * empty, the multimap may contain subsequently added values for that key. To
+ * handle that situation, the WrappedCollection checks whether map contains
+ * an entry for the provided key, and if so replaces the delegate.
+ */
+
+ private transient Map<K, Collection<V>> map;
+ private transient int totalSize;
+
+ /**
+ * Creates a new multimap that uses the provided map.
+ *
+ * @param map place to store the mapping from each key to its corresponding
+ * values
+ * @throws IllegalArgumentException if {@code map} is not empty
+ */
+ protected AbstractMultimap(Map<K, Collection<V>> map) {
+ checkArgument(map.isEmpty());
+ this.map = map;
+ }
+
+ /** Used during deserialization only. */
+ final void setMap(Map<K, Collection<V>> map) {
+ this.map = map;
+ totalSize = 0;
+ for (Collection<V> values : map.values()) {
+ checkArgument(!values.isEmpty());
+ totalSize += values.size();
+ }
+ }
+
+ /**
+ * Creates the collection of values for a single key.
+ *
+ * <p>Collections with weak, soft, or phantom references are not supported.
+ * Each call to {@code createCollection} should create a new instance.
+ *
+ * <p>The returned collection class determines whether duplicate key-value
+ * pairs are allowed.
+ *
+ * @return an empty collection of values
+ */
+ abstract Collection<V> createCollection();
+
+ /**
+ * Creates the collection of values for an explicitly provided key. By
+ * default, it simply calls {@link #createCollection()}, which is the correct
+ * behavior for most implementations. The {@link LinkedHashMultimap} class
+ * overrides it.
+ *
+ * @param key key to associate with values in the collection
+ * @return an empty collection of values
+ */
+ Collection<V> createCollection(@Nullable K key) {
+ return createCollection();
+ }
+
+ Map<K, Collection<V>> backingMap() {
+ return map;
+ }
+
+ // Query Operations
+
+ public int size() {
+ return totalSize;
+ }
+
+ public boolean isEmpty() {
+ return totalSize == 0;
+ }
+
+ public boolean containsKey(@Nullable Object key) {
+ return map.containsKey(key);
+ }
+
+ public boolean containsValue(@Nullable Object value) {
+ for (Collection<V> collection : map.values()) {
+ if (collection.contains(value)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public boolean containsEntry(@Nullable Object key, @Nullable Object value) {
+ Collection<V> collection = map.get(key);
+ return collection != null && collection.contains(value);
+ }
+
+ // Modification Operations
+
+ public boolean put(@Nullable K key, @Nullable V value) {
+ Collection<V> collection = getOrCreateCollection(key);
+
+ if (collection.add(value)) {
+ totalSize++;
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ private Collection<V> getOrCreateCollection(@Nullable K key) {
+ Collection<V> collection = map.get(key);
+ if (collection == null) {
+ collection = createCollection(key);
+ map.put(key, collection);
+ }
+ return collection;
+ }
+
+ public boolean remove(@Nullable Object key, @Nullable Object value) {
+ Collection<V> collection = map.get(key);
+ if (collection == null) {
+ return false;
+ }
+
+ boolean changed = collection.remove(value);
+ if (changed) {
+ totalSize--;
+ if (collection.isEmpty()) {
+ map.remove(key);
+ }
+ }
+ return changed;
+ }
+
+ // Bulk Operations
+
+ public boolean putAll(@Nullable K key, Iterable<? extends V> values) {
+ if (!values.iterator().hasNext()) {
+ return false;
+ }
+ Collection<V> collection = getOrCreateCollection(key);
+ int oldSize = collection.size();
+
+ boolean changed = false;
+ if (values instanceof Collection) {
+ @SuppressWarnings("unchecked")
+ Collection<? extends V> c = (Collection<? extends V>) values;
+ changed = collection.addAll(c);
+ } else {
+ for (V value : values) {
+ changed |= collection.add(value);
+ }
+ }
+
+ totalSize += (collection.size() - oldSize);
+ return changed;
+ }
+
+ public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
+ boolean changed = false;
+ for (Map.Entry<? extends K, ? extends V> entry : multimap.entries()) {
+ changed |= put(entry.getKey(), entry.getValue());
+ }
+ return changed;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The returned collection is immutable.
+ */
+ public Collection<V> replaceValues(
+ @Nullable K key, Iterable<? extends V> values) {
+ Iterator<? extends V> iterator = values.iterator();
+ if (!iterator.hasNext()) {
+ return removeAll(key);
+ }
+
+ Collection<V> collection = getOrCreateCollection(key);
+ Collection<V> oldValues = createCollection();
+ oldValues.addAll(collection);
+
+ totalSize -= collection.size();
+ collection.clear();
+
+ while (iterator.hasNext()) {
+ if (collection.add(iterator.next())) {
+ totalSize++;
+ }
+ }
+
+ return unmodifiableCollectionSubclass(oldValues);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The returned collection is immutable.
+ */
+ public Collection<V> removeAll(@Nullable Object key) {
+ Collection<V> collection = map.remove(key);
+ Collection<V> output = createCollection();
+
+ if (collection != null) {
+ output.addAll(collection);
+ totalSize -= collection.size();
+ collection.clear();
+ }
+
+ return unmodifiableCollectionSubclass(output);
+ }
+
+ private Collection<V> unmodifiableCollectionSubclass(
+ Collection<V> collection) {
+ if (collection instanceof SortedSet) {
+ return Collections.unmodifiableSortedSet((SortedSet<V>) collection);
+ } else if (collection instanceof Set) {
+ return Collections.unmodifiableSet((Set<V>) collection);
+ } else if (collection instanceof List) {
+ return Collections.unmodifiableList((List<V>) collection);
+ } else {
+ return Collections.unmodifiableCollection(collection);
+ }
+ }
+
+ public void clear() {
+ // Clear each collection, to make previously returned collections empty.
+ for (Collection<V> collection : map.values()) {
+ collection.clear();
+ }
+ map.clear();
+ totalSize = 0;
+ }
+
+ // Views
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The returned collection is not serializable.
+ */
+ public Collection<V> get(@Nullable K key) {
+ Collection<V> collection = map.get(key);
+ if (collection == null) {
+ collection = createCollection(key);
+ }
+ return wrapCollection(key, collection);
+ }
+
+ /**
+ * Generates a decorated collection that remains consistent with the values in
+ * the multimap for the provided key. Changes to the multimap may alter the
+ * returned collection, and vice versa.
+ */
+ private Collection<V> wrapCollection(
+ @Nullable K key, Collection<V> collection) {
+ if (collection instanceof SortedSet) {
+ return new WrappedSortedSet(key, (SortedSet<V>) collection, null);
+ } else if (collection instanceof Set) {
+ return new WrappedSet(key, (Set<V>) collection);
+ } else if (collection instanceof List) {
+ return wrapList(key, (List<V>) collection, null);
+ } else {
+ return new WrappedCollection(key, collection, null);
+ }
+ }
+
+ private List<V> wrapList(
+ K key, List<V> list, @Nullable WrappedCollection ancestor) {
+ return (list instanceof RandomAccess)
+ ? new RandomAccessWrappedList(key, list, ancestor)
+ : new WrappedList(key, list, ancestor);
+ }
+
+ /**
+ * Collection decorator that stays in sync with the multimap values for a key.
+ * There are two kinds of wrapped collections: full and subcollections. Both
+ * have a delegate pointing to the underlying collection class.
+ *
+ * <p>Full collections, identified by a null ancestor field, contain all
+ * multimap values for a given key. Its delegate is a value in {@link
+ * AbstractMultimap#map} whenever the delegate is non-empty. The {@code
+ * refreshIfEmpty}, {@code removeIfEmpty}, and {@code addToMap} methods ensure
+ * that the {@code WrappedCollection} and map remain consistent.
+ *
+ * <p>A subcollection, such as a sublist, contains some of the values for a
+ * given key. Its ancestor field points to the full wrapped collection with
+ * all values for the key. The subcollection {@code refreshIfEmpty}, {@code
+ * removeIfEmpty}, and {@code addToMap} methods call the corresponding methods
+ * of the full wrapped collection.
+ */
+ private class WrappedCollection extends AbstractCollection<V> {
+ final K key;
+ Collection<V> delegate;
+ final WrappedCollection ancestor;
+ final Collection<V> ancestorDelegate;
+
+ WrappedCollection(@Nullable K key, Collection<V> delegate,
+ @Nullable WrappedCollection ancestor) {
+ this.key = key;
+ this.delegate = delegate;
+ this.ancestor = ancestor;
+ this.ancestorDelegate
+ = (ancestor == null) ? null : ancestor.getDelegate();
+ }
+
+ /**
+ * If the delegate collection is empty, but the multimap has values for the
+ * key, replace the delegate with the new collection for the key.
+ *
+ * <p>For a subcollection, refresh its ancestor and validate that the
+ * ancestor delegate hasn't changed.
+ */
+ void refreshIfEmpty() {
+ if (ancestor != null) {
+ ancestor.refreshIfEmpty();
+ if (ancestor.getDelegate() != ancestorDelegate) {
+ throw new ConcurrentModificationException();
+ }
+ } else if (delegate.isEmpty()) {
+ Collection<V> newDelegate = map.get(key);
+ if (newDelegate != null) {
+ delegate = newDelegate;
+ }
+ }
+ }
+
+ /**
+ * If collection is empty, remove it from {@code map}. For subcollections,
+ * check whether the ancestor collection is empty.
+ */
+ void removeIfEmpty() {
+ if (ancestor != null) {
+ ancestor.removeIfEmpty();
+ } else if (delegate.isEmpty()) {
+ map.remove(key);
+ }
+ }
+
+ K getKey() {
+ return key;
+ }
+
+ /**
+ * Add the delegate to the map. Other {@code WrappedCollection} methods
+ * should call this method after adding elements to a previously empty
+ * collection.
+ *
+ * <p>Subcollection add the ancestor's delegate instead.
+ */
+ void addToMap() {
+ if (ancestor != null) {
+ ancestor.addToMap();
+ } else {
+ map.put(key, delegate);
+ }
+ }
+
+ @Override public int size() {
+ refreshIfEmpty();
+ return delegate.size();
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ if (object == this) {
+ return true;
+ }
+ refreshIfEmpty();
+ return delegate.equals(object);
+ }
+
+ @Override public int hashCode() {
+ refreshIfEmpty();
+ return delegate.hashCode();
+ }
+
+ @Override public String toString() {
+ refreshIfEmpty();
+ return delegate.toString();
+ }
+
+ Collection<V> getDelegate() {
+ return delegate;
+ }
+
+ @Override public Iterator<V> iterator() {
+ refreshIfEmpty();
+ return new WrappedIterator();
+ }
+
+ /** Collection iterator for {@code WrappedCollection}. */
+ class WrappedIterator implements Iterator<V> {
+ final Iterator<V> delegateIterator;
+ final Collection<V> originalDelegate = delegate;
+
+ WrappedIterator() {
+ delegateIterator = iteratorOrListIterator(delegate);
+ }
+
+ WrappedIterator(Iterator<V> delegateIterator) {
+ this.delegateIterator = delegateIterator;
+ }
+
+ /**
+ * If the delegate changed since the iterator was created, the iterator is
+ * no longer valid.
+ */
+ void validateIterator() {
+ refreshIfEmpty();
+ if (delegate != originalDelegate) {
+ throw new ConcurrentModificationException();
+ }
+ }
+
+ public boolean hasNext() {
+ validateIterator();
+ return delegateIterator.hasNext();
+ }
+
+ public V next() {
+ validateIterator();
+ return delegateIterator.next();
+ }
+
+ public void remove() {
+ delegateIterator.remove();
+ totalSize--;
+ removeIfEmpty();
+ }
+
+ Iterator<V> getDelegateIterator() {
+ validateIterator();
+ return delegateIterator;
+ }
+ }
+
+ @Override public boolean add(V value) {
+ refreshIfEmpty();
+ boolean wasEmpty = delegate.isEmpty();
+ boolean changed = delegate.add(value);
+ if (changed) {
+ totalSize++;
+ if (wasEmpty) {
+ addToMap();
+ }
+ }
+ return changed;
+ }
+
+ WrappedCollection getAncestor() {
+ return ancestor;
+ }
+
+ // The following methods are provided for better performance.
+
+ @Override public boolean addAll(Collection<? extends V> collection) {
+ if (collection.isEmpty()) {
+ return false;
+ }
+ int oldSize = size(); // calls refreshIfEmpty
+ boolean changed = delegate.addAll(collection);
+ if (changed) {
+ int newSize = delegate.size();
+ totalSize += (newSize - oldSize);
+ if (oldSize == 0) {
+ addToMap();
+ }
+ }
+ return changed;
+ }
+
+ @Override public boolean contains(Object o) {
+ refreshIfEmpty();
+ return delegate.contains(o);
+ }
+
+ @Override public boolean containsAll(Collection<?> c) {
+ refreshIfEmpty();
+ return delegate.containsAll(c);
+ }
+
+ @Override public void clear() {
+ int oldSize = size(); // calls refreshIfEmpty
+ if (oldSize == 0) {
+ return;
+ }
+ delegate.clear();
+ totalSize -= oldSize;
+ removeIfEmpty(); // maybe shouldn't be removed if this is a sublist
+ }
+
+ @Override public boolean remove(Object o) {
+ refreshIfEmpty();
+ boolean changed = delegate.remove(o);
+ if (changed) {
+ totalSize--;
+ removeIfEmpty();
+ }
+ return changed;
+ }
+
+ @Override public boolean removeAll(Collection<?> c) {
+ if (c.isEmpty()) {
+ return false;
+ }
+ int oldSize = size(); // calls refreshIfEmpty
+ boolean changed = delegate.removeAll(c);
+ if (changed) {
+ int newSize = delegate.size();
+ totalSize += (newSize - oldSize);
+ removeIfEmpty();
+ }
+ return changed;
+ }
+
+ @Override public boolean retainAll(Collection<?> c) {
+ checkNotNull(c);
+ int oldSize = size(); // calls refreshIfEmpty
+ boolean changed = delegate.retainAll(c);
+ if (changed) {
+ int newSize = delegate.size();
+ totalSize += (newSize - oldSize);
+ removeIfEmpty();
+ }
+ return changed;
+ }
+ }
+
+ private Iterator<V> iteratorOrListIterator(Collection<V> collection) {
+ return (collection instanceof List)
+ ? ((List<V>) collection).listIterator()
+ : collection.iterator();
+ }
+
+ /** Set decorator that stays in sync with the multimap values for a key. */
+ private class WrappedSet extends WrappedCollection implements Set<V> {
+ WrappedSet(K key, Set<V> delegate) {
+ super(key, delegate, null);
+ }
+ }
+
+ /**
+ * SortedSet decorator that stays in sync with the multimap values for a key.
+ */
+ private class WrappedSortedSet extends WrappedCollection
+ implements SortedSet<V> {
+ WrappedSortedSet(@Nullable K key, SortedSet<V> delegate,
+ @Nullable WrappedCollection ancestor) {
+ super(key, delegate, ancestor);
+ }
+
+ SortedSet<V> getSortedSetDelegate() {
+ return (SortedSet<V>) getDelegate();
+ }
+
+ public Comparator<? super V> comparator() {
+ return getSortedSetDelegate().comparator();
+ }
+
+ public V first() {
+ refreshIfEmpty();
+ return getSortedSetDelegate().first();
+ }
+
+ public V last() {
+ refreshIfEmpty();
+ return getSortedSetDelegate().last();
+ }
+
+ public SortedSet<V> headSet(V toElement) {
+ refreshIfEmpty();
+ return new WrappedSortedSet(
+ getKey(), getSortedSetDelegate().headSet(toElement),
+ (getAncestor() == null) ? this : getAncestor());
+ }
+
+ public SortedSet<V> subSet(V fromElement, V toElement) {
+ refreshIfEmpty();
+ return new WrappedSortedSet(
+ getKey(), getSortedSetDelegate().subSet(fromElement, toElement),
+ (getAncestor() == null) ? this : getAncestor());
+ }
+
+ public SortedSet<V> tailSet(V fromElement) {
+ refreshIfEmpty();
+ return new WrappedSortedSet(
+ getKey(), getSortedSetDelegate().tailSet(fromElement),
+ (getAncestor() == null) ? this : getAncestor());
+ }
+ }
+
+ /** List decorator that stays in sync with the multimap values for a key. */
+ private class WrappedList extends WrappedCollection implements List<V> {
+ WrappedList(K key, List<V> delegate, @Nullable WrappedCollection ancestor) {
+ super(key, delegate, ancestor);
+ }
+
+ List<V> getListDelegate() {
+ return (List<V>) getDelegate();
+ }
+
+ public boolean addAll(int index, Collection<? extends V> c) {
+ if (c.isEmpty()) {
+ return false;
+ }
+ int oldSize = size(); // calls refreshIfEmpty
+ boolean changed = getListDelegate().addAll(index, c);
+ if (changed) {
+ int newSize = getDelegate().size();
+ totalSize += (newSize - oldSize);
+ if (oldSize == 0) {
+ addToMap();
+ }
+ }
+ return changed;
+ }
+
+ public V get(int index) {
+ refreshIfEmpty();
+ return getListDelegate().get(index);
+ }
+
+ public V set(int index, V element) {
+ refreshIfEmpty();
+ return getListDelegate().set(index, element);
+ }
+
+ public void add(int index, V element) {
+ refreshIfEmpty();
+ boolean wasEmpty = getDelegate().isEmpty();
+ getListDelegate().add(index, element);
+ totalSize++;
+ if (wasEmpty) {
+ addToMap();
+ }
+ }
+
+ public V remove(int index) {
+ refreshIfEmpty();
+ V value = getListDelegate().remove(index);
+ totalSize--;
+ removeIfEmpty();
+ return value;
+ }
+
+ public int indexOf(Object o) {
+ refreshIfEmpty();
+ return getListDelegate().indexOf(o);
+ }
+
+ public int lastIndexOf(Object o) {
+ refreshIfEmpty();
+ return getListDelegate().lastIndexOf(o);
+ }
+
+ public ListIterator<V> listIterator() {
+ refreshIfEmpty();
+ return new WrappedListIterator();
+ }
+
+ public ListIterator<V> listIterator(int index) {
+ refreshIfEmpty();
+ return new WrappedListIterator(index);
+ }
+
+ @GwtIncompatible("List.subList")
+ public List<V> subList(int fromIndex, int toIndex) {
+ refreshIfEmpty();
+ return wrapList(getKey(),
+ Platform.subList(getListDelegate(), fromIndex, toIndex),
+ (getAncestor() == null) ? this : getAncestor());
+ }
+
+ /** ListIterator decorator. */
+ private class WrappedListIterator extends WrappedIterator
+ implements ListIterator<V> {
+ WrappedListIterator() {}
+
+ public WrappedListIterator(int index) {
+ super(getListDelegate().listIterator(index));
+ }
+
+ private ListIterator<V> getDelegateListIterator() {
+ return (ListIterator<V>) getDelegateIterator();
+ }
+
+ public boolean hasPrevious() {
+ return getDelegateListIterator().hasPrevious();
+ }
+
+ public V previous() {
+ return getDelegateListIterator().previous();
+ }
+
+ public int nextIndex() {
+ return getDelegateListIterator().nextIndex();
+ }
+
+ public int previousIndex() {
+ return getDelegateListIterator().previousIndex();
+ }
+
+ public void set(V value) {
+ getDelegateListIterator().set(value);
+ }
+
+ public void add(V value) {
+ boolean wasEmpty = isEmpty();
+ getDelegateListIterator().add(value);
+ totalSize++;
+ if (wasEmpty) {
+ addToMap();
+ }
+ }
+ }
+ }
+
+ /**
+ * List decorator that stays in sync with the multimap values for a key and
+ * supports rapid random access.
+ */
+ private class RandomAccessWrappedList extends WrappedList
+ implements RandomAccess {
+ RandomAccessWrappedList(K key, List<V> delegate,
+ @Nullable WrappedCollection ancestor) {
+ super(key, delegate, ancestor);
+ }
+ }
+
+ private transient Set<K> keySet;
+
+ public Set<K> keySet() {
+ Set<K> result = keySet;
+ return (result == null) ? keySet = createKeySet() : result;
+ }
+
+ private Set<K> createKeySet() {
+ return (map instanceof SortedMap)
+ ? new SortedKeySet((SortedMap<K, Collection<V>>) map) : new KeySet(map);
+ }
+
+ private class KeySet extends AbstractSet<K> {
+
+ /**
+ * This is usually the same as map, except when someone requests a
+ * subcollection of a {@link SortedKeySet}.
+ */
+ final Map<K, Collection<V>> subMap;
+
+ KeySet(final Map<K, Collection<V>> subMap) {
+ this.subMap = subMap;
+ }
+
+ @Override public int size() {
+ return subMap.size();
+ }
+
+ @Override public Iterator<K> iterator() {
+ return new Iterator<K>() {
+ final Iterator<Map.Entry<K, Collection<V>>> entryIterator
+ = subMap.entrySet().iterator();
+ Map.Entry<K, Collection<V>> entry;
+
+ public boolean hasNext() {
+ return entryIterator.hasNext();
+ }
+ public K next() {
+ entry = entryIterator.next();
+ return entry.getKey();
+ }
+ public void remove() {
+ checkState(entry != null);
+ Collection<V> collection = entry.getValue();
+ entryIterator.remove();
+ totalSize -= collection.size();
+ collection.clear();
+ }
+ };
+ }
+
+ // The following methods are included for better performance.
+
+ @Override public boolean contains(Object key) {
+ return subMap.containsKey(key);
+ }
+
+ @Override public boolean remove(Object key) {
+ int count = 0;
+ Collection<V> collection = subMap.remove(key);
+ if (collection != null) {
+ count = collection.size();
+ collection.clear();
+ totalSize -= count;
+ }
+ return count > 0;
+ }
+
+ @Override public boolean containsAll(Collection<?> c) {
+ return subMap.keySet().containsAll(c);
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ return this == object || this.subMap.keySet().equals(object);
+ }
+
+ @Override public int hashCode() {
+ return subMap.keySet().hashCode();
+ }
+ }
+
+ private class SortedKeySet extends KeySet implements SortedSet<K> {
+
+ SortedKeySet(SortedMap<K, Collection<V>> subMap) {
+ super(subMap);
+ }
+
+ SortedMap<K, Collection<V>> sortedMap() {
+ return (SortedMap<K, Collection<V>>) subMap;
+ }
+
+ public Comparator<? super K> comparator() {
+ return sortedMap().comparator();
+ }
+
+ public K first() {
+ return sortedMap().firstKey();
+ }
+
+ public SortedSet<K> headSet(K toElement) {
+ return new SortedKeySet(sortedMap().headMap(toElement));
+ }
+
+ public K last() {
+ return sortedMap().lastKey();
+ }
+
+ public SortedSet<K> subSet(K fromElement, K toElement) {
+ return new SortedKeySet(sortedMap().subMap(fromElement, toElement));
+ }
+
+ public SortedSet<K> tailSet(K fromElement) {
+ return new SortedKeySet(sortedMap().tailMap(fromElement));
+ }
+ }
+
+ private transient Multiset<K> multiset;
+
+ public Multiset<K> keys() {
+ Multiset<K> result = multiset;
+ return (result == null) ? multiset = new MultisetView() : result;
+ }
+
+ /** Multiset view that stays in sync with the multimap keys. */
+ private class MultisetView extends AbstractMultiset<K> {
+
+ @Override public int remove(Object key, int occurrences) {
+ if (occurrences == 0) {
+ return count(key);
+ }
+ checkArgument(occurrences > 0);
+
+ Collection<V> collection;
+ try {
+ collection = map.get(key);
+ } catch (NullPointerException e) {
+ return 0;
+ } catch (ClassCastException e) {
+ return 0;
+ }
+
+ if (collection == null) {
+ return 0;
+ }
+ int count = collection.size();
+
+ if (occurrences >= count) {
+ return removeValuesForKey(key);
+ }
+
+ Iterator<V> iterator = collection.iterator();
+ for (int i = 0; i < occurrences; i++) {
+ iterator.next();
+ iterator.remove();
+ }
+ totalSize -= occurrences;
+ return count;
+ }
+
+ @Override public Set<K> elementSet() {
+ return AbstractMultimap.this.keySet();
+ }
+
+ transient Set<Multiset.Entry<K>> entrySet;
+
+ @Override public Set<Multiset.Entry<K>> entrySet() {
+ Set<Multiset.Entry<K>> result = entrySet;
+ return (result == null) ? entrySet = new EntrySet() : result;
+ }
+
+ private class EntrySet extends AbstractSet<Multiset.Entry<K>> {
+ @Override public Iterator<Multiset.Entry<K>> iterator() {
+ return new MultisetEntryIterator();
+ }
+ @Override public int size() {
+ return map.size();
+ }
+
+ // The following methods are included for better performance.
+
+ @Override public boolean contains(Object o) {
+ if (!(o instanceof Multiset.Entry)) {
+ return false;
+ }
+ Multiset.Entry<?> entry = (Multiset.Entry<?>) o;
+ Collection<V> collection = map.get(entry.getElement());
+ return (collection != null) &&
+ (collection.size() == entry.getCount());
+ }
+ @Override public void clear() {
+ AbstractMultimap.this.clear();
+ }
+ @Override public boolean remove(Object o) {
+ return contains(o) &&
+ (removeValuesForKey(((Multiset.Entry<?>) o).getElement()) > 0);
+ }
+ }
+
+ @Override public Iterator<K> iterator() {
+ return new MultisetKeyIterator();
+ }
+
+ // The following methods are included for better performance.
+
+ @Override public int count(Object key) {
+ try {
+ Collection<V> collection = map.get(key);
+ return (collection == null) ? 0 : collection.size();
+ } catch (NullPointerException e) {
+ return 0;
+ } catch (ClassCastException e) {
+ return 0;
+ }
+ }
+
+ @Override public int size() {
+ return totalSize;
+ }
+
+ @Override public void clear() {
+ AbstractMultimap.this.clear();
+ }
+ }
+
+ /**
+ * Removes all values for the provided key. Unlike {@link #removeAll}, it
+ * returns the number of removed mappings.
+ */
+ private int removeValuesForKey(Object key) {
+ Collection<V> collection;
+ try {
+ collection = map.remove(key);
+ } catch (NullPointerException e) {
+ return 0;
+ } catch (ClassCastException e) {
+ return 0;
+ }
+
+ int count = 0;
+ if (collection != null) {
+ count = collection.size();
+ collection.clear();
+ totalSize -= count;
+ }
+ return count;
+ }
+
+ /** Iterator across each key, repeating once per value. */
+ private class MultisetEntryIterator implements Iterator<Multiset.Entry<K>> {
+ final Iterator<Map.Entry<K, Collection<V>>> asMapIterator
+ = asMap().entrySet().iterator();
+
+ public boolean hasNext() {
+ return asMapIterator.hasNext();
+ }
+ public Multiset.Entry<K> next() {
+ return new MultisetEntry(asMapIterator.next());
+ }
+ public void remove() {
+ asMapIterator.remove();
+ }
+ }
+
+ private class MultisetEntry extends Multisets.AbstractEntry<K> {
+ final Map.Entry<K, Collection<V>> entry;
+
+ public MultisetEntry(Map.Entry<K, Collection<V>> entry) {
+ this.entry = entry;
+ }
+ public K getElement() {
+ return entry.getKey();
+ }
+ public int getCount() {
+ return entry.getValue().size();
+ }
+ }
+
+ /** Iterator across each key, repeating once per value. */
+ private class MultisetKeyIterator implements Iterator<K> {
+ final Iterator<Map.Entry<K, V>> entryIterator = entries().iterator();
+
+ public boolean hasNext() {
+ return entryIterator.hasNext();
+ }
+ public K next() {
+ return entryIterator.next().getKey();
+ }
+ public void remove() {
+ entryIterator.remove();
+ }
+ }
+
+ private transient Collection<V> valuesCollection;
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The iterator generated by the returned collection traverses the values
+ * for one key, followed by the values of a second key, and so on.
+ */
+ public Collection<V> values() {
+ Collection<V> result = valuesCollection;
+ return (result == null) ? valuesCollection = new Values() : result;
+ }
+
+ private class Values extends AbstractCollection<V> {
+ @Override public Iterator<V> iterator() {
+ return new ValueIterator();
+ }
+ @Override public int size() {
+ return totalSize;
+ }
+
+ // The following methods are included to improve performance.
+
+ @Override public void clear() {
+ AbstractMultimap.this.clear();
+ }
+
+ @Override public boolean contains(Object value) {
+ return containsValue(value);
+ }
+ }
+
+ /** Iterator across all values. */
+ private class ValueIterator implements Iterator<V> {
+ final Iterator<Map.Entry<K, V>> entryIterator = createEntryIterator();
+
+ public boolean hasNext() {
+ return entryIterator.hasNext();
+ }
+ public V next() {
+ return entryIterator.next().getValue();
+ }
+ public void remove() {
+ entryIterator.remove();
+ }
+ }
+
+ private transient Collection<Map.Entry<K, V>> entries;
+
+ // TODO: should we copy this javadoc to each concrete class, so that classes
+ // like LinkedHashMultimap that need to say something different are still
+ // able to {@inheritDoc} all the way from Multimap?
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The iterator generated by the returned collection traverses the values
+ * for one key, followed by the values of a second key, and so on.
+ *
+ * <p>Each entry is an immutable snapshot of a key-value mapping in the
+ * multimap, taken at the time the entry is returned by a method call to the
+ * collection or its iterator.
+ */
+ public Collection<Map.Entry<K, V>> entries() {
+ Collection<Map.Entry<K, V>> result = entries;
+ return (entries == null) ? entries = createEntries() : result;
+ }
+
+ private Collection<Map.Entry<K, V>> createEntries() {
+ // TODO: can we refactor so we're not doing "this instanceof"?
+ return (this instanceof SetMultimap) ? new EntrySet() : new Entries();
+ }
+
+ /** Entries for multimap. */
+ private class Entries extends AbstractCollection<Map.Entry<K, V>> {
+ @Override public Iterator<Map.Entry<K, V>> iterator() {
+ return createEntryIterator();
+ }
+ @Override public int size() {
+ return totalSize;
+ }
+
+ // The following methods are included to improve performance.
+
+ @Override public boolean contains(Object o) {
+ if (!(o instanceof Map.Entry)) {
+ return false;
+ }
+ Map.Entry<?, ?> entry = (Map.Entry<?, ?>) o;
+ return containsEntry(entry.getKey(), entry.getValue());
+ }
+
+ @Override public void clear() {
+ AbstractMultimap.this.clear();
+ }
+
+ @Override public boolean remove(Object o) {
+ if (!(o instanceof Map.Entry)) {
+ return false;
+ }
+ Map.Entry<?, ?> entry = (Map.Entry<?, ?>) o;
+ return AbstractMultimap.this.remove(entry.getKey(), entry.getValue());
+ }
+ }
+
+ /**
+ * Returns an iterator across all key-value map entries, used by {@code
+ * entries().iterator()} and {@code values().iterator()}. The default
+ * behavior, which traverses the values for one key, the values for a second
+ * key, and so on, suffices for most {@code AbstractMultimap} implementations.
+ *
+ * @return an iterator across map entries
+ */
+ Iterator<Map.Entry<K, V>> createEntryIterator() {
+ return new EntryIterator();
+ }
+
+ /** Iterator across all key-value pairs. */
+ private class EntryIterator implements Iterator<Map.Entry<K, V>> {
+ final Iterator<Map.Entry<K, Collection<V>>> keyIterator;
+ K key;
+ Collection<V> collection;
+ Iterator<V> valueIterator;
+
+ EntryIterator() {
+ keyIterator = map.entrySet().iterator();
+ if (keyIterator.hasNext()) {
+ findValueIteratorAndKey();
+ } else {
+ valueIterator = Iterators.emptyModifiableIterator();
+ }
+ }
+
+ void findValueIteratorAndKey() {
+ Map.Entry<K, Collection<V>> entry = keyIterator.next();
+ key = entry.getKey();
+ collection = entry.getValue();
+ valueIterator = collection.iterator();
+ }
+
+ public boolean hasNext() {
+ return keyIterator.hasNext() || valueIterator.hasNext();
+ }
+
+ public Map.Entry<K, V> next() {
+ if (!valueIterator.hasNext()) {
+ findValueIteratorAndKey();
+ }
+ return Maps.immutableEntry(key, valueIterator.next());
+ }
+
+ public void remove() {
+ valueIterator.remove();
+ if (collection.isEmpty()) {
+ keyIterator.remove();
+ }
+ totalSize--;
+ }
+ }
+
+ /** Entry set for a {@link SetMultimap}. */
+ private class EntrySet extends Entries implements Set<Map.Entry<K, V>> {
+ @Override public boolean equals(@Nullable Object object) {
+ return Collections2.setEquals(this, object);
+ }
+ @Override public int hashCode() {
+ return Sets.hashCodeImpl(this);
+ }
+ }
+
+ private transient Map<K, Collection<V>> asMap;
+
+ public Map<K, Collection<V>> asMap() {
+ Map<K, Collection<V>> result = asMap;
+ return (result == null) ? asMap = createAsMap() : result;
+ }
+
+ private Map<K, Collection<V>> createAsMap() {
+ return (map instanceof SortedMap)
+ ? new SortedAsMap((SortedMap<K, Collection<V>>) map) : new AsMap(map);
+ }
+
+ private class AsMap extends AbstractMap<K, Collection<V>> {
+ /**
+ * Usually the same as map, but smaller for the headMap(), tailMap(), or
+ * subMap() of a SortedAsMap.
+ */
+ final transient Map<K, Collection<V>> submap;
+
+ AsMap(Map<K, Collection<V>> submap) {
+ this.submap = submap;
+ }
+
+ transient Set<Map.Entry<K, Collection<V>>> entrySet;
+
+ @Override public Set<Map.Entry<K, Collection<V>>> entrySet() {
+ Set<Map.Entry<K, Collection<V>>> result = entrySet;
+ return (entrySet == null) ? entrySet = new AsMapEntries() : result;
+ }
+
+ // The following methods are included for performance.
+
+ @Override public boolean containsKey(Object key) {
+ return submap.containsKey(key);
+ }
+
+ @Override public Collection<V> get(Object key) {
+ Collection<V> collection = submap.get(key);
+ if (collection == null) {
+ return null;
+ }
+ @SuppressWarnings("unchecked")
+ K k = (K) key;
+ return wrapCollection(k, collection);
+ }
+
+ @Override public Set<K> keySet() {
+ return AbstractMultimap.this.keySet();
+ }
+
+ @Override public Collection<V> remove(Object key) {
+ Collection<V> collection = submap.remove(key);
+ if (collection == null) {
+ return null;
+ }
+
+ Collection<V> output = createCollection();
+ output.addAll(collection);
+ totalSize -= collection.size();
+ collection.clear();
+ return output;
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ return this == object || submap.equals(object);
+ }
+
+ @Override public int hashCode() {
+ return submap.hashCode();
+ }
+
+ @Override public String toString() {
+ return submap.toString();
+ }
+
+ class AsMapEntries extends AbstractSet<Map.Entry<K, Collection<V>>> {
+ @Override public Iterator<Map.Entry<K, Collection<V>>> iterator() {
+ return new AsMapIterator();
+ }
+
+ @Override public int size() {
+ return submap.size();
+ }
+
+ // The following methods are included for performance.
+
+ @Override public boolean contains(Object o) {
+ return submap.entrySet().contains(o);
+ }
+
+ @Override public boolean remove(Object o) {
+ if (!contains(o)) {
+ return false;
+ }
+ Map.Entry<?, ?> entry = (Map.Entry<?, ?>) o;
+ removeValuesForKey(entry.getKey());
+ return true;
+ }
+ }
+
+ /** Iterator across all keys and value collections. */
+ class AsMapIterator implements Iterator<Map.Entry<K, Collection<V>>> {
+ final Iterator<Map.Entry<K, Collection<V>>> delegateIterator
+ = submap.entrySet().iterator();
+ Collection<V> collection;
+
+ public boolean hasNext() {
+ return delegateIterator.hasNext();
+ }
+
+ public Map.Entry<K, Collection<V>> next() {
+ Map.Entry<K, Collection<V>> entry = delegateIterator.next();
+ K key = entry.getKey();
+ collection = entry.getValue();
+ return Maps.immutableEntry(key, wrapCollection(key, collection));
+ }
+
+ public void remove() {
+ delegateIterator.remove();
+ totalSize -= collection.size();
+ collection.clear();
+ }
+ }
+ }
+
+ private class SortedAsMap extends AsMap
+ implements SortedMap<K, Collection<V>> {
+ SortedAsMap(SortedMap<K, Collection<V>> submap) {
+ super(submap);
+ }
+
+ SortedMap<K, Collection<V>> sortedMap() {
+ return (SortedMap<K, Collection<V>>) submap;
+ }
+
+ public Comparator<? super K> comparator() {
+ return sortedMap().comparator();
+ }
+
+ public K firstKey() {
+ return sortedMap().firstKey();
+ }
+
+ public K lastKey() {
+ return sortedMap().lastKey();
+ }
+
+ public SortedMap<K, Collection<V>> headMap(K toKey) {
+ return new SortedAsMap(sortedMap().headMap(toKey));
+ }
+
+ public SortedMap<K, Collection<V>> subMap(K fromKey, K toKey) {
+ return new SortedAsMap(sortedMap().subMap(fromKey, toKey));
+ }
+
+ public SortedMap<K, Collection<V>> tailMap(K fromKey) {
+ return new SortedAsMap(sortedMap().tailMap(fromKey));
+ }
+
+ SortedSet<K> sortedKeySet;
+
+ // returns a SortedSet, even though returning a Set would be sufficient to
+ // satisfy the SortedMap.keySet() interface
+ @Override public SortedSet<K> keySet() {
+ SortedSet<K> result = sortedKeySet;
+ return (result == null)
+ ? sortedKeySet = new SortedKeySet(sortedMap()) : result;
+ }
+ }
+
+ // Comparison and hashing
+
+ @Override public boolean equals(@Nullable Object object) {
+ if (object == this) {
+ return true;
+ }
+ if (object instanceof Multimap) {
+ Multimap<?, ?> that = (Multimap<?, ?>) object;
+ return this.map.equals(that.asMap());
+ }
+ return false;
+ }
+
+ /**
+ * Returns the hash code for this multimap.
+ *
+ * <p>The hash code of a multimap is defined as the hash code of the map view,
+ * as returned by {@link Multimap#asMap}.
+ *
+ * @see Map#hashCode
+ */
+ @Override public int hashCode() {
+ return map.hashCode();
+ }
+
+ /**
+ * Returns a string representation of the multimap, generated by calling
+ * {@code toString} on the map returned by {@link Multimap#asMap}.
+ *
+ * @return a string representation of the multimap
+ */
+ @Override public String toString() {
+ return map.toString();
+ }
+
+ private static final long serialVersionUID = 2447537837011683357L;
+}
diff --git a/src/com/google/common/collect/AbstractMultiset.java b/src/com/google/common/collect/AbstractMultiset.java
new file mode 100644
index 0000000..a0e4383
--- /dev/null
+++ b/src/com/google/common/collect/AbstractMultiset.java
@@ -0,0 +1,295 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Objects;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.collect.Multisets.setCountImpl;
+
+import java.util.AbstractCollection;
+import java.util.AbstractSet;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * This class provides a skeletal implementation of the {@link Multiset}
+ * interface. A new multiset implementation can be created easily by extending
+ * this class and implementing the {@link Multiset#entrySet()} method, plus
+ * optionally overriding {@link #add(Object, int)} and
+ * {@link #remove(Object, int)} to enable modifications to the multiset.
+ *
+ * <p>The {@link #contains}, {@link #containsAll}, {@link #count}, and
+ * {@link #size} implementations all iterate across the set returned by
+ * {@link Multiset#entrySet()}, as do many methods acting on the set returned by
+ * {@link #elementSet()}. Override those methods for better performance.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+abstract class AbstractMultiset<E> extends AbstractCollection<E>
+ implements Multiset<E> {
+ public abstract Set<Entry<E>> entrySet();
+
+ // Query Operations
+
+ @Override public int size() {
+ long sum = 0L;
+ for (Entry<E> entry : entrySet()) {
+ sum += entry.getCount();
+ }
+ return (int) Math.min(sum, Integer.MAX_VALUE);
+ }
+
+ @Override public boolean isEmpty() {
+ return entrySet().isEmpty();
+ }
+
+ @Override public boolean contains(@Nullable Object element) {
+ return elementSet().contains(element);
+ }
+
+ @Override public Iterator<E> iterator() {
+ return new MultisetIterator();
+ }
+
+ private class MultisetIterator implements Iterator<E> {
+ private final Iterator<Entry<E>> entryIterator;
+ private Entry<E> currentEntry;
+ /** Count of subsequent elements equal to current element */
+ private int laterCount;
+ /** Count of all elements equal to current element */
+ private int totalCount;
+ private boolean canRemove;
+
+ MultisetIterator() {
+ this.entryIterator = entrySet().iterator();
+ }
+
+ public boolean hasNext() {
+ return laterCount > 0 || entryIterator.hasNext();
+ }
+
+ public E next() {
+ if (!hasNext()) {
+ throw new NoSuchElementException();
+ }
+ if (laterCount == 0) {
+ currentEntry = entryIterator.next();
+ totalCount = laterCount = currentEntry.getCount();
+ }
+ laterCount--;
+ canRemove = true;
+ return currentEntry.getElement();
+ }
+
+ public void remove() {
+ checkState(canRemove,
+ "no calls to next() since the last call to remove()");
+ if (totalCount == 1) {
+ entryIterator.remove();
+ } else {
+ AbstractMultiset.this.remove(currentEntry.getElement());
+ }
+ totalCount--;
+ canRemove = false;
+ }
+ }
+
+ public int count(Object element) {
+ for (Entry<E> entry : entrySet()) {
+ if (Objects.equal(entry.getElement(), element)) {
+ return entry.getCount();
+ }
+ }
+ return 0;
+ }
+
+ // Modification Operations
+
+ @Override public boolean add(@Nullable E element) {
+ add(element, 1);
+ return true;
+ }
+
+ public int add(E element, int occurrences) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override public boolean remove(Object element) {
+ return remove(element, 1) > 0;
+ }
+
+ public int remove(Object element, int occurrences) {
+ throw new UnsupportedOperationException();
+ }
+
+ public int setCount(E element, int count) {
+ return setCountImpl(this, element, count);
+ }
+
+ public boolean setCount(E element, int oldCount, int newCount) {
+ return setCountImpl(this, element, oldCount, newCount);
+ }
+
+ // Bulk Operations
+
+ @Override public boolean containsAll(Collection<?> elements) {
+ return elementSet().containsAll(elements);
+ }
+
+ @Override public boolean addAll(Collection<? extends E> elementsToAdd) {
+ if (elementsToAdd.isEmpty()) {
+ return false;
+ }
+ if (elementsToAdd instanceof Multiset) {
+ @SuppressWarnings("unchecked")
+ Multiset<? extends E> that = (Multiset<? extends E>) elementsToAdd;
+ for (Entry<? extends E> entry : that.entrySet()) {
+ add(entry.getElement(), entry.getCount());
+ }
+ } else {
+ super.addAll(elementsToAdd);
+ }
+ return true;
+ }
+
+ @Override public boolean removeAll(Collection<?> elementsToRemove) {
+ Collection<?> collection = (elementsToRemove instanceof Multiset)
+ ? ((Multiset<?>) elementsToRemove).elementSet() : elementsToRemove;
+
+ return elementSet().removeAll(collection);
+ // TODO: implement retainAll similarly?
+ }
+
+ @Override public boolean retainAll(Collection<?> elementsToRetain) {
+ checkNotNull(elementsToRetain);
+ Iterator<Entry<E>> entries = entrySet().iterator();
+ boolean modified = false;
+ while (entries.hasNext()) {
+ Entry<E> entry = entries.next();
+ if (!elementsToRetain.contains(entry.getElement())) {
+ entries.remove();
+ modified = true;
+ }
+ }
+ return modified;
+ }
+
+ @Override public void clear() {
+ entrySet().clear();
+ }
+
+ // Views
+
+ private transient Set<E> elementSet;
+
+ public Set<E> elementSet() {
+ Set<E> result = elementSet;
+ if (result == null) {
+ elementSet = result = createElementSet();
+ }
+ return result;
+ }
+
+ /**
+ * Creates a new instance of this multiset's element set, which will be
+ * returned by {@link #elementSet()}.
+ */
+ Set<E> createElementSet() {
+ return new ElementSet();
+ }
+
+ private class ElementSet extends AbstractSet<E> {
+ @Override public Iterator<E> iterator() {
+ final Iterator<Entry<E>> entryIterator = entrySet().iterator();
+ return new Iterator<E>() {
+ public boolean hasNext() {
+ return entryIterator.hasNext();
+ }
+ public E next() {
+ return entryIterator.next().getElement();
+ }
+ public void remove() {
+ entryIterator.remove();
+ }
+ };
+ }
+ @Override public int size() {
+ return entrySet().size();
+ }
+ }
+
+ // Object methods
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>This implementation returns {@code true} if {@code other} is a multiset
+ * of the same size and if, for each element, the two multisets have the same
+ * count.
+ */
+ @Override public boolean equals(@Nullable Object object) {
+ if (object == this) {
+ return true;
+ }
+ if (object instanceof Multiset) {
+ Multiset<?> that = (Multiset<?>) object;
+ /*
+ * We can't simply check whether the entry sets are equal, since that
+ * approach fails when a TreeMultiset has a comparator that returns 0
+ * when passed unequal elements.
+ */
+
+ if (this.size() != that.size()) {
+ return false;
+ }
+ for (Entry<?> entry : that.entrySet()) {
+ if (count(entry.getElement()) != entry.getCount()) {
+ return false;
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>This implementation returns the hash code of {@link
+ * Multiset#entrySet()}.
+ */
+ @Override public int hashCode() {
+ return entrySet().hashCode();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>This implementation returns the result of invoking {@code toString} on
+ * {@link Multiset#entrySet()}.
+ */
+ @Override public String toString() {
+ return entrySet().toString();
+ }
+}
diff --git a/src/com/google/common/collect/AbstractSetMultimap.java b/src/com/google/common/collect/AbstractSetMultimap.java
new file mode 100644
index 0000000..9d488f8
--- /dev/null
+++ b/src/com/google/common/collect/AbstractSetMultimap.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * Basic implementation of the {@link SetMultimap} interface. It's a wrapper
+ * around {@link AbstractMultimap} that converts the returned collections into
+ * {@code Sets}. The {@link #createCollection} method must return a {@code Set}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+abstract class AbstractSetMultimap<K, V>
+ extends AbstractMultimap<K, V> implements SetMultimap<K, V> {
+ /**
+ * Creates a new multimap that uses the provided map.
+ *
+ * @param map place to store the mapping from each key to its corresponding
+ * values
+ */
+ protected AbstractSetMultimap(Map<K, Collection<V>> map) {
+ super(map);
+ }
+
+ @Override abstract Set<V> createCollection();
+
+ @Override public Set<V> get(@Nullable K key) {
+ return (Set<V>) super.get(key);
+ }
+
+ @Override public Set<Map.Entry<K, V>> entries() {
+ return (Set<Map.Entry<K, V>>) super.entries();
+ }
+
+ @Override public Set<V> removeAll(@Nullable Object key) {
+ return (Set<V>) super.removeAll(key);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>Any duplicates in {@code values} will be stored in the multimap once.
+ */
+ @Override public Set<V> replaceValues(
+ @Nullable K key, Iterable<? extends V> values) {
+ return (Set<V>) super.replaceValues(key, values);
+ }
+
+ /**
+ * Stores a key-value pair in the multimap.
+ *
+ * @param key key to store in the multimap
+ * @param value value to store in the multimap
+ * @return {@code true} if the method increased the size of the multimap, or
+ * {@code false} if the multimap already contained the key-value pair
+ */
+ @Override public boolean put(K key, V value) {
+ return super.put(key, value);
+ }
+
+ /**
+ * Compares the specified object to this multimap for equality.
+ *
+ * <p>Two {@code SetMultimap} instances are equal if, for each key, they
+ * contain the same values. Equality does not depend on the ordering of keys
+ * or values.
+ */
+ @Override public boolean equals(@Nullable Object object) {
+ return super.equals(object);
+ }
+
+ private static final long serialVersionUID = 7431625294878419160L;
+}
diff --git a/src/com/google/common/collect/AbstractSortedSetMultimap.java b/src/com/google/common/collect/AbstractSortedSetMultimap.java
new file mode 100644
index 0000000..720ba69
--- /dev/null
+++ b/src/com/google/common/collect/AbstractSortedSetMultimap.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.SortedSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * Basic implementation of the {@link SortedSetMultimap} interface. It's a
+ * wrapper around {@link AbstractMultimap} that converts the returned
+ * collections into sorted sets. The {@link #createCollection} method
+ * must return a {@code SortedSet}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+abstract class AbstractSortedSetMultimap<K, V>
+ extends AbstractSetMultimap<K, V> implements SortedSetMultimap<K, V> {
+ /**
+ * Creates a new multimap that uses the provided map.
+ *
+ * @param map place to store the mapping from each key to its corresponding
+ * values
+ */
+ protected AbstractSortedSetMultimap(Map<K, Collection<V>> map) {
+ super(map);
+ }
+
+ @Override abstract SortedSet<V> createCollection();
+
+ @Override public SortedSet<V> get(@Nullable K key) {
+ return (SortedSet<V>) super.get(key);
+ }
+
+ @Override public SortedSet<V> removeAll(@Nullable Object key) {
+ return (SortedSet<V>) super.removeAll(key);
+ }
+
+ @Override public SortedSet<V> replaceValues(
+ K key, Iterable<? extends V> values) {
+ return (SortedSet<V>) super.replaceValues(key, values);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * Consequently, the values do not follow their natural ordering or the
+ * ordering of the value comparator.
+ */
+ @Override public Collection<V> values() {
+ return super.values();
+ }
+
+ private static final long serialVersionUID = 430848587173315748L;
+} \ No newline at end of file
diff --git a/src/com/google/common/collect/ArrayListMultimap.java b/src/com/google/common/collect/ArrayListMultimap.java
new file mode 100644
index 0000000..f0b7a37
--- /dev/null
+++ b/src/com/google/common/collect/ArrayListMultimap.java
@@ -0,0 +1,158 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.VisibleForTesting;
+import static com.google.common.base.Preconditions.checkArgument;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Implementation of {@code Multimap} that uses an {@code ArrayList} to store
+ * the values for a given key. A {@link HashMap} associates each key with an
+ * {@link ArrayList} of values.
+ *
+ * <p>When iterating through the collections supplied by this class, the
+ * ordering of values for a given key agrees with the order in which the values
+ * were added.
+ *
+ * <p>This multimap allows duplicate key-value pairs. After adding a new
+ * key-value pair equal to an existing key-value pair, the {@code
+ * ArrayListMultimap} will contain entries for both the new value and the old
+ * value.
+ *
+ * <p>Keys and values may be null. All optional multimap methods are supported,
+ * and all returned views are modifiable.
+ *
+ * <p>The lists returned by {@link #get}, {@link #removeAll}, and {@link
+ * #replaceValues} all implement {@link java.util.RandomAccess}.
+ *
+ * <p>This class is not threadsafe when any concurrent operations update the
+ * multimap. Concurrent read operations will work correctly. To allow concurrent
+ * update operations, wrap your multimap with a call to {@link
+ * Multimaps#synchronizedListMultimap}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(serializable = true)
+public final class ArrayListMultimap<K, V> extends AbstractListMultimap<K, V> {
+ // Default from ArrayList
+ private static final int DEFAULT_VALUES_PER_KEY = 10;
+
+ @VisibleForTesting transient int expectedValuesPerKey;
+
+ /**
+ * Creates a new, empty {@code ArrayListMultimap} with the default initial
+ * capacities.
+ */
+ public static <K, V> ArrayListMultimap<K, V> create() {
+ return new ArrayListMultimap<K, V>();
+ }
+
+ /**
+ * Constructs an empty {@code ArrayListMultimap} with enough capacity to hold
+ * the specified numbers of keys and values without resizing.
+ *
+ * @param expectedKeys the expected number of distinct keys
+ * @param expectedValuesPerKey the expected average number of values per key
+ * @throws IllegalArgumentException if {@code expectedKeys} or {@code
+ * expectedValuesPerKey} is negative
+ */
+ public static <K, V> ArrayListMultimap<K, V> create(
+ int expectedKeys, int expectedValuesPerKey) {
+ return new ArrayListMultimap<K, V>(expectedKeys, expectedValuesPerKey);
+ }
+
+ /**
+ * Constructs an {@code ArrayListMultimap} with the same mappings as the
+ * specified multimap.
+ *
+ * @param multimap the multimap whose contents are copied to this multimap
+ */
+ public static <K, V> ArrayListMultimap<K, V> create(
+ Multimap<? extends K, ? extends V> multimap) {
+ return new ArrayListMultimap<K, V>(multimap);
+ }
+
+ private ArrayListMultimap() {
+ super(new HashMap<K, Collection<V>>());
+ expectedValuesPerKey = DEFAULT_VALUES_PER_KEY;
+ }
+
+ private ArrayListMultimap(int expectedKeys, int expectedValuesPerKey) {
+ super(Maps.<K, Collection<V>>newHashMapWithExpectedSize(expectedKeys));
+ checkArgument(expectedValuesPerKey >= 0);
+ this.expectedValuesPerKey = expectedValuesPerKey;
+ }
+
+ private ArrayListMultimap(Multimap<? extends K, ? extends V> multimap) {
+ this(multimap.keySet().size(),
+ (multimap instanceof ArrayListMultimap) ?
+ ((ArrayListMultimap<?, ?>) multimap).expectedValuesPerKey :
+ DEFAULT_VALUES_PER_KEY);
+ putAll(multimap);
+ }
+
+ /**
+ * Creates a new, empty {@code ArrayList} to hold the collection of values for
+ * an arbitrary key.
+ */
+ @Override List<V> createCollection() {
+ return new ArrayList<V>(expectedValuesPerKey);
+ }
+
+ /**
+ * Reduces the memory used by this {@code ArrayListMultimap}, if feasible.
+ */
+ public void trimToSize() {
+ for (Collection<V> collection : backingMap().values()) {
+ ArrayList<V> arrayList = (ArrayList<V>) collection;
+ arrayList.trimToSize();
+ }
+ }
+
+ /**
+ * @serialData expectedValuesPerKey, number of distinct keys, and then for
+ * each distinct key: the key, number of values for that key, and the
+ * key's values
+ */
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ stream.defaultWriteObject();
+ stream.writeInt(expectedValuesPerKey);
+ Serialization.writeMultimap(this, stream);
+ }
+
+ private void readObject(ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+ expectedValuesPerKey = stream.readInt();
+ int distinctKeys = Serialization.readCount(stream);
+ Map<K, Collection<V>> map = Maps.newHashMapWithExpectedSize(distinctKeys);
+ setMap(map);
+ Serialization.populateMultimap(this, stream, distinctKeys);
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/AsynchronousComputationException.java b/src/com/google/common/collect/AsynchronousComputationException.java
new file mode 100644
index 0000000..5fecda0
--- /dev/null
+++ b/src/com/google/common/collect/AsynchronousComputationException.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+/**
+ * Wraps an exception that occured during a computation in a different thread.
+ *
+ * @author Bob Lee
+ */
+public class AsynchronousComputationException extends ComputationException {
+ /**
+ * Creates a new instance with the given cause.
+ */
+ public AsynchronousComputationException(Throwable cause) {
+ super(cause);
+ }
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/BiMap.java b/src/com/google/common/collect/BiMap.java
new file mode 100644
index 0000000..1e80799
--- /dev/null
+++ b/src/com/google/common/collect/BiMap.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * A bimap (or "bidirectional map") is a map that preserves the uniqueness of
+ * its values as well as that of its keys. This constraint enables bimaps to
+ * support an "inverse view", which is another bimap containing the same entries
+ * as this bimap but with reversed keys and values.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+public interface BiMap<K, V> extends Map<K, V> {
+ // Modification Operations
+
+ /**
+ * {@inheritDoc}
+ *
+ * @throws IllegalArgumentException if the given value is already bound to a
+ * different key in this bimap. The bimap will remain unmodified in this
+ * event. To avoid this exception, call {@link #forcePut} instead.
+ */
+ V put(@Nullable K key, @Nullable V value);
+
+ /**
+ * An alternate form of {@code put} that silently removes any existing entry
+ * with the value {@code value} before proceeding with the {@link #put}
+ * operation. If the bimap previously contained the provided key-value
+ * mapping, this method has no effect.
+ *
+ * <p>Note that a successful call to this method could cause the size of the
+ * bimap to increase by one, stay the same, or even decrease by one.
+ *
+ * <p><b>Warning</b>: If an existing entry with this value is removed, the key
+ * for that entry is discarded and not returned.
+ *
+ * @param key the key with which the specified value is to be associated
+ * @param value the value to be associated with the specified key
+ * @return the value which was previously associated with the key, which may
+ * be {@code null}, or {@code null} if there was no previous entry
+ */
+ V forcePut(@Nullable K key, @Nullable V value);
+
+ // Bulk Operations
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p><b>Warning:</b> the results of calling this method may vary depending on
+ * the iteration order of {@code map}.
+ *
+ * @throws IllegalArgumentException if an attempt to {@code put} any
+ * entry fails. Note that some map entries may have been added to the
+ * bimap before the exception was thrown.
+ */
+ void putAll(Map<? extends K, ? extends V> map);
+
+ // Views
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>Because a bimap has unique values, this method returns a {@link Set},
+ * instead of the {@link java.util.Collection} specified in the {@link Map}
+ * interface.
+ */
+ Set<V> values();
+
+ /**
+ * Returns the inverse view of this bimap, which maps each of this bimap's
+ * values to its associated key. The two bimaps are backed by the same data;
+ * any changes to one will appear in the other.
+ *
+ * <p><b>Note:</b>There is no guaranteed correspondence between the iteration
+ * order of a bimap and that of its inverse.
+ *
+ * @return the inverse view of this bimap
+ */
+ BiMap<V, K> inverse();
+}
diff --git a/src/com/google/common/collect/ByFunctionOrdering.java b/src/com/google/common/collect/ByFunctionOrdering.java
new file mode 100644
index 0000000..08829c6
--- /dev/null
+++ b/src/com/google/common/collect/ByFunctionOrdering.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Objects;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.io.Serializable;
+
+import javax.annotation.Nullable;
+
+/**
+ * An ordering that orders elements by applying an order to the result of a
+ * function on those elements.
+ */
+@GwtCompatible(serializable = true)
+final class ByFunctionOrdering<F, T>
+ extends Ordering<F> implements Serializable {
+ final Function<F, ? extends T> function;
+ final Ordering<T> ordering;
+
+ ByFunctionOrdering(
+ Function<F, ? extends T> function, Ordering<T> ordering) {
+ this.function = checkNotNull(function);
+ this.ordering = checkNotNull(ordering);
+ }
+
+ public int compare(F left, F right) {
+ return ordering.compare(function.apply(left), function.apply(right));
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ if (object == this) {
+ return true;
+ }
+ if (object instanceof ByFunctionOrdering) {
+ ByFunctionOrdering<?, ?> that = (ByFunctionOrdering<?, ?>) object;
+ return this.function.equals(that.function)
+ && this.ordering.equals(that.ordering);
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ return Objects.hashCode(function, ordering);
+ }
+
+ @Override public String toString() {
+ return ordering + ".onResultOf(" + function + ")";
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/ClassToInstanceMap.java b/src/com/google/common/collect/ClassToInstanceMap.java
new file mode 100644
index 0000000..57aaa3f
--- /dev/null
+++ b/src/com/google/common/collect/ClassToInstanceMap.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * A map, each entry of which maps a Java
+ * <a href="http://tinyurl.com/2cmwkz">raw type</a> to an instance of that type.
+ * In addition to implementing {@code Map}, the additional type-safe operations
+ * {@link #putInstance} and {@link #getInstance} are available.
+ *
+ * <p>Like any other {@code Map<Class, Object>}, this map may contain entries
+ * for primitive types, and a primitive type and its corresponding wrapper type
+ * may map to different values.
+ *
+ * @param <B> the common supertype that all entries must share; often this is
+ * simply {@link Object}
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+public interface ClassToInstanceMap<B> extends Map<Class<? extends B>, B> {
+ /**
+ * Returns the value the specified class is mapped to, or {@code null} if no
+ * entry for this class is present. This will only return a value that was
+ * bound to this specific class, not a value that may have been bound to a
+ * subtype.
+ */
+ <T extends B> T getInstance(Class<T> type);
+
+ /**
+ * Maps the specified class to the specified value. Does <i>not</i> associate
+ * this value with any of the class's supertypes.
+ *
+ * @return the value previously associated with this class (possibly {@code
+ * null}), or {@code null} if there was no previous entry.
+ */
+ <T extends B> T putInstance(Class<T> type, @Nullable T value);
+}
diff --git a/src/com/google/common/collect/Collections2.java b/src/com/google/common/collect/Collections2.java
new file mode 100644
index 0000000..be8b404
--- /dev/null
+++ b/src/com/google/common/collect/Collections2.java
@@ -0,0 +1,287 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+
+import java.util.AbstractCollection;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * Provides static methods for working with {@code Collection} instances.
+ *
+ * @author Chris Povirk
+ * @author Mike Bostock
+ * @author Jared Levy
+ */
+@GwtCompatible
+public final class Collections2 {
+ private Collections2() {}
+
+ /**
+ * Returns {@code true} if the collection {@code self} contains all of the
+ * elements in the collection {@code c}.
+ *
+ * <p>This method iterates over the specified collection {@code c}, checking
+ * each element returned by the iterator in turn to see if it is contained in
+ * the specified collection {@code self}. If all elements are so contained,
+ * {@code true} is returned, otherwise {@code false}.
+ *
+ * @param self a collection which might contain all elements in {@code c}
+ * @param c a collection whose elements might be contained by {@code self}
+ */
+ // TODO: Make public?
+ static boolean containsAll(Collection<?> self, Collection<?> c) {
+ checkNotNull(self);
+ for (Object o : c) {
+ if (!self.contains(o)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Converts an iterable into a collection. If the iterable is already a
+ * collection, it is returned. Otherwise, an {@link java.util.ArrayList} is
+ * created with the contents of the iterable in the same iteration order.
+ */
+ static <E> Collection<E> toCollection(Iterable<E> iterable) {
+ return (iterable instanceof Collection)
+ ? (Collection<E>) iterable : Lists.newArrayList(iterable);
+ }
+
+ /**
+ * Returns the elements of {@code unfiltered} that satisfy a predicate. The
+ * returned collection is a live view of {@code unfiltered}; changes to one
+ * affect the other.
+ *
+ * <p>The resulting collection's iterator does not support {@code remove()},
+ * but all other collection methods are supported. The collection's
+ * {@code add()} and {@code addAll()} methods throw an
+ * {@link IllegalArgumentException} if an element that doesn't satisfy the
+ * predicate is provided. When methods such as {@code removeAll()} and
+ * {@code clear()} are called on the filtered collection, only elements that
+ * satisfy the filter will be removed from the underlying collection.
+ *
+ * <p>The returned collection isn't threadsafe or serializable, even if
+ * {@code unfiltered} is.
+ *
+ * <p>Many of the filtered collection's methods, such as {@code size()},
+ * iterate across every element in the underlying collection and determine
+ * which elements satisfy the filter. When a live view is <i>not</i> needed,
+ * it may be faster to copy {@code Iterables.filter(unfiltered, predicate)}
+ * and use the copy.
+ */
+ public static <E> Collection<E> filter(
+ Collection<E> unfiltered, Predicate<? super E> predicate) {
+ if (unfiltered instanceof FilteredCollection) {
+ // Support clear(), removeAll(), and retainAll() when filtering a filtered
+ // collection.
+ return ((FilteredCollection<E>) unfiltered).createCombined(predicate);
+ }
+
+ return new FilteredCollection<E>(
+ checkNotNull(unfiltered), checkNotNull(predicate));
+ }
+
+ static class FilteredCollection<E> implements Collection<E> {
+ final Collection<E> unfiltered;
+ final Predicate<? super E> predicate;
+
+ FilteredCollection(Collection<E> unfiltered,
+ Predicate<? super E> predicate) {
+ this.unfiltered = unfiltered;
+ this.predicate = predicate;
+ }
+
+ FilteredCollection<E> createCombined(Predicate<? super E> newPredicate) {
+ return new FilteredCollection<E>(unfiltered,
+ Predicates.<E>and(predicate, newPredicate));
+ // .<E> above needed to compile in JDK 5
+ }
+
+ public boolean add(E element) {
+ checkArgument(predicate.apply(element));
+ return unfiltered.add(element);
+ }
+
+ public boolean addAll(Collection<? extends E> collection) {
+ for (E element : collection) {
+ checkArgument(predicate.apply(element));
+ }
+ return unfiltered.addAll(collection);
+ }
+
+ public void clear() {
+ Iterables.removeIf(unfiltered, predicate);
+ }
+
+ public boolean contains(Object element) {
+ try {
+ // unsafe cast can result in a CCE from predicate.apply(), which we
+ // will catch
+ @SuppressWarnings("unchecked")
+ E e = (E) element;
+ return predicate.apply(e) && unfiltered.contains(element);
+ } catch (NullPointerException e) {
+ return false;
+ } catch (ClassCastException e) {
+ return false;
+ }
+ }
+
+ public boolean containsAll(Collection<?> collection) {
+ for (Object element : collection) {
+ if (!contains(element)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public boolean isEmpty() {
+ return !Iterators.any(unfiltered.iterator(), predicate);
+ }
+
+ public Iterator<E> iterator() {
+ return Iterators.filter(unfiltered.iterator(), predicate);
+ }
+
+ public boolean remove(Object element) {
+ try {
+ // unsafe cast can result in a CCE from predicate.apply(), which we
+ // will catch
+ @SuppressWarnings("unchecked")
+ E e = (E) element;
+ return predicate.apply(e) && unfiltered.remove(element);
+ } catch (NullPointerException e) {
+ return false;
+ } catch (ClassCastException e) {
+ return false;
+ }
+ }
+
+ public boolean removeAll(final Collection<?> collection) {
+ checkNotNull(collection);
+ Predicate<E> combinedPredicate = new Predicate<E>() {
+ public boolean apply(E input) {
+ return predicate.apply(input) && collection.contains(input);
+ }
+ };
+ return Iterables.removeIf(unfiltered, combinedPredicate);
+ }
+
+ public boolean retainAll(final Collection<?> collection) {
+ checkNotNull(collection);
+ Predicate<E> combinedPredicate = new Predicate<E>() {
+ public boolean apply(E input) {
+ return predicate.apply(input) && !collection.contains(input);
+ }
+ };
+ return Iterables.removeIf(unfiltered, combinedPredicate);
+ }
+
+ public int size() {
+ return Iterators.size(iterator());
+ }
+
+ public Object[] toArray() {
+ // creating an ArrayList so filtering happens once
+ return Lists.newArrayList(iterator()).toArray();
+ }
+
+ public <T> T[] toArray(T[] array) {
+ return Lists.newArrayList(iterator()).toArray(array);
+ }
+
+ @Override public String toString() {
+ return Iterators.toString(iterator());
+ }
+ }
+
+ /**
+ * Returns a collection that applies {@code function} to each element of
+ * {@code fromCollection}. The returned collection is a live view of {@code
+ * fromCollection}; changes to one affect the other.
+ *
+ * <p>The returned collection's {@code add()} and {@code addAll()} methods
+ * throw an {@link UnsupportedOperationException}. All other collection
+ * methods are supported, as long as {@code fromCollection} supports them.
+ *
+ * <p>The returned collection isn't threadsafe or serializable, even if
+ * {@code fromCollection} is.
+ *
+ * <p>When a live view is <i>not</i> needed, it may be faster to copy the
+ * transformed collection and use the copy.
+ */
+ public static <F, T> Collection<T> transform(Collection<F> fromCollection,
+ Function<? super F, T> function) {
+ return new TransformedCollection<F, T>(fromCollection, function);
+ }
+
+ static class TransformedCollection<F, T> extends AbstractCollection<T> {
+ final Collection<F> fromCollection;
+ final Function<? super F, ? extends T> function;
+
+ TransformedCollection(Collection<F> fromCollection,
+ Function<? super F, ? extends T> function) {
+ this.fromCollection = checkNotNull(fromCollection);
+ this.function = checkNotNull(function);
+ }
+
+ @Override public void clear() {
+ fromCollection.clear();
+ }
+
+ @Override public boolean isEmpty() {
+ return fromCollection.isEmpty();
+ }
+
+ @Override public Iterator<T> iterator() {
+ return Iterators.transform(fromCollection.iterator(), function);
+ }
+
+ @Override public int size() {
+ return fromCollection.size();
+ }
+ }
+
+ static boolean setEquals(Set<?> thisSet, @Nullable Object object) {
+ if (object == thisSet) {
+ return true;
+ }
+ if (object instanceof Set) {
+ Set<?> thatSet = (Set<?>) object;
+ return thisSet.size() == thatSet.size()
+ && thisSet.containsAll(thatSet);
+ }
+ return false;
+ }
+
+ static final Joiner standardJoiner = Joiner.on(", ");
+}
diff --git a/src/com/google/common/collect/ComparatorOrdering.java b/src/com/google/common/collect/ComparatorOrdering.java
new file mode 100644
index 0000000..2e79e2f
--- /dev/null
+++ b/src/com/google/common/collect/ComparatorOrdering.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+/** An ordering for a pre-existing {@code comparator}. */
+@GwtCompatible(serializable = true)
+final class ComparatorOrdering<T> extends Ordering<T> implements Serializable {
+ final Comparator<T> comparator;
+
+ ComparatorOrdering(Comparator<T> comparator) {
+ this.comparator = checkNotNull(comparator);
+ }
+
+ public int compare(T a, T b) {
+ return comparator.compare(a, b);
+ }
+
+ // Override just to remove a level of indirection from inner loops
+ @Override public int binarySearch(List<? extends T> sortedList, T key) {
+ return Collections.binarySearch(sortedList, key, comparator);
+ }
+
+ // Override just to remove a level of indirection from inner loops
+ @Override public <E extends T> List<E> sortedCopy(Iterable<E> iterable) {
+ List<E> list = Lists.newArrayList(iterable);
+ Collections.sort(list, comparator);
+ return list;
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ if (object == this) {
+ return true;
+ }
+ if (object instanceof ComparatorOrdering) {
+ ComparatorOrdering<?> that = (ComparatorOrdering<?>) object;
+ return this.comparator.equals(that.comparator);
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ return comparator.hashCode();
+ }
+
+ @Override public String toString() {
+ return comparator.toString();
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/CompoundOrdering.java b/src/com/google/common/collect/CompoundOrdering.java
new file mode 100644
index 0000000..7c1e169
--- /dev/null
+++ b/src/com/google/common/collect/CompoundOrdering.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.Comparator;
+import java.util.List;
+
+/** An ordering that tries several comparators in order. */
+@GwtCompatible(serializable = true)
+final class CompoundOrdering<T> extends Ordering<T> implements Serializable {
+ final ImmutableList<Comparator<? super T>> comparators;
+
+ CompoundOrdering(Comparator<? super T> primary,
+ Comparator<? super T> secondary) {
+ this.comparators
+ = ImmutableList.<Comparator<? super T>>of(primary, secondary);
+ }
+
+ CompoundOrdering(Iterable<? extends Comparator<? super T>> comparators) {
+ this.comparators = ImmutableList.copyOf(comparators);
+ }
+
+ CompoundOrdering(List<? extends Comparator<? super T>> comparators,
+ Comparator<? super T> lastComparator) {
+ this.comparators = new ImmutableList.Builder<Comparator<? super T>>()
+ .addAll(comparators).add(lastComparator).build();
+ }
+
+ public int compare(T left, T right) {
+ for (Comparator<? super T> comparator : comparators) {
+ int result = comparator.compare(left, right);
+ if (result != 0) {
+ return result;
+ }
+ }
+ return 0;
+ }
+
+ @Override public boolean equals(Object object) {
+ if (object == this) {
+ return true;
+ }
+ if (object instanceof CompoundOrdering) {
+ CompoundOrdering<?> that = (CompoundOrdering<?>) object;
+ return this.comparators.equals(that.comparators);
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ return comparators.hashCode();
+ }
+
+ @Override public String toString() {
+ return "Ordering.compound(" + comparators + ")";
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/ComputationException.java b/src/com/google/common/collect/ComputationException.java
new file mode 100644
index 0000000..5c29774
--- /dev/null
+++ b/src/com/google/common/collect/ComputationException.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * Wraps an exception that occured during a computation.
+ */
+@GwtCompatible
+public class ComputationException extends RuntimeException {
+ /**
+ * Creates a new instance with the given cause.
+ */
+ public ComputationException(Throwable cause) {
+ super(cause);
+ }
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/ConcurrentHashMultiset.java b/src/com/google/common/collect/ConcurrentHashMultiset.java
new file mode 100644
index 0000000..00480d6
--- /dev/null
+++ b/src/com/google/common/collect/ConcurrentHashMultiset.java
@@ -0,0 +1,485 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.VisibleForTesting;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.collect.Multisets.checkNonnegative;
+import com.google.common.collect.Serialization.FieldSetter;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.util.AbstractSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+import javax.annotation.Nullable;
+
+/**
+ * A multiset that supports concurrent modifications and that provides atomic
+ * versions of most {@code Multiset} operations (exceptions where noted). Null
+ * elements are not supported.
+ *
+ * @author Cliff L. Biffle
+ */
+public final class ConcurrentHashMultiset<E> extends AbstractMultiset<E>
+ implements Serializable {
+ /*
+ * The ConcurrentHashMultiset's atomic operations are implemented in terms of
+ * ConcurrentMap's atomic operations. Many of them, such as add(E, int), are
+ * read-modify-write sequences, and so are implemented as loops that wrap
+ * ConcurrentMap's compare-and-set operations (like putIfAbsent).
+ */
+
+ /** The number of occurrences of each element. */
+ private final transient ConcurrentMap<E, Integer> countMap;
+
+ // This constant allows the deserialization code to set a final field. This
+ // holder class makes sure it is not initialized unless an instance is
+ // deserialized.
+ private static class FieldSettersHolder {
+ @SuppressWarnings("unchecked")
+ // eclipse doesn't like the raw type here, but it's harmless
+ static final FieldSetter<ConcurrentHashMultiset> COUNT_MAP_FIELD_SETTER
+ = Serialization.getFieldSetter(
+ ConcurrentHashMultiset.class, "countMap");
+ }
+
+ /**
+ * Creates a new, empty {@code ConcurrentHashMultiset} using the default
+ * initial capacity, load factor, and concurrency settings.
+ */
+ public static <E> ConcurrentHashMultiset<E> create() {
+ return new ConcurrentHashMultiset<E>(new ConcurrentHashMap<E, Integer>());
+ }
+
+ /**
+ * Creates a new {@code ConcurrentHashMultiset} containing the specified
+ * elements, using the default initial capacity, load factor, and concurrency
+ * settings.
+ *
+ * @param elements the elements that the multiset should contain
+ */
+ public static <E> ConcurrentHashMultiset<E> create(
+ Iterable<? extends E> elements) {
+ ConcurrentHashMultiset<E> multiset = ConcurrentHashMultiset.create();
+ Iterables.addAll(multiset, elements);
+ return multiset;
+ }
+
+ /**
+ * Creates an instance using {@code countMap} to store elements and their
+ * counts.
+ *
+ * <p>This instance will assume ownership of {@code countMap}, and other code
+ * should not maintain references to the map or modify it in any way.
+ *
+ * @param countMap backing map for storing the elements in the multiset and
+ * their counts. It must be empty.
+ * @throws IllegalArgumentException if {@code countMap} is not empty
+ */
+ @VisibleForTesting ConcurrentHashMultiset(
+ ConcurrentMap<E, Integer> countMap) {
+ checkArgument(countMap.isEmpty());
+ this.countMap = countMap;
+ }
+
+ // Query Operations
+
+ /**
+ * Returns the number of occurrences of {@code element} in this multiset.
+ *
+ * @param element the element to look for
+ * @return the nonnegative number of occurrences of the element
+ */
+ @Override public int count(@Nullable Object element) {
+ try {
+ return unbox(countMap.get(element));
+ } catch (NullPointerException e) {
+ return 0;
+ } catch (ClassCastException e) {
+ return 0;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>If the data in the multiset is modified by any other threads during this
+ * method, it is undefined which (if any) of these modifications will be
+ * reflected in the result.
+ */
+ @Override public int size() {
+ long sum = 0L;
+ for (Integer value : countMap.values()) {
+ sum += value;
+ }
+ return (int) Math.min(sum, Integer.MAX_VALUE);
+ }
+
+ /*
+ * Note: the superclass toArray() methods assume that size() gives a correct
+ * answer, which ours does not.
+ */
+
+ @Override public Object[] toArray() {
+ return snapshot().toArray();
+ }
+
+ @Override public <T> T[] toArray(T[] array) {
+ return snapshot().toArray(array);
+ }
+
+ /*
+ * We'd love to use 'new ArrayList(this)' or 'list.addAll(this)', but
+ * either of these would recurse back to us again!
+ */
+ private List<E> snapshot() {
+ List<E> list = Lists.newArrayListWithExpectedSize(size());
+ for (Multiset.Entry<E> entry : entrySet()) {
+ E element = entry.getElement();
+ for (int i = entry.getCount(); i > 0; i--) {
+ list.add(element);
+ }
+ }
+ return list;
+ }
+
+ // Modification Operations
+
+ /**
+ * Adds a number of occurrences of the specified element to this multiset.
+ *
+ * @param element the element to add
+ * @param occurrences the number of occurrences to add
+ * @return the previous count of the element before the operation; possibly
+ * zero
+ * @throws IllegalArgumentException if {@code occurrences} is negative, or if
+ * the resulting amount would exceed {@link Integer#MAX_VALUE}
+ */
+ @Override public int add(E element, int occurrences) {
+ if (occurrences == 0) {
+ return count(element);
+ }
+ checkArgument(occurrences > 0, "Invalid occurrences: %s", occurrences);
+
+ while (true) {
+ int current = count(element);
+ if (current == 0) {
+ if (countMap.putIfAbsent(element, occurrences) == null) {
+ return 0;
+ }
+ } else {
+ checkArgument(occurrences <= Integer.MAX_VALUE - current,
+ "Overflow adding %s occurrences to a count of %s",
+ occurrences, current);
+ int next = current + occurrences;
+ if (countMap.replace(element, current, next)) {
+ return current;
+ }
+ }
+ // If we're still here, there was a race, so just try again.
+ }
+ }
+
+ /**
+ * Removes a number of occurrences of the specified element from this
+ * multiset. If the multiset contains fewer than this number of occurrences to
+ * begin with, all occurrences will be removed.
+ *
+ * @param element the element whose occurrences should be removed
+ * @param occurrences the number of occurrences of the element to remove
+ * @return the count of the element before the operation; possibly zero
+ * @throws IllegalArgumentException if {@code occurrences} is negative
+ */
+ @Override public int remove(@Nullable Object element, int occurrences) {
+ if (occurrences == 0) {
+ return count(element);
+ }
+ checkArgument(occurrences > 0, "Invalid occurrences: %s", occurrences);
+
+ while (true) {
+ int current = count(element);
+ if (current == 0) {
+ return 0;
+ }
+ if (occurrences >= current) {
+ if (countMap.remove(element, current)) {
+ return current;
+ }
+ } else {
+ // We know it's an "E" because it already exists in the map.
+ @SuppressWarnings("unchecked")
+ E casted = (E) element;
+
+ if (countMap.replace(casted, current, current - occurrences)) {
+ return current;
+ }
+ }
+ // If we're still here, there was a race, so just try again.
+ }
+ }
+
+ /**
+ * Removes <b>all</b> occurrences of the specified element from this multiset.
+ * This method complements {@link Multiset#remove(Object)}, which removes only
+ * one occurrence at a time.
+ *
+ * @param element the element whose occurrences should all be removed
+ * @return the number of occurrences successfully removed, possibly zero
+ */
+ private int removeAllOccurrences(@Nullable Object element) {
+ try {
+ return unbox(countMap.remove(element));
+ } catch (NullPointerException e) {
+ return 0;
+ } catch (ClassCastException e) {
+ return 0;
+ }
+ }
+
+ /**
+ * Removes exactly the specified number of occurrences of {@code element}, or
+ * makes no change if this is not possible.
+ *
+ * <p>This method, in contrast to {@link #remove(Object, int)}, has no effect
+ * when the element count is smaller than {@code occurrences}.
+ *
+ * @param element the element to remove
+ * @param occurrences the number of occurrences of {@code element} to remove
+ * @return {@code true} if the removal was possible (including if {@code
+ * occurrences} is zero)
+ */
+ public boolean removeExactly(@Nullable Object element, int occurrences) {
+ if (occurrences == 0) {
+ return true;
+ }
+ checkArgument(occurrences > 0, "Invalid occurrences: %s", occurrences);
+
+ while (true) {
+ int current = count(element);
+ if (occurrences > current) {
+ return false;
+ }
+ if (occurrences == current) {
+ if (countMap.remove(element, occurrences)) {
+ return true;
+ }
+ } else {
+ @SuppressWarnings("unchecked") // it's in the map, must be an "E"
+ E casted = (E) element;
+ if (countMap.replace(casted, current, current - occurrences)) {
+ return true;
+ }
+ }
+ // If we're still here, there was a race, so just try again.
+ }
+ }
+
+ /**
+ * Adds or removes occurrences of {@code element} such that the {@link #count}
+ * of the element becomes {@code count}.
+ *
+ * @return the count of {@code element} in the multiset before this call
+ * @throws IllegalArgumentException if {@code count} is negative
+ */
+ @Override public int setCount(E element, int count) {
+ checkNonnegative(count, "count");
+ return (count == 0)
+ ? removeAllOccurrences(element)
+ : unbox(countMap.put(element, count));
+ }
+
+ /**
+ * Sets the number of occurrences of {@code element} to {@code newCount}, but
+ * only if the count is currently {@code oldCount}. If {@code element} does
+ * not appear in the multiset exactly {@code oldCount} times, no changes will
+ * be made.
+ *
+ * @return {@code true} if the change was successful. This usually indicates
+ * that the multiset has been modified, but not always: in the case that
+ * {@code oldCount == newCount}, the method will return {@code true} if
+ * the condition was met.
+ * @throws IllegalArgumentException if {@code oldCount} or {@code newCount} is
+ * negative
+ */
+ @Override public boolean setCount(E element, int oldCount, int newCount) {
+ checkNonnegative(oldCount, "oldCount");
+ checkNonnegative(newCount, "newCount");
+ if (newCount == 0) {
+ if (oldCount == 0) {
+ // No change to make, but must return true if the element is not present
+ return !countMap.containsKey(element);
+ } else {
+ return countMap.remove(element, oldCount);
+ }
+ }
+ if (oldCount == 0) {
+ return countMap.putIfAbsent(element, newCount) == null;
+ }
+ return countMap.replace(element, oldCount, newCount);
+ }
+
+ // Views
+
+ @Override Set<E> createElementSet() {
+ final Set<E> delegate = countMap.keySet();
+ return new ForwardingSet<E>() {
+ @Override protected Set<E> delegate() {
+ return delegate;
+ }
+ @Override public boolean remove(Object object) {
+ try {
+ return delegate.remove(object);
+ } catch (NullPointerException e) {
+ return false;
+ } catch (ClassCastException e) {
+ return false;
+ }
+ }
+ };
+ }
+
+ private transient EntrySet entrySet;
+
+ @Override public Set<Multiset.Entry<E>> entrySet() {
+ EntrySet result = entrySet;
+ if (result == null) {
+ entrySet = result = new EntrySet();
+ }
+ return result;
+ }
+
+ private class EntrySet extends AbstractSet<Multiset.Entry<E>> {
+ @Override public int size() {
+ return countMap.size();
+ }
+
+ @Override public boolean isEmpty() {
+ return countMap.isEmpty();
+ }
+
+ @Override public boolean contains(Object object) {
+ if (object instanceof Multiset.Entry) {
+ Multiset.Entry<?> entry = (Multiset.Entry<?>) object;
+ Object element = entry.getElement();
+ int entryCount = entry.getCount();
+ return entryCount > 0 && count(element) == entryCount;
+ }
+ return false;
+ }
+
+ @Override public Iterator<Multiset.Entry<E>> iterator() {
+ final Iterator<Map.Entry<E, Integer>> backingIterator
+ = countMap.entrySet().iterator();
+ return new Iterator<Multiset.Entry<E>>() {
+ public boolean hasNext() {
+ return backingIterator.hasNext();
+ }
+
+ public Multiset.Entry<E> next() {
+ Map.Entry<E, Integer> backingEntry = backingIterator.next();
+ return Multisets.immutableEntry(
+ backingEntry.getKey(), backingEntry.getValue());
+ }
+
+ public void remove() {
+ backingIterator.remove();
+ }
+ };
+ }
+
+ /*
+ * Note: the superclass toArray() methods assume that size() gives a correct
+ * answer, which ours does not.
+ */
+
+ @Override public Object[] toArray() {
+ return snapshot().toArray();
+ }
+
+ @Override public <T> T[] toArray(T[] array) {
+ return snapshot().toArray(array);
+ }
+
+ /*
+ * We'd love to use 'new ArrayList(this)' or 'list.addAll(this)', but
+ * either of these would recurse back to us again!
+ */
+ private List<Multiset.Entry<E>> snapshot() {
+ List<Multiset.Entry<E>> list = Lists.newArrayListWithExpectedSize(size());
+ for (Multiset.Entry<E> entry : this) {
+ list.add(entry);
+ }
+ return list;
+ }
+
+ @Override public boolean remove(Object object) {
+ if (object instanceof Multiset.Entry) {
+ Multiset.Entry<?> entry = (Multiset.Entry<?>) object;
+ Object element = entry.getElement();
+ int entryCount = entry.getCount();
+ return countMap.remove(element, entryCount);
+ }
+ return false;
+ }
+
+ @Override public void clear() {
+ countMap.clear();
+ }
+
+ /**
+ * The hash code is the same as countMap's, though the objects aren't equal.
+ */
+ @Override public int hashCode() {
+ return countMap.hashCode();
+ }
+ }
+
+ /**
+ * We use a special form of unboxing that treats null as zero.
+ */
+ private static int unbox(Integer i) {
+ return (i == null) ? 0 : i;
+ }
+
+ /**
+ * @serialData the number of distinct elements, the first element, its count,
+ * the second element, its count, and so on
+ */
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ stream.defaultWriteObject();
+ // creating HashMultiset to handle concurrent changes
+ Serialization.writeMultiset(HashMultiset.create(this), stream);
+ }
+
+ private void readObject(ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+ FieldSettersHolder.COUNT_MAP_FIELD_SETTER.set(
+ this, new ConcurrentHashMap<Object, Object>());
+ Serialization.populateMultiset(this, stream);
+ }
+
+ private static final long serialVersionUID = 0L;
+}
diff --git a/src/com/google/common/collect/ConstrainedMap.java b/src/com/google/common/collect/ConstrainedMap.java
new file mode 100644
index 0000000..8eceef0
--- /dev/null
+++ b/src/com/google/common/collect/ConstrainedMap.java
@@ -0,0 +1,155 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * Factory and utilities pertaining to the {@code MapConstraint} interface.
+ *
+ * @author Mike Bostock
+ */
+@GwtCompatible
+class ConstrainedMap<K, V> extends ForwardingMap<K, V> {
+ final Map<K, V> delegate;
+ final MapConstraint<? super K, ? super V> constraint;
+ private volatile Set<Entry<K, V>> entrySet;
+
+ ConstrainedMap(
+ Map<K, V> delegate, MapConstraint<? super K, ? super V> constraint) {
+ this.delegate = checkNotNull(delegate);
+ this.constraint = checkNotNull(constraint);
+ }
+
+ @Override protected Map<K, V> delegate() {
+ return delegate;
+ }
+ @Override public Set<Entry<K, V>> entrySet() {
+ if (entrySet == null) {
+ entrySet = constrainedEntrySet(delegate.entrySet(), constraint);
+ }
+ return entrySet;
+ }
+ @Override public V put(K key, V value) {
+ constraint.checkKeyValue(key, value);
+ return delegate.put(key, value);
+ }
+ @Override public void putAll(Map<? extends K, ? extends V> map) {
+ for (Entry<? extends K, ? extends V> entry : map.entrySet()) {
+ put(entry.getKey(), entry.getValue());
+ }
+ }
+
+ private static <K, V> Entry<K, V> constrainedEntry(
+ final Entry<K, V> entry,
+ final MapConstraint<? super K, ? super V> constraint) {
+ checkNotNull(entry);
+ checkNotNull(constraint);
+ return new ForwardingMapEntry<K, V>() {
+ @Override protected Entry<K, V> delegate() {
+ return entry;
+ }
+ @Override public V setValue(V value) {
+ constraint.checkKeyValue(getKey(), value);
+ return entry.setValue(value);
+ }
+ };
+ }
+
+ private static <K, V> Set<Entry<K, V>> constrainedEntrySet(
+ Set<Entry<K, V>> entries,
+ MapConstraint<? super K, ? super V> constraint) {
+ return new ConstrainedEntrySet<K, V>(entries, constraint);
+ }
+
+ private static class ConstrainedEntries<K, V>
+ extends ForwardingCollection<Entry<K, V>> {
+ final MapConstraint<? super K, ? super V> constraint;
+ final Collection<Entry<K, V>> entries;
+
+ ConstrainedEntries(Collection<Entry<K, V>> entries,
+ MapConstraint<? super K, ? super V> constraint) {
+ this.entries = entries;
+ this.constraint = constraint;
+ }
+ @Override protected Collection<Entry<K, V>> delegate() {
+ return entries;
+ }
+
+ @Override public Iterator<Entry<K, V>> iterator() {
+ final Iterator<Entry<K, V>> iterator = entries.iterator();
+ return new ForwardingIterator<Entry<K, V>>() {
+ @Override public Entry<K, V> next() {
+ return constrainedEntry(iterator.next(), constraint);
+ }
+ @Override protected Iterator<Entry<K, V>> delegate() {
+ return iterator;
+ }
+ };
+ }
+
+ // See Collections.CheckedMap.CheckedEntrySet for details on attacks.
+
+ @Override public Object[] toArray() {
+ return ObjectArrays.toArrayImpl(this);
+ }
+ @Override public <T> T[] toArray(T[] array) {
+ return ObjectArrays.toArrayImpl(this, array);
+ }
+ @Override public boolean contains(Object o) {
+ return Maps.containsEntryImpl(delegate(), o);
+ }
+ @Override public boolean containsAll(Collection<?> c) {
+ return Collections2.containsAll(this, c);
+ }
+ @Override public boolean remove(Object o) {
+ return Maps.removeEntryImpl(delegate(), o);
+ }
+ @Override public boolean removeAll(Collection<?> c) {
+ return Iterators.removeAll(iterator(), c);
+ }
+ @Override public boolean retainAll(Collection<?> c) {
+ return Iterators.retainAll(iterator(), c);
+ }
+ }
+
+ static class ConstrainedEntrySet<K, V>
+ extends ConstrainedEntries<K, V> implements Set<Entry<K, V>> {
+ ConstrainedEntrySet(Set<Entry<K, V>> entries,
+ MapConstraint<? super K, ? super V> constraint) {
+ super(entries, constraint);
+ }
+
+ // See Collections.CheckedMap.CheckedEntrySet for details on attacks.
+
+ @Override public boolean equals(@Nullable Object object) {
+ return Collections2.setEquals(this, object);
+ }
+
+ @Override public int hashCode() {
+ return Sets.hashCodeImpl(this);
+ }
+ }
+}
diff --git a/src/com/google/common/collect/CustomConcurrentHashMap.java b/src/com/google/common/collect/CustomConcurrentHashMap.java
new file mode 100644
index 0000000..d9089ba
--- /dev/null
+++ b/src/com/google/common/collect/CustomConcurrentHashMap.java
@@ -0,0 +1,2161 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.base.Function;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.lang.reflect.Array;
+import java.lang.reflect.Field;
+import java.util.AbstractCollection;
+import java.util.AbstractMap;
+import java.util.AbstractSet;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.atomic.AtomicReferenceArray;
+import java.util.concurrent.locks.ReentrantLock;
+
+import javax.annotation.Nullable;
+
+/**
+ * A framework for concurrent hash map implementations. The
+ * CustomConcurrentHashMap class itself is not extensible and does not contain
+ * any methods. Use {@link Builder} to create a custom concurrent hash map
+ * instance. Client libraries implement {@link Strategy}, and this class
+ * provides the surrounding concurrent data structure which implements {@link
+ * ConcurrentMap}. Additionally supports implementing maps where {@link
+ * Map#get} atomically computes values on demand (see {@link
+ * Builder#buildComputingMap(CustomConcurrentHashMap.ComputingStrategy,
+ * Function)}).
+ *
+ * <p>The resulting hash table supports full concurrency of retrievals and
+ * adjustable expected concurrency for updates. Even though all operations are
+ * thread-safe, retrieval operations do <i>not</i> entail locking,
+ * and there is <i>not</i> any support for locking the entire table
+ * in a way that prevents all access.
+ *
+ * <p>Retrieval operations (including {@link Map#get}) generally do not
+ * block, so may overlap with update operations (including
+ * {@link Map#put} and {@link Map#remove}). Retrievals reflect the results
+ * of the most recently <i>completed</i> update operations holding
+ * upon their onset. For aggregate operations such as {@link Map#putAll}
+ * and {@link Map#clear}, concurrent retrievals may reflect insertion or
+ * removal of only some entries. Similarly, iterators return elements
+ * reflecting the state of the hash table at some point at or since the
+ * creation of the iterator. They do <i>not</i> throw
+ * {@link java.util.ConcurrentModificationException}. However, iterators can
+ * only be used by one thread at a time.
+ *
+ * <p>The resulting {@link ConcurrentMap} and its views and iterators implement
+ * all of the <i>optional</i> methods of the {@link java.util.Map} and {@link
+ * java.util.Iterator} interfaces. Partially reclaimed entries are never
+ * exposed through the views or iterators.
+ *
+ * <p>For example, the following strategy emulates the behavior of
+ * {@link java.util.concurrent.ConcurrentHashMap}:
+ *
+ * <pre> {@code
+ * class ConcurrentHashMapStrategy<K, V>
+ * implements CustomConcurrentHashMap.Strategy<K, V,
+ * InternalEntry<K, V>>, Serializable {
+ * public InternalEntry<K, V> newEntry(K key, int hash,
+ * InternalEntry<K, V> next) {
+ * return new InternalEntry<K, V>(key, hash, null, next);
+ * }
+ * public InternalEntry<K, V> copyEntry(K key,
+ * InternalEntry<K, V> original, InternalEntry<K, V> next) {
+ * return new InternalEntry<K, V>(key, original.hash, original.value, next);
+ * }
+ * public void setValue(InternalEntry<K, V> entry, V value) {
+ * entry.value = value;
+ * }
+ * public V getValue(InternalEntry<K, V> entry) { return entry.value; }
+ * public boolean equalKeys(K a, Object b) { return a.equals(b); }
+ * public boolean equalValues(V a, Object b) { return a.equals(b); }
+ * public int hashKey(Object key) { return key.hashCode(); }
+ * public K getKey(InternalEntry<K, V> entry) { return entry.key; }
+ * public InternalEntry<K, V> getNext(InternalEntry<K, V> entry) {
+ * return entry.next;
+ * }
+ * public int getHash(InternalEntry<K, V> entry) { return entry.hash; }
+ * public void setInternals(CustomConcurrentHashMap.Internals<K, V,
+ * InternalEntry<K, V>> internals) {} // ignored
+ * }
+ *
+ * class InternalEntry<K, V> {
+ * final K key;
+ * final int hash;
+ * volatile V value;
+ * final InternalEntry<K, V> next;
+ * InternalEntry(K key, int hash, V value, InternalEntry<K, V> next) {
+ * this.key = key;
+ * this.hash = hash;
+ * this.value = value;
+ * this.next = next;
+ * }
+ * }
+ * }</pre>
+ *
+ * To create a {@link java.util.concurrent.ConcurrentMap} using the strategy
+ * above:
+ *
+ * <pre>{@code
+ * ConcurrentMap<K, V> map = new CustomConcurrentHashMap.Builder()
+ * .build(new ConcurrentHashMapStrategy<K, V>());
+ * }</pre>
+ *
+ * @author Bob Lee
+ * @author Doug Lea
+ */
+final class CustomConcurrentHashMap {
+
+ /** Prevents instantiation. */
+ private CustomConcurrentHashMap() {}
+
+ /**
+ * Builds a custom concurrent hash map.
+ */
+ static final class Builder {
+ private static final int DEFAULT_INITIAL_CAPACITY = 16;
+ private static final int DEFAULT_CONCURRENCY_LEVEL = 16;
+
+ private static final int UNSET_INITIAL_CAPACITY = -1;
+ private static final int UNSET_CONCURRENCY_LEVEL = -1;
+
+ int initialCapacity = UNSET_INITIAL_CAPACITY;
+ int concurrencyLevel = UNSET_CONCURRENCY_LEVEL;
+
+ /**
+ * Sets a custom initial capacity (defaults to 16). Resizing this or any
+ * other kind of hash table is a relatively slow operation, so, when
+ * possible, it is a good idea to provide estimates of expected table
+ * sizes.
+ *
+ * @throws IllegalArgumentException if initialCapacity < 0
+ */
+ public Builder initialCapacity(int initialCapacity) {
+ if (this.initialCapacity != UNSET_INITIAL_CAPACITY) {
+ throw new IllegalStateException(
+ "initial capacity was already set to " + this.initialCapacity);
+ }
+ if (initialCapacity < 0) {
+ throw new IllegalArgumentException();
+ }
+ this.initialCapacity = initialCapacity;
+ return this;
+ }
+
+ /**
+ * Guides the allowed concurrency among update operations. Used as a
+ * hint for internal sizing. The table is internally partitioned to try to
+ * permit the indicated number of concurrent updates without contention.
+ * Because placement in hash tables is essentially random, the actual
+ * concurrency will vary. Ideally, you should choose a value to accommodate
+ * as many threads as will ever concurrently modify the table. Using a
+ * significantly higher value than you need can waste space and time,
+ * and a significantly lower value can lead to thread contention. But
+ * overestimates and underestimates within an order of magnitude do
+ * not usually have much noticeable impact. A value of one is
+ * appropriate when it is known that only one thread will modify and
+ * all others will only read. Defaults to {@literal 16}.
+ *
+ * @throws IllegalArgumentException if concurrencyLevel < 0
+ */
+ public Builder concurrencyLevel(int concurrencyLevel) {
+ if (this.concurrencyLevel != UNSET_CONCURRENCY_LEVEL) {
+ throw new IllegalStateException(
+ "concurrency level was already set to " + this.concurrencyLevel);
+ }
+ if (concurrencyLevel <= 0) {
+ throw new IllegalArgumentException();
+ }
+ this.concurrencyLevel = concurrencyLevel;
+ return this;
+ }
+
+ /**
+ * Creates a new concurrent hash map backed by the given strategy.
+ *
+ * @param strategy used to implement and manipulate the entries
+ *
+ * @param <K> the type of keys to be stored in the returned map
+ * @param <V> the type of values to be stored in the returned map
+ * @param <E> the type of internal entry to be stored in the returned map
+ *
+ * @throws NullPointerException if strategy is null
+ */
+ public <K, V, E> ConcurrentMap<K, V> buildMap(Strategy<K, V, E> strategy) {
+ if (strategy == null) {
+ throw new NullPointerException("strategy");
+ }
+ return new Impl<K, V, E>(strategy, this);
+ }
+
+ /**
+ * Creates a {@link ConcurrentMap}, backed by the given strategy, that
+ * supports atomic, on-demand computation of values. {@link Map#get}
+ * returns the value corresponding to the given key, atomically computes
+ * it using the computer function passed to this builder, or waits for
+ * another thread to compute the value if necessary. Only one value will
+ * be computed for each key at a given time.
+ *
+ * <p>If an entry's value has not finished computing yet, query methods
+ * besides {@link java.util.Map#get} return immediately as if an entry
+ * doesn't exist. In other words, an entry isn't externally visible until
+ * the value's computation completes.
+ *
+ * <p>{@link Map#get} in the returned map implementation throws:
+ * <ul>
+ * <li>{@link NullPointerException} if the key is null or the
+ * computer returns null</li>
+ * <li>or {@link ComputationException} wrapping an exception thrown by the
+ * computation</li>
+ * </ul>
+ *
+ * <p><b>Note:</b> Callers of {@code get()} <i>must</i> ensure that the key
+ * argument is of type {@code K}. {@code Map.get()} takes {@code Object},
+ * so the key type is not checked at compile time. Passing an object of
+ * a type other than {@code K} can result in that object being unsafely
+ * passed to the computer function as type {@code K} not to mention the
+ * unsafe key being stored in the map.
+ *
+ * @param strategy used to implement and manipulate the entries
+ * @param computer used to compute values for keys
+ *
+ * @param <K> the type of keys to be stored in the returned map
+ * @param <V> the type of values to be stored in the returned map
+ * @param <E> the type of internal entry to be stored in the returned map
+ *
+ * @throws NullPointerException if strategy or computer is null
+ */
+ public <K, V, E> ConcurrentMap<K, V> buildComputingMap(
+ ComputingStrategy<K, V, E> strategy,
+ Function<? super K, ? extends V> computer) {
+ if (strategy == null) {
+ throw new NullPointerException("strategy");
+ }
+ if (computer == null) {
+ throw new NullPointerException("computer");
+ }
+
+ return new ComputingImpl<K, V, E>(strategy, this, computer);
+ }
+
+ int getInitialCapacity() {
+ return (initialCapacity == UNSET_INITIAL_CAPACITY)
+ ? DEFAULT_INITIAL_CAPACITY : initialCapacity;
+ }
+
+ int getConcurrencyLevel() {
+ return (concurrencyLevel == UNSET_CONCURRENCY_LEVEL)
+ ? DEFAULT_CONCURRENCY_LEVEL : concurrencyLevel;
+ }
+ }
+
+ /**
+ * Implements behavior specific to the client's concurrent hash map
+ * implementation. Used by the framework to create new entries and perform
+ * operations on them.
+ *
+ * <p>Method parameters are never null unless otherwise specified.
+ *
+ * <h3>Partially Reclaimed Entries</h3>
+ *
+ * <p>This class does <i>not</i> allow {@code null} to be used as a key.
+ * Setting values to null is not permitted, but entries may have null keys
+ * or values for various reasons. For example, the key or value may have
+ * been garbage collected or reclaimed through other means.
+ * CustomConcurrentHashMap treats entries with null keys and values as
+ * "partially reclaimed" and ignores them for the most part. Entries may
+ * enter a partially reclaimed state but they must not leave it. Partially
+ * reclaimed entries will not be copied over during table expansions, for
+ * example. Strategy implementations should proactively remove partially
+ * reclaimed entries so that {@link Map#isEmpty} and {@link Map#size()}
+ * return up-to-date results.
+ *
+ * @param <K> the type of keys to be stored in the returned map
+ * @param <V> the type of values to be stored in the returned map
+ * @param <E> internal entry type, not directly exposed to clients in map
+ * views
+ */
+ public interface Strategy<K, V, E> {
+
+ /**
+ * Constructs a new entry for the given key with a pointer to the given
+ * next entry.
+ *
+ * <p>This method may return different entry implementations
+ * depending upon whether next is null or not. For example, if next is
+ * null (as will often be the case), this factory might use an entry
+ * class that doesn't waste memory on an unnecessary field.
+ *
+ * @param key for this entry
+ * @param hash of key returned by {@link #hashKey}
+ * @param next entry (used when implementing a hash bucket as a linked
+ * list, for example), possibly null
+ * @return a new entry
+ */
+ abstract E newEntry(K key, int hash, E next);
+
+ /**
+ * Creates a copy of the given entry pointing to the given next entry.
+ * Copies the value and any other implementation-specific state from
+ * {@code original} to the returned entry. For example,
+ * CustomConcurrentHashMap might use this method when removing other
+ * entries or expanding the internal table.
+ *
+ * @param key for {@code original} as well as the returned entry.
+ * Explicitly provided here to prevent reclamation of the key at an
+ * inopportune time in implementations that don't otherwise keep
+ * a strong reference to the key.
+ * @param original entry from which the value and other
+ * implementation-specific state should be copied
+ * @param newNext the next entry the new entry should point to, possibly
+ * null
+ */
+ E copyEntry(K key, E original, E newNext);
+
+ /**
+ * Sets the value of an entry using volatile semantics. Values are set
+ * synchronously on a per-entry basis.
+ *
+ * @param entry to set the value on
+ * @param value to set
+ */
+ void setValue(E entry, V value);
+
+ /**
+ * Gets the value of an entry using volatile semantics.
+ *
+ * @param entry to get the value from
+ */
+ V getValue(E entry);
+
+ /**
+ * Returns true if the two given keys are equal, false otherwise. Neither
+ * key will be null.
+ *
+ * @param a key from inside the map
+ * @param b key passed from caller, not necesarily of type K
+ *
+ * @see Object#equals the same contractual obligations apply here
+ */
+ boolean equalKeys(K a, Object b);
+
+ /**
+ * Returns true if the two given values are equal, false otherwise. Neither
+ * value will be null.
+ *
+ * @param a value from inside the map
+ * @param b value passed from caller, not necesarily of type V
+ *
+ * @see Object#equals the same contractual obligations apply here
+ */
+ boolean equalValues(V a, Object b);
+
+ /**
+ * Returns a hash code for the given key.
+ *
+ * @see Object#hashCode the same contractual obligations apply here
+ */
+ int hashKey(Object key);
+
+ /**
+ * Gets the key for the given entry. This may return null (for example,
+ * if the key was reclaimed by the garbage collector).
+ *
+ * @param entry to get key from
+ * @return key from the given entry
+ */
+ K getKey(E entry);
+
+ /**
+ * Gets the next entry relative to the given entry, the exact same entry
+ * that was provided to {@link Strategy#newEntry} when the given entry was
+ * created.
+ *
+ * @return the next entry or null if null was passed to
+ * {@link Strategy#newEntry}
+ */
+ E getNext(E entry);
+
+ /**
+ * Returns the hash code that was passed to {@link Strategy#newEntry})
+ * when the given entry was created.
+ */
+ int getHash(E entry);
+
+// TODO:
+// /**
+// * Notifies the strategy that an entry has been removed from the map.
+// *
+// * @param entry that was recently removed
+// */
+// void remove(E entry);
+
+ /**
+ * Provides an API for interacting directly with the map's internal
+ * entries to this strategy. Invoked once when the map is created.
+ * Strategies that don't need access to the map's internal entries
+ * can simply ignore the argument.
+ *
+ * @param internals of the map, enables direct interaction with the
+ * internal entries
+ */
+ void setInternals(Internals<K, V, E> internals);
+ }
+
+ /**
+ * Provides access to a map's internal entries.
+ */
+ public interface Internals<K, V, E> {
+
+// TODO:
+// /**
+// * Returns a set view of the internal entries.
+// */
+// Set<E> entrySet();
+
+ /**
+ * Returns the internal entry corresponding to the given key from the map.
+ *
+ * @param key to retrieve entry for
+ *
+ * @throws NullPointerException if key is null
+ */
+ E getEntry(K key);
+
+ /**
+ * Removes the given entry from the map if the value of the entry in the
+ * map matches the given value.
+ *
+ * @param entry to remove
+ * @param value entry must have for the removal to succeed
+ *
+ * @throws NullPointerException if entry is null
+ */
+ boolean removeEntry(E entry, @Nullable V value);
+
+ /**
+ * Removes the given entry from the map.
+ *
+ * @param entry to remove
+ *
+ * @throws NullPointerException if entry is null
+ */
+ boolean removeEntry(E entry);
+ }
+
+ /**
+ * Extends {@link Strategy} to add support for computing values on-demand.
+ * Implementations should typically intialize the entry's value to a
+ * placeholder value in {@link #newEntry(Object, int, Object)} so that
+ * {@link #waitForValue(Object)} can tell the difference between a
+ * pre-intialized value and an in-progress computation. {@link
+ * #copyEntry(Object, Object, Object)} must detect and handle the case where
+ * an entry is copied in the middle of a computation. Implementations can
+ * throw {@link UnsupportedOperationException} in {@link #setValue(Object,
+ * Object)} if they wish to prevent users from setting values directly.
+ *
+ * @see Builder#buildComputingMap(CustomConcurrentHashMap.ComputingStrategy,
+ * Function)
+ */
+ public interface ComputingStrategy<K, V, E> extends Strategy<K, V, E> {
+
+ /**
+ * Computes a value for the given key and stores it in the given entry.
+ * Called as a result of {@link Map#get}. If this method throws an
+ * exception, CustomConcurrentHashMap will remove the entry and retry
+ * the computation on subsequent requests.
+ *
+ * @param entry that was created
+ * @param computer passed to {@link Builder#buildMap}
+ *
+ * @throws ComputationException if the computation threw an exception
+ * @throws NullPointerException if the computer returned null
+ *
+ * @return the computed value
+ */
+ V compute(K key, E entry, Function<? super K, ? extends V> computer);
+
+ /**
+ * Gets a value from an entry waiting for the value to be set by {@link
+ * #compute} if necessary. Returns null if a value isn't available at
+ * which point CustomConcurrentHashMap tries to compute a new value.
+ *
+ * @param entry to return value from
+ * @return stored value or null if the value isn't available
+ *
+ * @throws InterruptedException if the thread was interrupted while
+ * waiting
+ */
+ V waitForValue(E entry) throws InterruptedException;
+ }
+
+ /**
+ * Applies a supplemental hash function to a given hash code, which defends
+ * against poor quality hash functions. This is critical when the
+ * concurrent hash map uses power-of-two length hash tables, that otherwise
+ * encounter collisions for hash codes that do not differ in lower or upper
+ * bits.
+ *
+ * @param h hash code
+ */
+ private static int rehash(int h) {
+ // Spread bits to regularize both segment and index locations,
+ // using variant of single-word Wang/Jenkins hash.
+ h += (h << 15) ^ 0xffffcd7d;
+ h ^= (h >>> 10);
+ h += (h << 3);
+ h ^= (h >>> 6);
+ h += (h << 2) + (h << 14);
+ return h ^ (h >>> 16);
+ }
+
+ /** The concurrent hash map implementation. */
+ static class Impl<K, V, E> extends AbstractMap<K, V>
+ implements ConcurrentMap<K, V>, Serializable {
+
+ /*
+ * The basic strategy is to subdivide the table among Segments,
+ * each of which itself is a concurrently readable hash table.
+ */
+
+ /* ---------------- Constants -------------- */
+
+ /**
+ * The maximum capacity, used if a higher value is implicitly specified by
+ * either of the constructors with arguments. MUST be a power of two <=
+ * 1<<30 to ensure that entries are indexable using ints.
+ */
+ static final int MAXIMUM_CAPACITY = 1 << 30;
+
+ /**
+ * The maximum number of segments to allow; used to bound constructor
+ * arguments.
+ */
+ static final int MAX_SEGMENTS = 1 << 16; // slightly conservative
+
+ /**
+ * Number of unsynchronized retries in size and containsValue methods before
+ * resorting to locking. This is used to avoid unbounded retries if tables
+ * undergo continuous modification which would make it impossible to obtain
+ * an accurate result.
+ */
+ static final int RETRIES_BEFORE_LOCK = 2;
+
+ /* ---------------- Fields -------------- */
+
+ /**
+ * The strategy used to implement this map.
+ */
+ final Strategy<K, V, E> strategy;
+
+ /**
+ * Mask value for indexing into segments. The upper bits of a key's hash
+ * code are used to choose the segment.
+ */
+ final int segmentMask;
+
+ /**
+ * Shift value for indexing within segments. Helps prevent entries that
+ * end up in the same segment from also ending up in the same bucket.
+ */
+ final int segmentShift;
+
+ /**
+ * The segments, each of which is a specialized hash table
+ */
+ final Segment[] segments;
+
+ /**
+ * Creates a new, empty map with the specified strategy, initial capacity,
+ * load factor and concurrency level.
+ */
+ Impl(Strategy<K, V, E> strategy, Builder builder) {
+ int concurrencyLevel = builder.getConcurrencyLevel();
+ int initialCapacity = builder.getInitialCapacity();
+
+ if (concurrencyLevel > MAX_SEGMENTS) {
+ concurrencyLevel = MAX_SEGMENTS;
+ }
+
+ // Find power-of-two sizes best matching arguments
+ int segmentShift = 0;
+ int segmentCount = 1;
+ while (segmentCount < concurrencyLevel) {
+ ++segmentShift;
+ segmentCount <<= 1;
+ }
+ this.segmentShift = 32 - segmentShift;
+ segmentMask = segmentCount - 1;
+ this.segments = newSegmentArray(segmentCount);
+
+ if (initialCapacity > MAXIMUM_CAPACITY) {
+ initialCapacity = MAXIMUM_CAPACITY;
+ }
+
+ int segmentCapacity = initialCapacity / segmentCount;
+ if (segmentCapacity * segmentCount < initialCapacity) {
+ ++segmentCapacity;
+ }
+
+ int segmentSize = 1;
+ while (segmentSize < segmentCapacity) {
+ segmentSize <<= 1;
+ }
+ for (int i = 0; i < this.segments.length; ++i) {
+ this.segments[i] = new Segment(segmentSize);
+ }
+
+ this.strategy = strategy;
+
+ strategy.setInternals(new InternalsImpl());
+ }
+
+ int hash(Object key) {
+ int h = strategy.hashKey(key);
+ return rehash(h);
+ }
+
+ class InternalsImpl implements Internals<K, V, E>, Serializable {
+
+ static final long serialVersionUID = 0;
+
+ public E getEntry(K key) {
+ if (key == null) {
+ throw new NullPointerException("key");
+ }
+ int hash = hash(key);
+ return segmentFor(hash).getEntry(key, hash);
+ }
+
+ public boolean removeEntry(E entry, V value) {
+ if (entry == null) {
+ throw new NullPointerException("entry");
+ }
+ int hash = strategy.getHash(entry);
+ return segmentFor(hash).removeEntry(entry, hash, value);
+ }
+
+ public boolean removeEntry(E entry) {
+ if (entry == null) {
+ throw new NullPointerException("entry");
+ }
+ int hash = strategy.getHash(entry);
+ return segmentFor(hash).removeEntry(entry, hash);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ Segment[] newSegmentArray(int ssize) {
+ // Note: This is the only way I could figure out how to create
+ // a segment array (the compile has a tough time with arrays of
+ // inner classes of generic types apparently). Safe because we're
+ // restricting what can go in the array and no one has an
+ // unrestricted reference.
+ return (Segment[]) Array.newInstance(Segment.class, ssize);
+ }
+
+ /* ---------------- Small Utilities -------------- */
+
+ /**
+ * Returns the segment that should be used for key with given hash
+ *
+ * @param hash the hash code for the key
+ * @return the segment
+ */
+ Segment segmentFor(int hash) {
+ return segments[(hash >>> segmentShift) & segmentMask];
+ }
+
+ /* ---------------- Inner Classes -------------- */
+
+ /**
+ * Segments are specialized versions of hash tables. This subclasses from
+ * ReentrantLock opportunistically, just to simplify some locking and avoid
+ * separate construction.
+ */
+ @SuppressWarnings("serial") // This class is never serialized.
+ final class Segment extends ReentrantLock {
+
+ /*
+ * Segments maintain a table of entry lists that are ALWAYS
+ * kept in a consistent state, so can be read without locking.
+ * Next fields of nodes are immutable (final). All list
+ * additions are performed at the front of each bin. This
+ * makes it easy to check changes, and also fast to traverse.
+ * When nodes would otherwise be changed, new nodes are
+ * created to replace them. This works well for hash tables
+ * since the bin lists tend to be short. (The average length
+ * is less than two for the default load factor threshold.)
+ *
+ * Read operations can thus proceed without locking, but rely
+ * on selected uses of volatiles to ensure that completed
+ * write operations performed by other threads are
+ * noticed. For most purposes, the "count" field, tracking the
+ * number of elements, serves as that volatile variable
+ * ensuring visibility. This is convenient because this field
+ * needs to be read in many read operations anyway:
+ *
+ * - All (unsynchronized) read operations must first read the
+ * "count" field, and should not look at table entries if
+ * it is 0.
+ *
+ * - All (synchronized) write operations should write to
+ * the "count" field after structurally changing any bin.
+ * The operations must not take any action that could even
+ * momentarily cause a concurrent read operation to see
+ * inconsistent data. This is made easier by the nature of
+ * the read operations in Map. For example, no operation
+ * can reveal that the table has grown but the threshold
+ * has not yet been updated, so there are no atomicity
+ * requirements for this with respect to reads.
+ *
+ * As a guide, all critical volatile reads and writes to the
+ * count field are marked in code comments.
+ */
+
+ /**
+ * The number of elements in this segment's region.
+ */
+ volatile int count;
+
+ /**
+ * Number of updates that alter the size of the table. This is used
+ * during bulk-read methods to make sure they see a consistent snapshot:
+ * If modCounts change during a traversal of segments computing size or
+ * checking containsValue, then we might have an inconsistent view of
+ * state so (usually) must retry.
+ */
+ int modCount;
+
+ /**
+ * The table is expanded when its size exceeds this threshold. (The
+ * value of this field is always {@code (int)(capacity * loadFactor)}.)
+ */
+ int threshold;
+
+ /**
+ * The per-segment table.
+ */
+ volatile AtomicReferenceArray<E> table;
+
+ Segment(int initialCapacity) {
+ setTable(newEntryArray(initialCapacity));
+ }
+
+ AtomicReferenceArray<E> newEntryArray(int size) {
+ return new AtomicReferenceArray<E>(size);
+ }
+
+ /**
+ * Sets table to new HashEntry array. Call only while holding lock or in
+ * constructor.
+ */
+ void setTable(AtomicReferenceArray<E> newTable) {
+ this.threshold = newTable.length() * 3 / 4;
+ this.table = newTable;
+ }
+
+ /**
+ * Returns properly casted first entry of bin for given hash.
+ */
+ E getFirst(int hash) {
+ AtomicReferenceArray<E> table = this.table;
+ return table.get(hash & (table.length() - 1));
+ }
+
+ /* Specialized implementations of map methods */
+
+ public E getEntry(Object key, int hash) {
+ Strategy<K, V, E> s = Impl.this.strategy;
+ if (count != 0) { // read-volatile
+ for (E e = getFirst(hash); e != null; e = s.getNext(e)) {
+ if (s.getHash(e) != hash) {
+ continue;
+ }
+
+ K entryKey = s.getKey(e);
+ if (entryKey == null) {
+ continue;
+ }
+
+ if (s.equalKeys(entryKey, key)) {
+ return e;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ V get(Object key, int hash) {
+ E entry = getEntry(key, hash);
+ if (entry == null) {
+ return null;
+ }
+
+ return strategy.getValue(entry);
+ }
+
+ boolean containsKey(Object key, int hash) {
+ Strategy<K, V, E> s = Impl.this.strategy;
+ if (count != 0) { // read-volatile
+ for (E e = getFirst(hash); e != null; e = s.getNext(e)) {
+ if (s.getHash(e) != hash) {
+ continue;
+ }
+
+ K entryKey = s.getKey(e);
+ if (entryKey == null) {
+ continue;
+ }
+
+ if (s.equalKeys(entryKey, key)) {
+ // Return true only if this entry has a value.
+ return s.getValue(e) != null;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ boolean containsValue(Object value) {
+ Strategy<K, V, E> s = Impl.this.strategy;
+ if (count != 0) { // read-volatile
+ AtomicReferenceArray<E> table = this.table;
+ int length = table.length();
+ for (int i = 0; i < length; i++) {
+ for (E e = table.get(i); e != null; e = s.getNext(e)) {
+ V entryValue = s.getValue(e);
+
+ // If the value disappeared, this entry is partially collected,
+ // and we should skip it.
+ if (entryValue == null) {
+ continue;
+ }
+
+ if (s.equalValues(entryValue, value)) {
+ return true;
+ }
+ }
+ }
+ }
+
+ return false;
+ }
+
+ boolean replace(K key, int hash, V oldValue, V newValue) {
+ Strategy<K, V, E> s = Impl.this.strategy;
+ lock();
+ try {
+ for (E e = getFirst(hash); e != null; e = s.getNext(e)) {
+ K entryKey = s.getKey(e);
+ if (s.getHash(e) == hash && entryKey != null
+ && s.equalKeys(key, entryKey)) {
+ // If the value disappeared, this entry is partially collected,
+ // and we should pretend like it doesn't exist.
+ V entryValue = s.getValue(e);
+ if (entryValue == null) {
+ return false;
+ }
+
+ if (s.equalValues(entryValue, oldValue)) {
+ s.setValue(e, newValue);
+ return true;
+ }
+ }
+ }
+
+ return false;
+ } finally {
+ unlock();
+ }
+ }
+
+ V replace(K key, int hash, V newValue) {
+ Strategy<K, V, E> s = Impl.this.strategy;
+ lock();
+ try {
+ for (E e = getFirst(hash); e != null; e = s.getNext(e)) {
+ K entryKey = s.getKey(e);
+ if (s.getHash(e) == hash && entryKey != null
+ && s.equalKeys(key, entryKey)) {
+ // If the value disappeared, this entry is partially collected,
+ // and we should pretend like it doesn't exist.
+ V entryValue = s.getValue(e);
+ if (entryValue == null) {
+ return null;
+ }
+
+ s.setValue(e, newValue);
+ return entryValue;
+ }
+ }
+
+ return null;
+ } finally {
+ unlock();
+ }
+ }
+
+ V put(K key, int hash, V value, boolean onlyIfAbsent) {
+ Strategy<K, V, E> s = Impl.this.strategy;
+ lock();
+ try {
+ int count = this.count;
+ if (count++ > this.threshold) { // ensure capacity
+ expand();
+ }
+
+ AtomicReferenceArray<E> table = this.table;
+ int index = hash & (table.length() - 1);
+
+ E first = table.get(index);
+
+ // Look for an existing entry.
+ for (E e = first; e != null; e = s.getNext(e)) {
+ K entryKey = s.getKey(e);
+ if (s.getHash(e) == hash && entryKey != null
+ && s.equalKeys(key, entryKey)) {
+ // We found an existing entry.
+
+ // If the value disappeared, this entry is partially collected,
+ // and we should pretend like it doesn't exist.
+ V entryValue = s.getValue(e);
+ if (onlyIfAbsent && entryValue != null) {
+ return entryValue;
+ }
+
+ s.setValue(e, value);
+ return entryValue;
+ }
+ }
+
+ // Create a new entry.
+ ++modCount;
+ E newEntry = s.newEntry(key, hash, first);
+ s.setValue(newEntry, value);
+ table.set(index, newEntry);
+ this.count = count; // write-volatile
+ return null;
+ } finally {
+ unlock();
+ }
+ }
+
+ /**
+ * Expands the table if possible.
+ */
+ void expand() {
+ AtomicReferenceArray<E> oldTable = table;
+ int oldCapacity = oldTable.length();
+ if (oldCapacity >= MAXIMUM_CAPACITY) {
+ return;
+ }
+
+ /*
+ * Reclassify nodes in each list to new Map. Because we are
+ * using power-of-two expansion, the elements from each bin
+ * must either stay at same index, or move with a power of two
+ * offset. We eliminate unnecessary node creation by catching
+ * cases where old nodes can be reused because their next
+ * fields won't change. Statistically, at the default
+ * threshold, only about one-sixth of them need cloning when
+ * a table doubles. The nodes they replace will be garbage
+ * collectable as soon as they are no longer referenced by any
+ * reader thread that may be in the midst of traversing table
+ * right now.
+ */
+
+ Strategy<K, V, E> s = Impl.this.strategy;
+ AtomicReferenceArray<E> newTable = newEntryArray(oldCapacity << 1);
+ threshold = newTable.length() * 3 / 4;
+ int newMask = newTable.length() - 1;
+ for (int oldIndex = 0; oldIndex < oldCapacity; oldIndex++) {
+ // We need to guarantee that any existing reads of old Map can
+ // proceed. So we cannot yet null out each bin.
+ E head = oldTable.get(oldIndex);
+
+ if (head != null) {
+ E next = s.getNext(head);
+ int headIndex = s.getHash(head) & newMask;
+
+ // Single node on list
+ if (next == null) {
+ newTable.set(headIndex, head);
+ } else {
+ // Reuse the consecutive sequence of nodes with the same target
+ // index from the end of the list. tail points to the first
+ // entry in the reusable list.
+ E tail = head;
+ int tailIndex = headIndex;
+ for (E last = next; last != null; last = s.getNext(last)) {
+ int newIndex = s.getHash(last) & newMask;
+ if (newIndex != tailIndex) {
+ // The index changed. We'll need to copy the previous entry.
+ tailIndex = newIndex;
+ tail = last;
+ }
+ }
+ newTable.set(tailIndex, tail);
+
+ // Clone nodes leading up to the tail.
+ for (E e = head; e != tail; e = s.getNext(e)) {
+ K key = s.getKey(e);
+ if (key != null) {
+ int newIndex = s.getHash(e) & newMask;
+ E newNext = newTable.get(newIndex);
+ newTable.set(newIndex, s.copyEntry(key, e, newNext));
+ } else {
+ // Key was reclaimed. Skip entry.
+ }
+ }
+ }
+ }
+ }
+ table = newTable;
+ }
+
+ V remove(Object key, int hash) {
+ Strategy<K, V, E> s = Impl.this.strategy;
+ lock();
+ try {
+ int count = this.count - 1;
+ AtomicReferenceArray<E> table = this.table;
+ int index = hash & (table.length() - 1);
+ E first = table.get(index);
+
+ for (E e = first; e != null; e = s.getNext(e)) {
+ K entryKey = s.getKey(e);
+ if (s.getHash(e) == hash && entryKey != null
+ && s.equalKeys(entryKey, key)) {
+ V entryValue = strategy.getValue(e);
+ // All entries following removed node can stay
+ // in list, but all preceding ones need to be
+ // cloned.
+ ++modCount;
+ E newFirst = s.getNext(e);
+ for (E p = first; p != e; p = s.getNext(p)) {
+ K pKey = s.getKey(p);
+ if (pKey != null) {
+ newFirst = s.copyEntry(pKey, p, newFirst);
+ } else {
+ // Key was reclaimed. Skip entry.
+ }
+ }
+ table.set(index, newFirst);
+ this.count = count; // write-volatile
+ return entryValue;
+ }
+ }
+
+ return null;
+ } finally {
+ unlock();
+ }
+ }
+
+ boolean remove(Object key, int hash, Object value) {
+ Strategy<K, V, E> s = Impl.this.strategy;
+ lock();
+ try {
+ int count = this.count - 1;
+ AtomicReferenceArray<E> table = this.table;
+ int index = hash & (table.length() - 1);
+ E first = table.get(index);
+
+ for (E e = first; e != null; e = s.getNext(e)) {
+ K entryKey = s.getKey(e);
+ if (s.getHash(e) == hash && entryKey != null
+ && s.equalKeys(entryKey, key)) {
+ V entryValue = strategy.getValue(e);
+ if (value == entryValue || (value != null && entryValue != null
+ && s.equalValues(entryValue, value))) {
+ // All entries following removed node can stay
+ // in list, but all preceding ones need to be
+ // cloned.
+ ++modCount;
+ E newFirst = s.getNext(e);
+ for (E p = first; p != e; p = s.getNext(p)) {
+ K pKey = s.getKey(p);
+ if (pKey != null) {
+ newFirst = s.copyEntry(pKey, p, newFirst);
+ } else {
+ // Key was reclaimed. Skip entry.
+ }
+ }
+ table.set(index, newFirst);
+ this.count = count; // write-volatile
+ return true;
+ } else {
+ return false;
+ }
+ }
+ }
+
+ return false;
+ } finally {
+ unlock();
+ }
+ }
+
+ public boolean removeEntry(E entry, int hash, V value) {
+ Strategy<K, V, E> s = Impl.this.strategy;
+ lock();
+ try {
+ int count = this.count - 1;
+ AtomicReferenceArray<E> table = this.table;
+ int index = hash & (table.length() - 1);
+ E first = table.get(index);
+
+ for (E e = first; e != null; e = s.getNext(e)) {
+ if (s.getHash(e) == hash && entry.equals(e)) {
+ V entryValue = s.getValue(e);
+ if (entryValue == value || (value != null
+ && s.equalValues(entryValue, value))) {
+ // All entries following removed node can stay
+ // in list, but all preceding ones need to be
+ // cloned.
+ ++modCount;
+ E newFirst = s.getNext(e);
+ for (E p = first; p != e; p = s.getNext(p)) {
+ K pKey = s.getKey(p);
+ if (pKey != null) {
+ newFirst = s.copyEntry(pKey, p, newFirst);
+ } else {
+ // Key was reclaimed. Skip entry.
+ }
+ }
+ table.set(index, newFirst);
+ this.count = count; // write-volatile
+ return true;
+ } else {
+ return false;
+ }
+ }
+ }
+
+ return false;
+ } finally {
+ unlock();
+ }
+ }
+
+ public boolean removeEntry(E entry, int hash) {
+ Strategy<K, V, E> s = Impl.this.strategy;
+ lock();
+ try {
+ int count = this.count - 1;
+ AtomicReferenceArray<E> table = this.table;
+ int index = hash & (table.length() - 1);
+ E first = table.get(index);
+
+ for (E e = first; e != null; e = s.getNext(e)) {
+ if (s.getHash(e) == hash && entry.equals(e)) {
+ // All entries following removed node can stay
+ // in list, but all preceding ones need to be
+ // cloned.
+ ++modCount;
+ E newFirst = s.getNext(e);
+ for (E p = first; p != e; p = s.getNext(p)) {
+ K pKey = s.getKey(p);
+ if (pKey != null) {
+ newFirst = s.copyEntry(pKey, p, newFirst);
+ } else {
+ // Key was reclaimed. Skip entry.
+ }
+ }
+ table.set(index, newFirst);
+ this.count = count; // write-volatile
+ return true;
+ }
+ }
+
+ return false;
+ } finally {
+ unlock();
+ }
+ }
+
+ void clear() {
+ if (count != 0) {
+ lock();
+ try {
+ AtomicReferenceArray<E> table = this.table;
+ for (int i = 0; i < table.length(); i++) {
+ table.set(i, null);
+ }
+ ++modCount;
+ count = 0; // write-volatile
+ } finally {
+ unlock();
+ }
+ }
+ }
+ }
+
+ /* ---------------- Public operations -------------- */
+
+ /**
+ * Returns {@code true} if this map contains no key-value mappings.
+ *
+ * @return {@code true} if this map contains no key-value mappings
+ */
+ @Override public boolean isEmpty() {
+ final Segment[] segments = this.segments;
+ /*
+ * We keep track of per-segment modCounts to avoid ABA
+ * problems in which an element in one segment was added and
+ * in another removed during traversal, in which case the
+ * table was never actually empty at any point. Note the
+ * similar use of modCounts in the size() and containsValue()
+ * methods, which are the only other methods also susceptible
+ * to ABA problems.
+ */
+ int[] mc = new int[segments.length];
+ int mcsum = 0;
+ for (int i = 0; i < segments.length; ++i) {
+ if (segments[i].count != 0) {
+ return false;
+ } else {
+ mcsum += mc[i] = segments[i].modCount;
+ }
+ }
+ // If mcsum happens to be zero, then we know we got a snapshot
+ // before any modifications at all were made. This is
+ // probably common enough to bother tracking.
+ if (mcsum != 0) {
+ for (int i = 0; i < segments.length; ++i) {
+ if (segments[i].count != 0 ||
+ mc[i] != segments[i].modCount) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Returns the number of key-value mappings in this map. If the map
+ * contains more than {@code Integer.MAX_VALUE} elements, returns
+ * {@code Integer.MAX_VALUE}.
+ *
+ * @return the number of key-value mappings in this map
+ */
+ @Override public int size() {
+ final Segment[] segments = this.segments;
+ long sum = 0;
+ long check = 0;
+ int[] mc = new int[segments.length];
+ // Try a few times to get accurate count. On failure due to
+ // continuous async changes in table, resort to locking.
+ for (int k = 0; k < RETRIES_BEFORE_LOCK; ++k) {
+ check = 0;
+ sum = 0;
+ int mcsum = 0;
+ for (int i = 0; i < segments.length; ++i) {
+ sum += segments[i].count;
+ mcsum += mc[i] = segments[i].modCount;
+ }
+ if (mcsum != 0) {
+ for (int i = 0; i < segments.length; ++i) {
+ check += segments[i].count;
+ if (mc[i] != segments[i].modCount) {
+ check = -1; // force retry
+ break;
+ }
+ }
+ }
+ if (check == sum) {
+ break;
+ }
+ }
+ if (check != sum) { // Resort to locking all segments
+ sum = 0;
+ for (Segment segment : segments) {
+ segment.lock();
+ }
+ for (Segment segment : segments) {
+ sum += segment.count;
+ }
+ for (Segment segment : segments) {
+ segment.unlock();
+ }
+ }
+ if (sum > Integer.MAX_VALUE) {
+ return Integer.MAX_VALUE;
+ } else {
+ return (int) sum;
+ }
+ }
+
+ /**
+ * Returns the value to which the specified key is mapped, or {@code null}
+ * if this map contains no mapping for the key.
+ *
+ * <p>More formally, if this map contains a mapping from a key {@code k} to
+ * a value {@code v} such that {@code key.equals(k)}, then this method
+ * returns {@code v}; otherwise it returns {@code null}. (There can be at
+ * most one such mapping.)
+ *
+ * @throws NullPointerException if the specified key is null
+ */
+ @Override public V get(Object key) {
+ if (key == null) {
+ throw new NullPointerException("key");
+ }
+ int hash = hash(key);
+ return segmentFor(hash).get(key, hash);
+ }
+
+ /**
+ * Tests if the specified object is a key in this table.
+ *
+ * @param key possible key
+ * @return {@code true} if and only if the specified object is a key in
+ * this table, as determined by the {@code equals} method;
+ * {@code false} otherwise.
+ * @throws NullPointerException if the specified key is null
+ */
+ @Override public boolean containsKey(Object key) {
+ if (key == null) {
+ throw new NullPointerException("key");
+ }
+ int hash = hash(key);
+ return segmentFor(hash).containsKey(key, hash);
+ }
+
+ /**
+ * Returns {@code true} if this map maps one or more keys to the specified
+ * value. Note: This method requires a full internal traversal of the hash
+ * table, and so is much slower than method {@code containsKey}.
+ *
+ * @param value value whose presence in this map is to be tested
+ * @return {@code true} if this map maps one or more keys to the specified
+ * value
+ * @throws NullPointerException if the specified value is null
+ */
+ @Override public boolean containsValue(Object value) {
+ if (value == null) {
+ throw new NullPointerException("value");
+ }
+
+ // See explanation of modCount use above
+
+ final Segment[] segments = this.segments;
+ int[] mc = new int[segments.length];
+
+ // Try a few times without locking
+ for (int k = 0; k < RETRIES_BEFORE_LOCK; ++k) {
+ int mcsum = 0;
+ for (int i = 0; i < segments.length; ++i) {
+ @SuppressWarnings("UnusedDeclaration")
+ int c = segments[i].count;
+ mcsum += mc[i] = segments[i].modCount;
+ if (segments[i].containsValue(value)) {
+ return true;
+ }
+ }
+ boolean cleanSweep = true;
+ if (mcsum != 0) {
+ for (int i = 0; i < segments.length; ++i) {
+ @SuppressWarnings("UnusedDeclaration")
+ int c = segments[i].count;
+ if (mc[i] != segments[i].modCount) {
+ cleanSweep = false;
+ break;
+ }
+ }
+ }
+ if (cleanSweep) {
+ return false;
+ }
+ }
+ // Resort to locking all segments
+ for (Segment segment : segments) {
+ segment.lock();
+ }
+ boolean found = false;
+ try {
+ for (Segment segment : segments) {
+ if (segment.containsValue(value)) {
+ found = true;
+ break;
+ }
+ }
+ } finally {
+ for (Segment segment : segments) {
+ segment.unlock();
+ }
+ }
+ return found;
+ }
+
+ /**
+ * Maps the specified key to the specified value in this table. Neither the
+ * key nor the value can be null.
+ *
+ * <p> The value can be retrieved by calling the {@code get} method with a
+ * key that is equal to the original key.
+ *
+ * @param key key with which the specified value is to be associated
+ * @param value value to be associated with the specified key
+ * @return the previous value associated with {@code key}, or {@code null}
+ * if there was no mapping for {@code key}
+ * @throws NullPointerException if the specified key or value is null
+ */
+ @Override public V put(K key, V value) {
+ if (key == null) {
+ throw new NullPointerException("key");
+ }
+ if (value == null) {
+ throw new NullPointerException("value");
+ }
+ int hash = hash(key);
+ return segmentFor(hash).put(key, hash, value, false);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @return the previous value associated with the specified key, or
+ * {@code null} if there was no mapping for the key
+ * @throws NullPointerException if the specified key or value is null
+ */
+ public V putIfAbsent(K key, V value) {
+ if (key == null) {
+ throw new NullPointerException("key");
+ }
+ if (value == null) {
+ throw new NullPointerException("value");
+ }
+ int hash = hash(key);
+ return segmentFor(hash).put(key, hash, value, true);
+ }
+
+ /**
+ * Copies all of the mappings from the specified map to this one. These
+ * mappings replace any mappings that this map had for any of the keys
+ * currently in the specified map.
+ *
+ * @param m mappings to be stored in this map
+ */
+ @Override public void putAll(Map<? extends K, ? extends V> m) {
+ for (Entry<? extends K, ? extends V> e : m.entrySet()) {
+ put(e.getKey(), e.getValue());
+ }
+ }
+
+ /**
+ * Removes the key (and its corresponding value) from this map. This method
+ * does nothing if the key is not in the map.
+ *
+ * @param key the key that needs to be removed
+ * @return the previous value associated with {@code key}, or {@code null}
+ * if there was no mapping for {@code key}
+ * @throws NullPointerException if the specified key is null
+ */
+ @Override public V remove(Object key) {
+ if (key == null) {
+ throw new NullPointerException("key");
+ }
+ int hash = hash(key);
+ return segmentFor(hash).remove(key, hash);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @throws NullPointerException if the specified key is null
+ */
+ public boolean remove(Object key, Object value) {
+ if (key == null) {
+ throw new NullPointerException("key");
+ }
+ int hash = hash(key);
+ return segmentFor(hash).remove(key, hash, value);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @throws NullPointerException if any of the arguments are null
+ */
+ public boolean replace(K key, V oldValue, V newValue) {
+ if (key == null) {
+ throw new NullPointerException("key");
+ }
+ if (oldValue == null) {
+ throw new NullPointerException("oldValue");
+ }
+ if (newValue == null) {
+ throw new NullPointerException("newValue");
+ }
+ int hash = hash(key);
+ return segmentFor(hash).replace(key, hash, oldValue, newValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @return the previous value associated with the specified key, or
+ * {@code null} if there was no mapping for the key
+ * @throws NullPointerException if the specified key or value is null
+ */
+ public V replace(K key, V value) {
+ if (key == null) {
+ throw new NullPointerException("key");
+ }
+ if (value == null) {
+ throw new NullPointerException("value");
+ }
+ int hash = hash(key);
+ return segmentFor(hash).replace(key, hash, value);
+ }
+
+ /**
+ * Removes all of the mappings from this map.
+ */
+ @Override public void clear() {
+ for (Segment segment : segments) {
+ segment.clear();
+ }
+ }
+
+ Set<K> keySet;
+
+ /**
+ * Returns a {@link java.util.Set} view of the keys contained in this map.
+ * The set is backed by the map, so changes to the map are reflected in the
+ * set, and vice-versa. The set supports element removal, which removes the
+ * corresponding mapping from this map, via the {@code Iterator.remove},
+ * {@code Set.remove}, {@code removeAll}, {@code retainAll}, and
+ * {@code clear} operations. It does not support the {@code add} or
+ * {@code addAll} operations.
+ *
+ * <p>The view's {@code iterator} is a "weakly consistent" iterator that
+ * will never throw {@link java.util.ConcurrentModificationException}, and
+ * guarantees to traverse elements as they existed upon construction of the
+ * iterator, and may (but is not guaranteed to) reflect any modifications
+ * subsequent to construction.
+ */
+ @Override public Set<K> keySet() {
+ Set<K> ks = keySet;
+ return (ks != null) ? ks : (keySet = new KeySet());
+ }
+
+ Collection<V> values;
+
+ /**
+ * Returns a {@link java.util.Collection} view of the values contained in
+ * this map. The collection is backed by the map, so changes to the map are
+ * reflected in the collection, and vice-versa. The collection supports
+ * element removal, which removes the corresponding mapping from this map,
+ * via the {@code Iterator.remove}, {@code Collection.remove},
+ * {@code removeAll}, {@code retainAll}, and {@code clear} operations. It
+ * does not support the {@code add} or {@code addAll} operations.
+ *
+ * <p>The view's {@code iterator} is a "weakly consistent" iterator that
+ * will never throw {@link java.util.ConcurrentModificationException}, and
+ * guarantees to traverse elements as they existed upon construction of the
+ * iterator, and may (but is not guaranteed to) reflect any modifications
+ * subsequent to construction.
+ */
+ @Override public Collection<V> values() {
+ Collection<V> vs = values;
+ return (vs != null) ? vs : (values = new Values());
+ }
+
+ Set<Entry<K, V>> entrySet;
+
+ /**
+ * Returns a {@link java.util.Set} view of the mappings contained in this
+ * map. The set is backed by the map, so changes to the map are reflected in
+ * the set, and vice-versa. The set supports element removal, which removes
+ * the corresponding mapping from the map, via the {@code Iterator.remove},
+ * {@code Set.remove}, {@code removeAll}, {@code retainAll}, and
+ * {@code clear} operations. It does not support the {@code add} or
+ * {@code addAll} operations.
+ *
+ * <p>The view's {@code iterator} is a "weakly consistent" iterator that
+ * will never throw {@link java.util.ConcurrentModificationException}, and
+ * guarantees to traverse elements as they existed upon construction of the
+ * iterator, and may (but is not guaranteed to) reflect any modifications
+ * subsequent to construction.
+ */
+ @Override public Set<Entry<K, V>> entrySet() {
+ Set<Entry<K, V>> es = entrySet;
+ return (es != null) ? es : (entrySet = new EntrySet());
+ }
+
+ /* ---------------- Iterator Support -------------- */
+
+ abstract class HashIterator {
+
+ int nextSegmentIndex;
+ int nextTableIndex;
+ AtomicReferenceArray<E> currentTable;
+ E nextEntry;
+ WriteThroughEntry nextExternal;
+ WriteThroughEntry lastReturned;
+
+ HashIterator() {
+ nextSegmentIndex = segments.length - 1;
+ nextTableIndex = -1;
+ advance();
+ }
+
+ public boolean hasMoreElements() {
+ return hasNext();
+ }
+
+ final void advance() {
+ nextExternal = null;
+
+ if (nextInChain()) {
+ return;
+ }
+
+ if (nextInTable()) {
+ return;
+ }
+
+ while (nextSegmentIndex >= 0) {
+ Segment seg = segments[nextSegmentIndex--];
+ if (seg.count != 0) {
+ currentTable = seg.table;
+ nextTableIndex = currentTable.length() - 1;
+ if (nextInTable()) {
+ return;
+ }
+ }
+ }
+ }
+
+ /**
+ * Finds the next entry in the current chain. Returns true if an entry
+ * was found.
+ */
+ boolean nextInChain() {
+ Strategy<K, V, E> s = Impl.this.strategy;
+ if (nextEntry != null) {
+ for (nextEntry = s.getNext(nextEntry); nextEntry != null;
+ nextEntry = s.getNext(nextEntry)) {
+ if (advanceTo(nextEntry)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Finds the next entry in the current table. Returns true if an entry
+ * was found.
+ */
+ boolean nextInTable() {
+ while (nextTableIndex >= 0) {
+ if ((nextEntry = currentTable.get(nextTableIndex--)) != null) {
+ if (advanceTo(nextEntry) || nextInChain()) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Advances to the given entry. Returns true if the entry was valid,
+ * false if it should be skipped.
+ */
+ boolean advanceTo(E entry) {
+ Strategy<K, V, E> s = Impl.this.strategy;
+ K key = s.getKey(entry);
+ V value = s.getValue(entry);
+ if (key != null && value != null) {
+ nextExternal = new WriteThroughEntry(key, value);
+ return true;
+ } else {
+ // Skip partially reclaimed entry.
+ return false;
+ }
+ }
+
+ public boolean hasNext() {
+ return nextExternal != null;
+ }
+
+ WriteThroughEntry nextEntry() {
+ if (nextExternal == null) {
+ throw new NoSuchElementException();
+ }
+ lastReturned = nextExternal;
+ advance();
+ return lastReturned;
+ }
+
+ public void remove() {
+ if (lastReturned == null) {
+ throw new IllegalStateException();
+ }
+ Impl.this.remove(lastReturned.getKey());
+ lastReturned = null;
+ }
+ }
+
+ final class KeyIterator extends HashIterator implements Iterator<K> {
+
+ public K next() {
+ return super.nextEntry().getKey();
+ }
+ }
+
+ final class ValueIterator extends HashIterator implements Iterator<V> {
+
+ public V next() {
+ return super.nextEntry().getValue();
+ }
+ }
+
+ /**
+ * Custom Entry class used by EntryIterator.next(), that relays setValue
+ * changes to the underlying map.
+ */
+ final class WriteThroughEntry extends AbstractMapEntry<K, V> {
+ final K key;
+ V value;
+
+ WriteThroughEntry(K key, V value) {
+ this.key = key;
+ this.value = value;
+ }
+
+ @Override public K getKey() {
+ return key;
+ }
+
+ @Override public V getValue() {
+ return value;
+ }
+
+ /**
+ * Set our entry's value and write through to the map. The value to
+ * return is somewhat arbitrary here. Since a WriteThroughEntry does not
+ * necessarily track asynchronous changes, the most recent "previous"
+ * value could be different from what we return (or could even have been
+ * removed in which case the put will re-establish). We do not and
+ * cannot guarantee more.
+ */
+ @Override public V setValue(V value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ V oldValue = Impl.this.put(getKey(), value);
+ this.value = value;
+ return oldValue;
+ }
+ }
+
+ final class EntryIterator extends HashIterator
+ implements Iterator<Entry<K, V>> {
+
+ public Entry<K, V> next() {
+ return nextEntry();
+ }
+ }
+
+ final class KeySet extends AbstractSet<K> {
+
+ @Override public Iterator<K> iterator() {
+ return new KeyIterator();
+ }
+
+ @Override public int size() {
+ return Impl.this.size();
+ }
+
+ @Override public boolean isEmpty() {
+ return Impl.this.isEmpty();
+ }
+
+ @Override public boolean contains(Object o) {
+ return Impl.this.containsKey(o);
+ }
+
+ @Override public boolean remove(Object o) {
+ return Impl.this.remove(o) != null;
+ }
+
+ @Override public void clear() {
+ Impl.this.clear();
+ }
+ }
+
+ final class Values extends AbstractCollection<V> {
+
+ @Override public Iterator<V> iterator() {
+ return new ValueIterator();
+ }
+
+ @Override public int size() {
+ return Impl.this.size();
+ }
+
+ @Override public boolean isEmpty() {
+ return Impl.this.isEmpty();
+ }
+
+ @Override public boolean contains(Object o) {
+ return Impl.this.containsValue(o);
+ }
+
+ @Override public void clear() {
+ Impl.this.clear();
+ }
+ }
+
+ final class EntrySet extends AbstractSet<Entry<K, V>> {
+
+ @Override public Iterator<Entry<K, V>> iterator() {
+ return new EntryIterator();
+ }
+
+ @Override public boolean contains(Object o) {
+ if (!(o instanceof Entry)) {
+ return false;
+ }
+ Entry<?, ?> e = (Entry<?, ?>) o;
+ Object key = e.getKey();
+ if (key == null) {
+ return false;
+ }
+ V v = Impl.this.get(key);
+
+ return v != null && strategy.equalValues(v, e.getValue());
+ }
+
+ @Override public boolean remove(Object o) {
+ if (!(o instanceof Entry)) {
+ return false;
+ }
+ Entry<?, ?> e = (Entry<?, ?>) o;
+ Object key = e.getKey();
+ return key != null && Impl.this.remove(key, e.getValue());
+ }
+
+ @Override public int size() {
+ return Impl.this.size();
+ }
+
+ @Override public boolean isEmpty() {
+ return Impl.this.isEmpty();
+ }
+
+ @Override public void clear() {
+ Impl.this.clear();
+ }
+ }
+
+ /* ---------------- Serialization Support -------------- */
+
+ private static final long serialVersionUID = 1;
+
+ private void writeObject(java.io.ObjectOutputStream out)
+ throws IOException {
+ out.writeInt(size());
+ out.writeInt(segments.length); // concurrencyLevel
+ out.writeObject(strategy);
+ for (Entry<K, V> entry : entrySet()) {
+ out.writeObject(entry.getKey());
+ out.writeObject(entry.getValue());
+ }
+ out.writeObject(null); // terminate entries
+ }
+
+ /**
+ * Fields used during deserialization. We use a nested class so we don't
+ * load them until we need them. We need to use reflection to set final
+ * fields outside of the constructor.
+ */
+ static class Fields {
+
+ static final Field segmentShift = findField("segmentShift");
+ static final Field segmentMask = findField("segmentMask");
+ static final Field segments = findField("segments");
+ static final Field strategy = findField("strategy");
+
+ static Field findField(String name) {
+ try {
+ Field f = Impl.class.getDeclaredField(name);
+ f.setAccessible(true);
+ return f;
+ } catch (NoSuchFieldException e) {
+ throw new AssertionError(e);
+ }
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private void readObject(java.io.ObjectInputStream in)
+ throws IOException, ClassNotFoundException {
+ try {
+ int initialCapacity = in.readInt();
+ int concurrencyLevel = in.readInt();
+ Strategy<K, V, E> strategy = (Strategy<K, V, E>) in.readObject();
+
+ if (concurrencyLevel > MAX_SEGMENTS) {
+ concurrencyLevel = MAX_SEGMENTS;
+ }
+
+ // Find power-of-two sizes best matching arguments
+ int segmentShift = 0;
+ int segmentCount = 1;
+ while (segmentCount < concurrencyLevel) {
+ ++segmentShift;
+ segmentCount <<= 1;
+ }
+ Fields.segmentShift.set(this, 32 - segmentShift);
+ Fields.segmentMask.set(this, segmentCount - 1);
+ Fields.segments.set(this, newSegmentArray(segmentCount));
+
+ if (initialCapacity > MAXIMUM_CAPACITY) {
+ initialCapacity = MAXIMUM_CAPACITY;
+ }
+
+ int segmentCapacity = initialCapacity / segmentCount;
+ if (segmentCapacity * segmentCount < initialCapacity) {
+ ++segmentCapacity;
+ }
+
+ int segmentSize = 1;
+ while (segmentSize < segmentCapacity) {
+ segmentSize <<= 1;
+ }
+ for (int i = 0; i < this.segments.length; ++i) {
+ this.segments[i] = new Segment(segmentSize);
+ }
+
+ Fields.strategy.set(this, strategy);
+
+ while (true) {
+ K key = (K) in.readObject();
+ if (key == null) {
+ break; // terminator
+ }
+ V value = (V) in.readObject();
+ put(key, value);
+ }
+ } catch (IllegalAccessException e) {
+ throw new AssertionError(e);
+ }
+ }
+ }
+
+ static class ComputingImpl<K, V, E> extends Impl<K, V, E> {
+
+ static final long serialVersionUID = 0;
+
+ final ComputingStrategy<K, V, E> computingStrategy;
+ final Function<? super K, ? extends V> computer;
+
+ /**
+ * Creates a new, empty map with the specified strategy, initial capacity,
+ * load factor and concurrency level.
+ */
+ ComputingImpl(ComputingStrategy<K, V, E> strategy, Builder builder,
+ Function<? super K, ? extends V> computer) {
+ super(strategy, builder);
+ this.computingStrategy = strategy;
+ this.computer = computer;
+ }
+
+ @Override public V get(Object k) {
+ /*
+ * This cast isn't safe, but we can rely on the fact that K is almost
+ * always passed to Map.get(), and tools like IDEs and Findbugs can
+ * catch situations where this isn't the case.
+ *
+ * The alternative is to add an overloaded method, but the chances of
+ * a user calling get() instead of the new API and the risks inherent
+ * in adding a new API outweigh this little hole.
+ */
+ @SuppressWarnings("unchecked")
+ K key = (K) k;
+
+ if (key == null) {
+ throw new NullPointerException("key");
+ }
+
+ int hash = hash(key);
+ Segment segment = segmentFor(hash);
+ outer: while (true) {
+ E entry = segment.getEntry(key, hash);
+ if (entry == null) {
+ boolean created = false;
+ segment.lock();
+ try {
+ // Try again--an entry could have materialized in the interim.
+ entry = segment.getEntry(key, hash);
+ if (entry == null) {
+ // Create a new entry.
+ created = true;
+ int count = segment.count;
+ if (count++ > segment.threshold) { // ensure capacity
+ segment.expand();
+ }
+ AtomicReferenceArray<E> table = segment.table;
+ int index = hash & (table.length() - 1);
+ E first = table.get(index);
+ ++segment.modCount;
+ entry = computingStrategy.newEntry(key, hash, first);
+ table.set(index, entry);
+ segment.count = count; // write-volatile
+ }
+ } finally {
+ segment.unlock();
+ }
+
+ if (created) {
+ // This thread solely created the entry.
+ boolean success = false;
+ try {
+ V value = computingStrategy.compute(key, entry, computer);
+ if (value == null) {
+ throw new NullPointerException(
+ "compute() returned null unexpectedly");
+ }
+ success = true;
+ return value;
+ } finally {
+ if (!success) {
+ segment.removeEntry(entry, hash);
+ }
+ }
+ }
+ }
+
+ // The entry already exists. Wait for the computation.
+ boolean interrupted = false;
+ try {
+ while (true) {
+ try {
+ V value = computingStrategy.waitForValue(entry);
+ if (value == null) {
+ // Purge entry and try again.
+ segment.removeEntry(entry, hash);
+ continue outer;
+ }
+ return value;
+ } catch (InterruptedException e) {
+ interrupted = true;
+ }
+ }
+ } finally {
+ if (interrupted) {
+ Thread.currentThread().interrupt();
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * A basic, no-frills implementation of {@code Strategy} using {@link
+ * SimpleInternalEntry}. Intended to be subclassed to provide customized
+ * behavior. For example, the following creates a map that uses byte arrays as
+ * keys: <pre> {@code
+ *
+ * return new CustomConcurrentHashMap.Builder().buildMap(
+ * new SimpleStrategy<byte[], V>() {
+ * public int hashKey(Object key) {
+ * return Arrays.hashCode((byte[]) key);
+ * }
+ * public boolean equalKeys(byte[] a, Object b) {
+ * return Arrays.equals(a, (byte[]) b);
+ * }
+ * });}</pre>
+ *
+ * With nothing overridden, it yields map behavior equivalent to that of
+ * {@link ConcurrentHashMap}.
+ */
+ static class SimpleStrategy<K, V>
+ implements Strategy<K, V, SimpleInternalEntry<K, V>> {
+ public SimpleInternalEntry<K, V> newEntry(
+ K key, int hash, SimpleInternalEntry<K, V> next) {
+ return new SimpleInternalEntry<K, V>(key, hash, null, next);
+ }
+ public SimpleInternalEntry<K, V> copyEntry(K key,
+ SimpleInternalEntry<K, V> original, SimpleInternalEntry<K, V> next) {
+ return new SimpleInternalEntry<K, V>(
+ key, original.hash, original.value, next);
+ }
+ public void setValue(SimpleInternalEntry<K, V> entry, V value) {
+ entry.value = value;
+ }
+ public V getValue(SimpleInternalEntry<K, V> entry) {
+ return entry.value;
+ }
+ public boolean equalKeys(K a, Object b) {
+ return a.equals(b);
+ }
+ public boolean equalValues(V a, Object b) {
+ return a.equals(b);
+ }
+ public int hashKey(Object key) {
+ return key.hashCode();
+ }
+ public K getKey(SimpleInternalEntry<K, V> entry) {
+ return entry.key;
+ }
+ public SimpleInternalEntry<K, V> getNext(SimpleInternalEntry<K, V> entry) {
+ return entry.next;
+ }
+ public int getHash(SimpleInternalEntry<K, V> entry) {
+ return entry.hash;
+ }
+ public void setInternals(
+ Internals<K, V, SimpleInternalEntry<K, V>> internals) {
+ // ignore?
+ }
+ }
+
+ /**
+ * A basic, no-frills entry class used by {@link SimpleInternalEntry}.
+ */
+ static class SimpleInternalEntry<K, V> {
+ final K key;
+ final int hash;
+ final SimpleInternalEntry<K, V> next;
+ volatile V value;
+ SimpleInternalEntry(
+ K key, int hash, @Nullable V value, SimpleInternalEntry<K, V> next) {
+ this.key = key;
+ this.hash = hash;
+ this.value = value;
+ this.next = next;
+ }
+ }
+}
diff --git a/src/com/google/common/collect/EmptyImmutableList.java b/src/com/google/common/collect/EmptyImmutableList.java
new file mode 100644
index 0000000..cea56f9
--- /dev/null
+++ b/src/com/google/common/collect/EmptyImmutableList.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import static com.google.common.base.Preconditions.checkElementIndex;
+import static com.google.common.base.Preconditions.checkPositionIndex;
+import static com.google.common.base.Preconditions.checkPositionIndexes;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.ListIterator;
+
+import javax.annotation.Nullable;
+
+/**
+ * An empty immutable list.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(serializable = true)
+final class EmptyImmutableList extends ImmutableList<Object> {
+ static final EmptyImmutableList INSTANCE = new EmptyImmutableList();
+
+ private EmptyImmutableList() {}
+
+ public int size() {
+ return 0;
+ }
+
+ @Override public boolean isEmpty() {
+ return true;
+ }
+
+ @Override public boolean contains(Object target) {
+ return false;
+ }
+
+ @Override public UnmodifiableIterator<Object> iterator() {
+ return Iterators.emptyIterator();
+ }
+
+ private static final Object[] EMPTY_ARRAY = new Object[0];
+
+ @Override public Object[] toArray() {
+ return EMPTY_ARRAY;
+ }
+
+ @Override public <T> T[] toArray(T[] a) {
+ if (a.length > 0) {
+ a[0] = null;
+ }
+ return a;
+ }
+
+ public Object get(int index) {
+ // guaranteed to fail, but at least we get a consistent message
+ checkElementIndex(index, 0);
+ throw new AssertionError("unreachable");
+ }
+
+ @Override public int indexOf(Object target) {
+ return -1;
+ }
+
+ @Override public int lastIndexOf(Object target) {
+ return -1;
+ }
+
+ @Override public ImmutableList<Object> subList(int fromIndex, int toIndex) {
+ checkPositionIndexes(fromIndex, toIndex, 0);
+ return this;
+ }
+
+ public ListIterator<Object> listIterator() {
+ return Collections.emptyList().listIterator();
+ }
+
+ public ListIterator<Object> listIterator(int start) {
+ checkPositionIndex(start, 0);
+ return Collections.emptyList().listIterator();
+ }
+
+ @Override public boolean containsAll(Collection<?> targets) {
+ return targets.isEmpty();
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ if (object instanceof List) {
+ List<?> that = (List<?>) object;
+ return that.isEmpty();
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ return 1;
+ }
+
+ @Override public String toString() {
+ return "[]";
+ }
+
+ Object readResolve() {
+ return INSTANCE; // preserve singleton property
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/EmptyImmutableListMultimap.java b/src/com/google/common/collect/EmptyImmutableListMultimap.java
new file mode 100644
index 0000000..c4c8ab5
--- /dev/null
+++ b/src/com/google/common/collect/EmptyImmutableListMultimap.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * Implementation of {@link ImmutableListMultimap} with no entries.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(serializable = true)
+class EmptyImmutableListMultimap extends ImmutableListMultimap<Object, Object> {
+ static final EmptyImmutableListMultimap INSTANCE
+ = new EmptyImmutableListMultimap();
+
+ private EmptyImmutableListMultimap() {
+ super(ImmutableMap.<Object, ImmutableList<Object>>of(), 0);
+ }
+
+ private Object readResolve() {
+ return INSTANCE; // preserve singleton property
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/EmptyImmutableMap.java b/src/com/google/common/collect/EmptyImmutableMap.java
new file mode 100644
index 0000000..3f90281
--- /dev/null
+++ b/src/com/google/common/collect/EmptyImmutableMap.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * An empty immutable map.
+ *
+ * @author Jesse Wilson
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(serializable = true)
+final class EmptyImmutableMap extends ImmutableMap<Object, Object> {
+ static final EmptyImmutableMap INSTANCE = new EmptyImmutableMap();
+
+ private EmptyImmutableMap() {}
+
+ @Override public Object get(Object key) {
+ return null;
+ }
+
+ public int size() {
+ return 0;
+ }
+
+ @Override public boolean isEmpty() {
+ return true;
+ }
+
+ @Override public boolean containsKey(Object key) {
+ return false;
+ }
+
+ @Override public boolean containsValue(Object value) {
+ return false;
+ }
+
+ @Override public ImmutableSet<Entry<Object, Object>> entrySet() {
+ return ImmutableSet.of();
+ }
+
+ @Override public ImmutableSet<Object> keySet() {
+ return ImmutableSet.of();
+ }
+
+ @Override public ImmutableCollection<Object> values() {
+ return ImmutableCollection.EMPTY_IMMUTABLE_COLLECTION;
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ if (object instanceof Map) {
+ Map<?, ?> that = (Map<?, ?>) object;
+ return that.isEmpty();
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ return 0;
+ }
+
+ @Override public String toString() {
+ return "{}";
+ }
+
+ Object readResolve() {
+ return INSTANCE; // preserve singleton property
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/EmptyImmutableMultiset.java b/src/com/google/common/collect/EmptyImmutableMultiset.java
new file mode 100644
index 0000000..523098a
--- /dev/null
+++ b/src/com/google/common/collect/EmptyImmutableMultiset.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * An empty immutable multiset.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(serializable = true)
+final class EmptyImmutableMultiset extends ImmutableMultiset<Object> {
+ static final EmptyImmutableMultiset INSTANCE = new EmptyImmutableMultiset();
+
+ private EmptyImmutableMultiset() {
+ super(ImmutableMap.<Object, Integer>of(), 0);
+ }
+
+ Object readResolve() {
+ return INSTANCE; // preserve singleton property
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/EmptyImmutableSet.java b/src/com/google/common/collect/EmptyImmutableSet.java
new file mode 100644
index 0000000..4f601e7
--- /dev/null
+++ b/src/com/google/common/collect/EmptyImmutableSet.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * An empty immutable set.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(serializable = true)
+final class EmptyImmutableSet extends ImmutableSet<Object> {
+ static final EmptyImmutableSet INSTANCE = new EmptyImmutableSet();
+
+ private EmptyImmutableSet() {}
+
+ public int size() {
+ return 0;
+ }
+
+ @Override public boolean isEmpty() {
+ return true;
+ }
+
+ @Override public boolean contains(Object target) {
+ return false;
+ }
+
+ @Override public UnmodifiableIterator<Object> iterator() {
+ return Iterators.emptyIterator();
+ }
+
+ private static final Object[] EMPTY_ARRAY = new Object[0];
+
+ @Override public Object[] toArray() {
+ return EMPTY_ARRAY;
+ }
+
+ @Override public <T> T[] toArray(T[] a) {
+ if (a.length > 0) {
+ a[0] = null;
+ }
+ return a;
+ }
+
+ @Override public boolean containsAll(Collection<?> targets) {
+ return targets.isEmpty();
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ if (object instanceof Set) {
+ Set<?> that = (Set<?>) object;
+ return that.isEmpty();
+ }
+ return false;
+ }
+
+ @Override public final int hashCode() {
+ return 0;
+ }
+
+ @Override boolean isHashCodeFast() {
+ return true;
+ }
+
+ @Override public String toString() {
+ return "[]";
+ }
+
+ Object readResolve() {
+ return INSTANCE; // preserve singleton property
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/EmptyImmutableSetMultimap.java b/src/com/google/common/collect/EmptyImmutableSetMultimap.java
new file mode 100644
index 0000000..348df8b
--- /dev/null
+++ b/src/com/google/common/collect/EmptyImmutableSetMultimap.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * Implementation of {@link ImmutableListMultimap} with no entries.
+ *
+ * @author Mike Ward
+ */
+@GwtCompatible(serializable = true)
+class EmptyImmutableSetMultimap extends ImmutableSetMultimap<Object, Object> {
+ static final EmptyImmutableSetMultimap INSTANCE
+ = new EmptyImmutableSetMultimap();
+
+ private EmptyImmutableSetMultimap() {
+ super(ImmutableMap.<Object, ImmutableSet<Object>>of(), 0);
+ }
+
+ private Object readResolve() {
+ return INSTANCE; // preserve singleton property
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/EmptyImmutableSortedSet.java b/src/com/google/common/collect/EmptyImmutableSortedSet.java
new file mode 100644
index 0000000..29e83b0
--- /dev/null
+++ b/src/com/google/common/collect/EmptyImmutableSortedSet.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * An empty immutable sorted set.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(serializable = true)
+@SuppressWarnings("serial") // uses writeReplace(), not default serialization
+class EmptyImmutableSortedSet<E> extends ImmutableSortedSet<E> {
+ EmptyImmutableSortedSet(Comparator<? super E> comparator) {
+ super(comparator);
+ }
+
+ public int size() {
+ return 0;
+ }
+
+ @Override public boolean isEmpty() {
+ return true;
+ }
+
+ @Override public boolean contains(Object target) {
+ return false;
+ }
+
+ @Override public UnmodifiableIterator<E> iterator() {
+ return Iterators.emptyIterator();
+ }
+
+ private static final Object[] EMPTY_ARRAY = new Object[0];
+
+ @Override public Object[] toArray() {
+ return EMPTY_ARRAY;
+ }
+
+ @Override public <T> T[] toArray(T[] a) {
+ if (a.length > 0) {
+ a[0] = null;
+ }
+ return a;
+ }
+
+ @Override public boolean containsAll(Collection<?> targets) {
+ return targets.isEmpty();
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ if (object instanceof Set) {
+ Set<?> that = (Set<?>) object;
+ return that.isEmpty();
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ return 0;
+ }
+
+ @Override public String toString() {
+ return "[]";
+ }
+
+ public E first() {
+ throw new NoSuchElementException();
+ }
+
+ public E last() {
+ throw new NoSuchElementException();
+ }
+
+ @Override ImmutableSortedSet<E> headSetImpl(E toElement) {
+ return this;
+ }
+
+ @Override ImmutableSortedSet<E> subSetImpl(E fromElement, E toElement) {
+ return this;
+ }
+
+ @Override ImmutableSortedSet<E> tailSetImpl(E fromElement) {
+ return this;
+ }
+
+ @Override boolean hasPartialArray() {
+ return false;
+ }
+}
diff --git a/src/com/google/common/collect/EnumBiMap.java b/src/com/google/common/collect/EnumBiMap.java
new file mode 100644
index 0000000..c4b2551
--- /dev/null
+++ b/src/com/google/common/collect/EnumBiMap.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.EnumMap;
+import java.util.Map;
+
+/**
+ * A {@code BiMap} backed by two {@code EnumMap} instances. Null keys and values
+ * are not permitted. An {@code EnumBiMap} and its inverse are both
+ * serializable.
+ *
+ * @author Mike Bostock
+ */
+public final class EnumBiMap<K extends Enum<K>, V extends Enum<V>>
+ extends AbstractBiMap<K, V> {
+ private transient Class<K> keyType;
+ private transient Class<V> valueType;
+
+ /**
+ * Returns a new, empty {@code EnumBiMap} using the specified key and value
+ * types.
+ *
+ * @param keyType the key type
+ * @param valueType the value type
+ */
+ public static <K extends Enum<K>, V extends Enum<V>> EnumBiMap<K, V>
+ create(Class<K> keyType, Class<V> valueType) {
+ return new EnumBiMap<K, V>(keyType, valueType);
+ }
+
+ /**
+ * Returns a new bimap with the same mappings as the specified map. If the
+ * specified map is an {@code EnumBiMap}, the new bimap has the same types as
+ * the provided map. Otherwise, the specified map must contain at least one
+ * mapping, in order to determine the key and value types.
+ *
+ * @param map the map whose mappings are to be placed in this map
+ * @throws IllegalArgumentException if map is not an {@code EnumBiMap}
+ * instance and contains no mappings
+ */
+ public static <K extends Enum<K>, V extends Enum<V>> EnumBiMap<K, V>
+ create(Map<K, V> map) {
+ EnumBiMap<K, V> bimap = create(inferKeyType(map), inferValueType(map));
+ bimap.putAll(map);
+ return bimap;
+ }
+
+ private EnumBiMap(Class<K> keyType, Class<V> valueType) {
+ super(new EnumMap<K, V>(keyType), new EnumMap<V, K>(valueType));
+ this.keyType = keyType;
+ this.valueType = valueType;
+ }
+
+ static <K extends Enum<K>> Class<K> inferKeyType(Map<K, ?> map) {
+ if (map instanceof EnumBiMap) {
+ return ((EnumBiMap<K, ?>) map).keyType();
+ }
+ if (map instanceof EnumHashBiMap) {
+ return ((EnumHashBiMap<K, ?>) map).keyType();
+ }
+ checkArgument(!map.isEmpty());
+ return map.keySet().iterator().next().getDeclaringClass();
+ }
+
+ private static <V extends Enum<V>> Class<V> inferValueType(Map<?, V> map) {
+ if (map instanceof EnumBiMap) {
+ return ((EnumBiMap<?, V>) map).valueType;
+ }
+ checkArgument(!map.isEmpty());
+ return map.values().iterator().next().getDeclaringClass();
+ }
+
+ /** Returns the associated key type. */
+ public Class<K> keyType() {
+ return keyType;
+ }
+
+ /** Returns the associated value type. */
+ public Class<V> valueType() {
+ return valueType;
+ }
+
+ /**
+ * @serialData the key class, value class, number of entries, first key, first
+ * value, second key, second value, and so on.
+ */
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ stream.defaultWriteObject();
+ stream.writeObject(keyType);
+ stream.writeObject(valueType);
+ Serialization.writeMap(this, stream);
+ }
+
+ @SuppressWarnings("unchecked") // reading fields populated by writeObject
+ private void readObject(ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+ keyType = (Class<K>) stream.readObject();
+ valueType = (Class<V>) stream.readObject();
+ setDelegates(new EnumMap<K, V>(keyType), new EnumMap<V, K>(valueType));
+ Serialization.populateMap(this, stream);
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/EnumHashBiMap.java b/src/com/google/common/collect/EnumHashBiMap.java
new file mode 100644
index 0000000..38eb17b
--- /dev/null
+++ b/src/com/google/common/collect/EnumHashBiMap.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.EnumMap;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * A {@code BiMap} backed by an {@code EnumMap} instance for keys-to-values, and
+ * a {@code HashMap} instance for values-to-keys. Null keys are not permitted,
+ * but null values are. An {@code EnumHashBiMap} and its inverse are both
+ * serializable.
+ *
+ * @author Mike Bostock
+ */
+public final class EnumHashBiMap<K extends Enum<K>, V>
+ extends AbstractBiMap<K, V> {
+ private transient Class<K> keyType;
+
+ /**
+ * Returns a new, empty {@code EnumHashBiMap} using the specified key type.
+ *
+ * @param keyType the key type
+ */
+ public static <K extends Enum<K>, V> EnumHashBiMap<K, V>
+ create(Class<K> keyType) {
+ return new EnumHashBiMap<K, V>(keyType);
+ }
+
+ /**
+ * Constructs a new bimap with the same mappings as the specified map. If the
+ * specified map is an {@code EnumHashBiMap} or an {@link EnumBiMap}, the new
+ * bimap has the same key type as the input bimap. Otherwise, the specified
+ * map must contain at least one mapping, in order to determine the key type.
+ *
+ * @param map the map whose mappings are to be placed in this map
+ * @throws IllegalArgumentException if map is not an {@code EnumBiMap} or an
+ * {@code EnumHashBiMap} instance and contains no mappings
+ */
+ public static <K extends Enum<K>, V> EnumHashBiMap<K, V>
+ create(Map<K, ? extends V> map) {
+ EnumHashBiMap<K, V> bimap = create(EnumBiMap.inferKeyType(map));
+ bimap.putAll(map);
+ return bimap;
+ }
+
+ private EnumHashBiMap(Class<K> keyType) {
+ super(new EnumMap<K, V>(keyType), Maps.<V, K>newHashMapWithExpectedSize(
+ keyType.getEnumConstants().length));
+ this.keyType = keyType;
+ }
+
+ // Overriding these two methods to show that values may be null (but not keys)
+
+ @Override public V put(K key, @Nullable V value) {
+ return super.put(key, value);
+ }
+
+ @Override public V forcePut(K key, @Nullable V value) {
+ return super.forcePut(key, value);
+ }
+
+ /** Returns the associated key type. */
+ public Class<K> keyType() {
+ return keyType;
+ }
+
+ /**
+ * @serialData the key class, number of entries, first key, first value,
+ * second key, second value, and so on.
+ */
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ stream.defaultWriteObject();
+ stream.writeObject(keyType);
+ Serialization.writeMap(this, stream);
+ }
+
+ @SuppressWarnings("unchecked") // reading field populated by writeObject
+ private void readObject(ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+ keyType = (Class<K>) stream.readObject();
+ setDelegates(new EnumMap<K, V>(keyType),
+ new HashMap<V, K>(keyType.getEnumConstants().length * 3 / 2));
+ Serialization.populateMap(this, stream);
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/EnumMultiset.java b/src/com/google/common/collect/EnumMultiset.java
new file mode 100644
index 0000000..e1e9938
--- /dev/null
+++ b/src/com/google/common/collect/EnumMultiset.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import static com.google.common.base.Preconditions.checkArgument;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.EnumMap;
+import java.util.Iterator;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Multiset implementation backed by an {@link EnumMap}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+public final class EnumMultiset<E extends Enum<E>>
+ extends AbstractMapBasedMultiset<E> {
+ /** Creates an empty {@code EnumMultiset}. */
+ public static <E extends Enum<E>> EnumMultiset<E> create(Class<E> type) {
+ return new EnumMultiset<E>(type);
+ }
+
+ /**
+ * Creates a new {@code EnumMultiset} containing the specified elements.
+ *
+ * @param elements the elements that the multiset should contain
+ * @throws IllegalArgumentException if {@code elements} is empty
+ */
+ public static <E extends Enum<E>> EnumMultiset<E> create(
+ Iterable<E> elements) {
+ Iterator<E> iterator = elements.iterator();
+ checkArgument(iterator.hasNext(),
+ "EnumMultiset constructor passed empty Iterable");
+ EnumMultiset<E> multiset
+ = new EnumMultiset<E>(iterator.next().getDeclaringClass());
+ Iterables.addAll(multiset, elements);
+ return multiset;
+ }
+
+ private transient Class<E> type;
+
+ /** Creates an empty {@code EnumMultiset}. */
+ private EnumMultiset(Class<E> type) {
+ super(new EnumMap<E, AtomicInteger>(type));
+ this.type = type;
+ }
+
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ stream.defaultWriteObject();
+ stream.writeObject(type);
+ Serialization.writeMultiset(this, stream);
+ }
+
+ /**
+ * @serialData the {@code Class<E>} for the enum type, the number of distinct
+ * elements, the first element, its count, the second element, its count,
+ * and so on
+ */
+ private void readObject(ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+ @SuppressWarnings("unchecked") // reading data stored by writeObject
+ Class<E> localType = (Class<E>) stream.readObject();
+ type = localType;
+ setBackingMap(new EnumMap<E, AtomicInteger>(type));
+ Serialization.populateMultiset(this, stream);
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/ExpirationTimer.java b/src/com/google/common/collect/ExpirationTimer.java
new file mode 100644
index 0000000..3c344ca
--- /dev/null
+++ b/src/com/google/common/collect/ExpirationTimer.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import java.util.Timer;
+
+/**
+ * Timer used for entry expiration in MapMaker.
+ */
+class ExpirationTimer {
+ static Timer instance = new Timer(true);
+}
diff --git a/src/com/google/common/collect/ExplicitOrdering.java b/src/com/google/common/collect/ExplicitOrdering.java
new file mode 100644
index 0000000..7625d07
--- /dev/null
+++ b/src/com/google/common/collect/ExplicitOrdering.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+/** An ordering that compares objects according to a given order. */
+@GwtCompatible(serializable = true)
+final class ExplicitOrdering<T> extends Ordering<T> implements Serializable {
+ final ImmutableMap<T, Integer> rankMap;
+
+ ExplicitOrdering(List<T> valuesInOrder) {
+ this(buildRankMap(valuesInOrder));
+ }
+
+ ExplicitOrdering(ImmutableMap<T, Integer> rankMap) {
+ this.rankMap = rankMap;
+ }
+
+ public int compare(T left, T right) {
+ return rank(left) - rank(right); // safe because both are nonnegative
+ }
+
+ private int rank(T value) {
+ Integer rank = rankMap.get(value);
+ if (rank == null) {
+ throw new IncomparableValueException(value);
+ }
+ return rank;
+ }
+
+ private static <T> ImmutableMap<T, Integer> buildRankMap(
+ List<T> valuesInOrder) {
+ ImmutableMap.Builder<T, Integer> builder = ImmutableMap.builder();
+ int rank = 0;
+ for (T value : valuesInOrder) {
+ builder.put(value, rank++);
+ }
+ return builder.build();
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ if (object instanceof ExplicitOrdering) {
+ ExplicitOrdering<?> that = (ExplicitOrdering<?>) object;
+ return this.rankMap.equals(that.rankMap);
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ return rankMap.hashCode();
+ }
+
+ @Override public String toString() {
+ return "Ordering.explicit(" + rankMap.keySet() + ")";
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/ForwardingCollection.java b/src/com/google/common/collect/ForwardingCollection.java
new file mode 100644
index 0000000..499e360
--- /dev/null
+++ b/src/com/google/common/collect/ForwardingCollection.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+/**
+ * A collection which forwards all its method calls to another collection.
+ * Subclasses should override one or more methods to modify the behavior of
+ * the backing collection as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * @see ForwardingObject
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+public abstract class ForwardingCollection<E> extends ForwardingObject
+ implements Collection<E> {
+
+ @Override protected abstract Collection<E> delegate();
+
+ public Iterator<E> iterator() {
+ return delegate().iterator();
+ }
+
+ public int size() {
+ return delegate().size();
+ }
+
+ public boolean removeAll(Collection<?> collection) {
+ return delegate().removeAll(collection);
+ }
+
+ public boolean isEmpty() {
+ return delegate().isEmpty();
+ }
+
+ public boolean contains(Object object) {
+ return delegate().contains(object);
+ }
+
+ public Object[] toArray() {
+ return delegate().toArray();
+ }
+
+ public <T> T[] toArray(T[] array) {
+ return delegate().toArray(array);
+ }
+
+ public boolean add(E element) {
+ return delegate().add(element);
+ }
+
+ public boolean remove(Object object) {
+ return delegate().remove(object);
+ }
+
+ public boolean containsAll(Collection<?> collection) {
+ return delegate().containsAll(collection);
+ }
+
+ public boolean addAll(Collection<? extends E> collection) {
+ return delegate().addAll(collection);
+ }
+
+ public boolean retainAll(Collection<?> collection) {
+ return delegate().retainAll(collection);
+ }
+
+ public void clear() {
+ delegate().clear();
+ }
+}
diff --git a/src/com/google/common/collect/ForwardingConcurrentMap.java b/src/com/google/common/collect/ForwardingConcurrentMap.java
new file mode 100644
index 0000000..be2ec98
--- /dev/null
+++ b/src/com/google/common/collect/ForwardingConcurrentMap.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * A concurrent map which forwards all its method calls to another concurrent
+ * map. Subclasses should override one or more methods to modify the behavior of
+ * the backing map as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * @see ForwardingObject
+ * @author Charles Fry
+ */
+@GwtCompatible
+public abstract class ForwardingConcurrentMap<K, V> extends ForwardingMap<K, V>
+ implements ConcurrentMap<K, V> {
+
+ @Override protected abstract ConcurrentMap<K, V> delegate();
+
+ public V putIfAbsent(K key, V value) {
+ return delegate().putIfAbsent(key, value);
+ }
+
+ public boolean remove(Object key, Object value) {
+ return delegate().remove(key, value);
+ }
+
+ public V replace(K key, V value) {
+ return delegate().replace(key, value);
+ }
+
+ public boolean replace(K key, V oldValue, V newValue) {
+ return delegate().replace(key, oldValue, newValue);
+ }
+
+}
diff --git a/src/com/google/common/collect/ForwardingIterator.java b/src/com/google/common/collect/ForwardingIterator.java
new file mode 100644
index 0000000..2269cc0
--- /dev/null
+++ b/src/com/google/common/collect/ForwardingIterator.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Iterator;
+
+/**
+ * An iterator which forwards all its method calls to another iterator.
+ * Subclasses should override one or more methods to modify the behavior of the
+ * backing iterator as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * @see ForwardingObject
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+public abstract class ForwardingIterator<T>
+ extends ForwardingObject implements Iterator<T> {
+
+ @Override protected abstract Iterator<T> delegate();
+
+ public boolean hasNext() {
+ return delegate().hasNext();
+ }
+
+ public T next() {
+ return delegate().next();
+ }
+
+ public void remove() {
+ delegate().remove();
+ }
+}
diff --git a/src/com/google/common/collect/ForwardingList.java b/src/com/google/common/collect/ForwardingList.java
new file mode 100644
index 0000000..b4d8842
--- /dev/null
+++ b/src/com/google/common/collect/ForwardingList.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.ListIterator;
+
+import javax.annotation.Nullable;
+
+/**
+ * A list which forwards all its method calls to another list. Subclasses should
+ * override one or more methods to modify the behavior of the backing list as
+ * desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * <p>This class does not implement {@link java.util.RandomAccess}. If the
+ * delegate supports random access, the {@code ForwadingList} subclass should
+ * implement the {@code RandomAccess} interface.
+ *
+ * @author Mike Bostock
+ */
+@GwtCompatible
+public abstract class ForwardingList<E> extends ForwardingCollection<E>
+ implements List<E> {
+
+ @Override protected abstract List<E> delegate();
+
+ public void add(int index, E element) {
+ delegate().add(index, element);
+ }
+
+ public boolean addAll(int index, Collection<? extends E> elements) {
+ return delegate().addAll(index, elements);
+ }
+
+ public E get(int index) {
+ return delegate().get(index);
+ }
+
+ public int indexOf(Object element) {
+ return delegate().indexOf(element);
+ }
+
+ public int lastIndexOf(Object element) {
+ return delegate().lastIndexOf(element);
+ }
+
+ public ListIterator<E> listIterator() {
+ return delegate().listIterator();
+ }
+
+ public ListIterator<E> listIterator(int index) {
+ return delegate().listIterator(index);
+ }
+
+ public E remove(int index) {
+ return delegate().remove(index);
+ }
+
+ public E set(int index, E element) {
+ return delegate().set(index, element);
+ }
+
+ @GwtIncompatible("List.subList")
+ public List<E> subList(int fromIndex, int toIndex) {
+ return Platform.subList(delegate(), fromIndex, toIndex);
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ return object == this || delegate().equals(object);
+ }
+
+ @Override public int hashCode() {
+ return delegate().hashCode();
+ }
+}
diff --git a/src/com/google/common/collect/ForwardingListIterator.java b/src/com/google/common/collect/ForwardingListIterator.java
new file mode 100644
index 0000000..9ae226d
--- /dev/null
+++ b/src/com/google/common/collect/ForwardingListIterator.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.ListIterator;
+
+/**
+ * A list iterator which forwards all its method calls to another list
+ * iterator. Subclasses should override one or more methods to modify the
+ * behavior of the backing iterator as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * @see ForwardingObject
+ * @author Mike Bostock
+ */
+@GwtCompatible
+public abstract class ForwardingListIterator<E> extends ForwardingIterator<E>
+ implements ListIterator<E> {
+
+ @Override protected abstract ListIterator<E> delegate();
+
+ public void add(E element) {
+ delegate().add(element);
+ }
+
+ public boolean hasPrevious() {
+ return delegate().hasPrevious();
+ }
+
+ public int nextIndex() {
+ return delegate().nextIndex();
+ }
+
+ public E previous() {
+ return delegate().previous();
+ }
+
+ public int previousIndex() {
+ return delegate().previousIndex();
+ }
+
+ public void set(E element) {
+ delegate().set(element);
+ }
+}
diff --git a/src/com/google/common/collect/ForwardingMap.java b/src/com/google/common/collect/ForwardingMap.java
new file mode 100644
index 0000000..cb23dd6
--- /dev/null
+++ b/src/com/google/common/collect/ForwardingMap.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * A map which forwards all its method calls to another map. Subclasses should
+ * override one or more methods to modify the behavior of the backing map as
+ * desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * @see ForwardingObject
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ */
+@GwtCompatible
+public abstract class ForwardingMap<K, V> extends ForwardingObject
+ implements Map<K, V> {
+
+ @Override protected abstract Map<K, V> delegate();
+
+ public int size() {
+ return delegate().size();
+ }
+
+ public boolean isEmpty() {
+ return delegate().isEmpty();
+ }
+
+ public V remove(Object object) {
+ return delegate().remove(object);
+ }
+
+ public void clear() {
+ delegate().clear();
+ }
+
+ public boolean containsKey(Object key) {
+ return delegate().containsKey(key);
+ }
+
+ public boolean containsValue(Object value) {
+ return delegate().containsValue(value);
+ }
+
+ public V get(Object key) {
+ return delegate().get(key);
+ }
+
+ public V put(K key, V value) {
+ return delegate().put(key, value);
+ }
+
+ public void putAll(Map<? extends K, ? extends V> map) {
+ delegate().putAll(map);
+ }
+
+ public Set<K> keySet() {
+ return delegate().keySet();
+ }
+
+ public Collection<V> values() {
+ return delegate().values();
+ }
+
+ public Set<Entry<K, V>> entrySet() {
+ return delegate().entrySet();
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ return object == this || delegate().equals(object);
+ }
+
+ @Override public int hashCode() {
+ return delegate().hashCode();
+ }
+}
diff --git a/src/com/google/common/collect/ForwardingMapEntry.java b/src/com/google/common/collect/ForwardingMapEntry.java
new file mode 100644
index 0000000..994d1f8
--- /dev/null
+++ b/src/com/google/common/collect/ForwardingMapEntry.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * A map entry which forwards all its method calls to another map entry.
+ * Subclasses should override one or more methods to modify the behavior of the
+ * backing map entry as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * @see ForwardingObject
+ * @author Mike Bostock
+ */
+@GwtCompatible
+public abstract class ForwardingMapEntry<K, V>
+ extends ForwardingObject implements Map.Entry<K, V> {
+
+ @Override protected abstract Map.Entry<K, V> delegate();
+
+ public K getKey() {
+ return delegate().getKey();
+ }
+
+ public V getValue() {
+ return delegate().getValue();
+ }
+
+ public V setValue(V value) {
+ return delegate().setValue(value);
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ return delegate().equals(object);
+ }
+
+ @Override public int hashCode() {
+ return delegate().hashCode();
+ }
+}
diff --git a/src/com/google/common/collect/ForwardingMultimap.java b/src/com/google/common/collect/ForwardingMultimap.java
new file mode 100644
index 0000000..e82369e
--- /dev/null
+++ b/src/com/google/common/collect/ForwardingMultimap.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * A multimap which forwards all its method calls to another multimap.
+ * Subclasses should override one or more methods to modify the behavior of
+ * the backing multimap as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * @see ForwardingObject
+ * @author Robert Konigsberg
+ */
+@GwtCompatible
+public abstract class ForwardingMultimap<K, V> extends ForwardingObject
+ implements Multimap<K, V> {
+
+ @Override protected abstract Multimap<K, V> delegate();
+
+ public Map<K, Collection<V>> asMap() {
+ return delegate().asMap();
+ }
+
+ public void clear() {
+ delegate().clear();
+ }
+
+ public boolean containsEntry(@Nullable Object key, @Nullable Object value) {
+ return delegate().containsEntry(key, value);
+ }
+
+ public boolean containsKey(@Nullable Object key) {
+ return delegate().containsKey(key);
+ }
+
+ public boolean containsValue(@Nullable Object value) {
+ return delegate().containsValue(value);
+ }
+
+ public Collection<Entry<K, V>> entries() {
+ return delegate().entries();
+ }
+
+ public Collection<V> get(@Nullable K key) {
+ return delegate().get(key);
+ }
+
+ public boolean isEmpty() {
+ return delegate().isEmpty();
+ }
+
+ public Multiset<K> keys() {
+ return delegate().keys();
+ }
+
+ public Set<K> keySet() {
+ return delegate().keySet();
+ }
+
+ public boolean put(K key, V value) {
+ return delegate().put(key, value);
+ }
+
+ public boolean putAll(K key, Iterable<? extends V> values) {
+ return delegate().putAll(key, values);
+ }
+
+ public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
+ return delegate().putAll(multimap);
+ }
+
+ public boolean remove(@Nullable Object key, @Nullable Object value) {
+ return delegate().remove(key, value);
+ }
+
+ public Collection<V> removeAll(@Nullable Object key) {
+ return delegate().removeAll(key);
+ }
+
+ public Collection<V> replaceValues(K key, Iterable<? extends V> values) {
+ return delegate().replaceValues(key, values);
+ }
+
+ public int size() {
+ return delegate().size();
+ }
+
+ public Collection<V> values() {
+ return delegate().values();
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ return object == this || delegate().equals(object);
+ }
+
+ @Override public int hashCode() {
+ return delegate().hashCode();
+ }
+}
diff --git a/src/com/google/common/collect/ForwardingMultiset.java b/src/com/google/common/collect/ForwardingMultiset.java
new file mode 100644
index 0000000..00111d6
--- /dev/null
+++ b/src/com/google/common/collect/ForwardingMultiset.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * A multiset which forwards all its method calls to another multiset.
+ * Subclasses should override one or more methods to modify the behavior of the
+ * backing multiset as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * @see ForwardingObject
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+public abstract class ForwardingMultiset<E> extends ForwardingCollection<E>
+ implements Multiset<E> {
+
+ @Override protected abstract Multiset<E> delegate();
+
+ public int count(Object element) {
+ return delegate().count(element);
+ }
+
+ public int add(E element, int occurrences) {
+ return delegate().add(element, occurrences);
+ }
+
+ public int remove(Object element, int occurrences) {
+ return delegate().remove(element, occurrences);
+ }
+
+ public Set<E> elementSet() {
+ return delegate().elementSet();
+ }
+
+ public Set<Entry<E>> entrySet() {
+ return delegate().entrySet();
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ return object == this || delegate().equals(object);
+ }
+
+ @Override public int hashCode() {
+ return delegate().hashCode();
+ }
+
+ public int setCount(E element, int count) {
+ return delegate().setCount(element, count);
+ }
+
+ public boolean setCount(E element, int oldCount, int newCount) {
+ return delegate().setCount(element, oldCount, newCount);
+ }
+}
diff --git a/src/com/google/common/collect/ForwardingObject.java b/src/com/google/common/collect/ForwardingObject.java
new file mode 100644
index 0000000..1cc1ef4
--- /dev/null
+++ b/src/com/google/common/collect/ForwardingObject.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+
+/**
+ * An abstract base class for implementing the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ * The {@link #delegate()} method must be overridden to return the instance
+ * being decorated.
+ *
+ * This class does <i>not</i> forward the {@code hashCode} and {@code equals}
+ * methods through to the backing object, but relies on {@code Object}'s
+ * implementation. This is necessary to preserve the symmetry of {@code equals}.
+ * Custom definitions of equality are usually based on an interface, such as
+ * {@code Set} or {@code List}, so that the implementation of {@code equals} can
+ * cast the object being tested for equality to the custom interface. {@code
+ * ForwardingObject} implements no such custom interfaces directly; they
+ * are implemented only in subclasses. Therefore, forwarding {@code equals}
+ * would break symmetry, as the forwarding object might consider itself equal to
+ * the object being tested, but the reverse could not be true. This behavior is
+ * consistent with the JDK's collection wrappers, such as
+ * {@link java.util.Collections#unmodifiableCollection}. Use an
+ * interface-specific subclass of {@code ForwardingObject}, such as {@link
+ * ForwardingList}, to preserve equality behavior, or override {@code equals}
+ * directly.
+ *
+ * <p>The {@code toString} method is forwarded to the delegate. Although this
+ * class does not implement {@link Serializable}, a serializable subclass may be
+ * created since this class has a parameter-less constructor.
+ *
+ * @author Mike Bostock
+ */
+@GwtCompatible
+public abstract class ForwardingObject {
+
+ /** Sole constructor. */
+ protected ForwardingObject() {}
+
+ /**
+ * Returns the backing delegate instance that methods are forwarded to.
+ * Abstract subclasses generally override this method with an abstract method
+ * that has a more specific return type, such as {@link
+ * ForwardingSet#delegate}. Concrete subclasses override this method to supply
+ * the instance being decorated.
+ */
+ protected abstract Object delegate();
+
+ /**
+ * Returns the string representation generated by the delegate's
+ * {@code toString} method.
+ */
+ @Override public String toString() {
+ return delegate().toString();
+ }
+
+ /* No equals or hashCode. See class comments for details. */
+}
diff --git a/src/com/google/common/collect/ForwardingQueue.java b/src/com/google/common/collect/ForwardingQueue.java
new file mode 100644
index 0000000..5fa250a
--- /dev/null
+++ b/src/com/google/common/collect/ForwardingQueue.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Queue;
+
+/**
+ * A queue which forwards all its method calls to another queue. Subclasses
+ * should override one or more methods to modify the behavior of the backing
+ * queue as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * @see ForwardingObject
+ * @author Mike Bostock
+ */
+@GwtCompatible
+public abstract class ForwardingQueue<E> extends ForwardingCollection<E>
+ implements Queue<E> {
+
+ @Override protected abstract Queue<E> delegate();
+
+ public boolean offer(E o) {
+ return delegate().offer(o);
+ }
+
+ public E poll() {
+ return delegate().poll();
+ }
+
+ public E remove() {
+ return delegate().remove();
+ }
+
+ public E peek() {
+ return delegate().peek();
+ }
+
+ public E element() {
+ return delegate().element();
+ }
+}
diff --git a/src/com/google/common/collect/ForwardingSet.java b/src/com/google/common/collect/ForwardingSet.java
new file mode 100644
index 0000000..d15de08
--- /dev/null
+++ b/src/com/google/common/collect/ForwardingSet.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * A set which forwards all its method calls to another set. Subclasses should
+ * override one or more methods to modify the behavior of the backing set as
+ * desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * @see ForwardingObject
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+public abstract class ForwardingSet<E> extends ForwardingCollection<E>
+ implements Set<E> {
+
+ @Override protected abstract Set<E> delegate();
+
+ @Override public boolean equals(@Nullable Object object) {
+ return object == this || delegate().equals(object);
+ }
+
+ @Override public int hashCode() {
+ return delegate().hashCode();
+ }
+}
diff --git a/src/com/google/common/collect/ForwardingSortedMap.java b/src/com/google/common/collect/ForwardingSortedMap.java
new file mode 100644
index 0000000..f114bc5
--- /dev/null
+++ b/src/com/google/common/collect/ForwardingSortedMap.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Comparator;
+import java.util.SortedMap;
+
+/**
+ * A sorted map which forwards all its method calls to another sorted map.
+ * Subclasses should override one or more methods to modify the behavior of
+ * the backing sorted map as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * @see ForwardingObject
+ * @author Mike Bostock
+ */
+@GwtCompatible
+public abstract class ForwardingSortedMap<K, V> extends ForwardingMap<K, V>
+ implements SortedMap<K, V> {
+
+ @Override protected abstract SortedMap<K, V> delegate();
+
+ public Comparator<? super K> comparator() {
+ return delegate().comparator();
+ }
+
+ public K firstKey() {
+ return delegate().firstKey();
+ }
+
+ public SortedMap<K, V> headMap(K toKey) {
+ return delegate().headMap(toKey);
+ }
+
+ public K lastKey() {
+ return delegate().lastKey();
+ }
+
+ public SortedMap<K, V> subMap(K fromKey, K toKey) {
+ return delegate().subMap(fromKey, toKey);
+ }
+
+ public SortedMap<K, V> tailMap(K fromKey) {
+ return delegate().tailMap(fromKey);
+ }
+}
diff --git a/src/com/google/common/collect/ForwardingSortedSet.java b/src/com/google/common/collect/ForwardingSortedSet.java
new file mode 100644
index 0000000..5c0889d
--- /dev/null
+++ b/src/com/google/common/collect/ForwardingSortedSet.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Comparator;
+import java.util.SortedSet;
+
+/**
+ * A sorted set which forwards all its method calls to another sorted set.
+ * Subclasses should override one or more methods to modify the behavior of the
+ * backing sorted set as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * @see ForwardingObject
+ * @author Mike Bostock
+ */
+@GwtCompatible
+public abstract class ForwardingSortedSet<E> extends ForwardingSet<E>
+ implements SortedSet<E> {
+
+ @Override protected abstract SortedSet<E> delegate();
+
+ public Comparator<? super E> comparator() {
+ return delegate().comparator();
+ }
+
+ public E first() {
+ return delegate().first();
+ }
+
+ public SortedSet<E> headSet(E toElement) {
+ return delegate().headSet(toElement);
+ }
+
+ public E last() {
+ return delegate().last();
+ }
+
+ public SortedSet<E> subSet(E fromElement, E toElement) {
+ return delegate().subSet(fromElement, toElement);
+ }
+
+ public SortedSet<E> tailSet(E fromElement) {
+ return delegate().tailSet(fromElement);
+ }
+}
diff --git a/src/com/google/common/collect/HashBiMap.java b/src/com/google/common/collect/HashBiMap.java
new file mode 100644
index 0000000..04ff8c7
--- /dev/null
+++ b/src/com/google/common/collect/HashBiMap.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * A {@link BiMap} backed by two {@link HashMap} instances. This implementation
+ * allows null keys and values. A {@code HashBiMap} and its inverse are both
+ * serializable.
+ *
+ * @author Mike Bostock
+ */
+@GwtCompatible
+public final class HashBiMap<K, V> extends AbstractBiMap<K, V> {
+
+ /**
+ * Returns a new, empty {@code HashBiMap} with the default initial capacity
+ * (16).
+ */
+ public static <K, V> HashBiMap<K, V> create() {
+ return new HashBiMap<K, V>();
+ }
+
+ /**
+ * Constructs a new, empty bimap with the specified expected size.
+ *
+ * @param expectedSize the expected number of entries
+ * @throws IllegalArgumentException if the specified expected size is
+ * negative
+ */
+ public static <K, V> HashBiMap<K, V> create(int expectedSize) {
+ return new HashBiMap<K, V>(expectedSize);
+ }
+
+ /**
+ * Constructs a new bimap containing initial values from {@code map}. The
+ * bimap is created with an initial capacity sufficient to hold the mappings
+ * in the specified map.
+ */
+ public static <K, V> HashBiMap<K, V> create(
+ Map<? extends K, ? extends V> map) {
+ HashBiMap<K, V> bimap = create(map.size());
+ bimap.putAll(map);
+ return bimap;
+ }
+
+ private HashBiMap() {
+ super(new HashMap<K, V>(), new HashMap<V, K>());
+ }
+
+ private HashBiMap(int expectedSize) {
+ super(new HashMap<K, V>(Maps.capacity(expectedSize)),
+ new HashMap<V, K>(Maps.capacity(expectedSize)));
+ }
+
+ // Override these two methods to show that keys and values may be null
+
+ @Override public V put(@Nullable K key, @Nullable V value) {
+ return super.put(key, value);
+ }
+
+ @Override public V forcePut(@Nullable K key, @Nullable V value) {
+ return super.forcePut(key, value);
+ }
+
+ /**
+ * @serialData the number of entries, first key, first value, second key,
+ * second value, and so on.
+ */
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ stream.defaultWriteObject();
+ Serialization.writeMap(this, stream);
+ }
+
+ private void readObject(ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+ int size = Serialization.readCount(stream);
+ setDelegates(Maps.<K, V>newHashMapWithExpectedSize(size),
+ Maps.<V, K>newHashMapWithExpectedSize(size));
+ Serialization.populateMap(this, stream, size);
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/HashMultimap.java b/src/com/google/common/collect/HashMultimap.java
new file mode 100644
index 0000000..4af206e
--- /dev/null
+++ b/src/com/google/common/collect/HashMultimap.java
@@ -0,0 +1,137 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Preconditions;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Implementation of {@link Multimap} using hash tables.
+ *
+ * <p>The multimap does not store duplicate key-value pairs. Adding a new
+ * key-value pair equal to an existing key-value pair has no effect.
+ *
+ * <p>Keys and values may be null. All optional multimap methods are supported,
+ * and all returned views are modifiable.
+ *
+ * <p>This class is not threadsafe when any concurrent operations update the
+ * multimap. Concurrent read operations will work correctly. To allow concurrent
+ * update operations, wrap your multimap with a call to {@link
+ * Multimaps#synchronizedSetMultimap}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(serializable = true)
+public final class HashMultimap<K, V> extends AbstractSetMultimap<K, V> {
+ private static final int DEFAULT_VALUES_PER_KEY = 8;
+
+ @VisibleForTesting
+ transient int expectedValuesPerKey = DEFAULT_VALUES_PER_KEY;
+
+ /**
+ * Creates a new, empty {@code HashMultimap} with the default initial
+ * capacities.
+ */
+ public static <K, V> HashMultimap<K, V> create() {
+ return new HashMultimap<K, V>();
+ }
+
+ /**
+ * Constructs an empty {@code HashMultimap} with enough capacity to hold the
+ * specified numbers of keys and values without rehashing.
+ *
+ * @param expectedKeys the expected number of distinct keys
+ * @param expectedValuesPerKey the expected average number of values per key
+ * @throws IllegalArgumentException if {@code expectedKeys} or {@code
+ * expectedValuesPerKey} is negative
+ */
+ public static <K, V> HashMultimap<K, V> create(
+ int expectedKeys, int expectedValuesPerKey) {
+ return new HashMultimap<K, V>(expectedKeys, expectedValuesPerKey);
+ }
+
+ /**
+ * Constructs a {@code HashMultimap} with the same mappings as the specified
+ * multimap. If a key-value mapping appears multiple times in the input
+ * multimap, it only appears once in the constructed multimap.
+ *
+ * @param multimap the multimap whose contents are copied to this multimap
+ */
+ public static <K, V> HashMultimap<K, V> create(
+ Multimap<? extends K, ? extends V> multimap) {
+ return new HashMultimap<K, V>(multimap);
+ }
+
+ private HashMultimap() {
+ super(new HashMap<K, Collection<V>>());
+ }
+
+ private HashMultimap(int expectedKeys, int expectedValuesPerKey) {
+ super(Maps.<K, Collection<V>>newHashMapWithExpectedSize(expectedKeys));
+ Preconditions.checkArgument(expectedValuesPerKey >= 0);
+ this.expectedValuesPerKey = expectedValuesPerKey;
+ }
+
+ private HashMultimap(Multimap<? extends K, ? extends V> multimap) {
+ super(Maps.<K, Collection<V>>newHashMapWithExpectedSize(
+ multimap.keySet().size()));
+ putAll(multimap);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>Creates an empty {@code HashSet} for a collection of values for one key.
+ *
+ * @return a new {@code HashSet} containing a collection of values for one key
+ */
+ @Override Set<V> createCollection() {
+ return Sets.<V>newHashSetWithExpectedSize(expectedValuesPerKey);
+ }
+
+ /**
+ * @serialData expectedValuesPerKey, number of distinct keys, and then for
+ * each distinct key: the key, number of values for that key, and the
+ * key's values
+ */
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ stream.defaultWriteObject();
+ stream.writeInt(expectedValuesPerKey);
+ Serialization.writeMultimap(this, stream);
+ }
+
+ private void readObject(ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+ expectedValuesPerKey = stream.readInt();
+ int distinctKeys = Serialization.readCount(stream);
+ Map<K, Collection<V>> map = Maps.newHashMapWithExpectedSize(distinctKeys);
+ setMap(map);
+ Serialization.populateMultimap(this, stream, distinctKeys);
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/HashMultiset.java b/src/com/google/common/collect/HashMultiset.java
new file mode 100644
index 0000000..5de9875
--- /dev/null
+++ b/src/com/google/common/collect/HashMultiset.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.HashMap;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Multiset implementation backed by a {@link HashMap}.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ */
+@GwtCompatible(serializable = true)
+public final class HashMultiset<E> extends AbstractMapBasedMultiset<E> {
+
+ /**
+ * Creates a new, empty {@code HashMultiset} using the default initial
+ * capacity.
+ */
+ public static <E> HashMultiset<E> create() {
+ return new HashMultiset<E>();
+ }
+
+ /**
+ * Creates a new, empty {@code HashMultiset} with the specified expected
+ * number of distinct elements.
+ *
+ * @param distinctElements the expected number of distinct elements
+ * @throws IllegalArgumentException if {@code distinctElements} is negative
+ */
+ public static <E> HashMultiset<E> create(int distinctElements) {
+ return new HashMultiset<E>(distinctElements);
+ }
+
+ /**
+ * Creates a new {@code HashMultiset} containing the specified elements.
+ *
+ * @param elements the elements that the multiset should contain
+ */
+ public static <E> HashMultiset<E> create(Iterable<? extends E> elements) {
+ HashMultiset<E> multiset =
+ create(Multisets.inferDistinctElements(elements));
+ Iterables.addAll(multiset, elements);
+ return multiset;
+ }
+
+ private HashMultiset() {
+ super(new HashMap<E, AtomicInteger>());
+ }
+
+ private HashMultiset(int distinctElements) {
+ super(new HashMap<E, AtomicInteger>(Maps.capacity(distinctElements)));
+ }
+
+ /**
+ * @serialData the number of distinct elements, the first element, its count,
+ * the second element, its count, and so on
+ */
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ stream.defaultWriteObject();
+ Serialization.writeMultiset(this, stream);
+ }
+
+ private void readObject(ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+ int distinctElements = Serialization.readCount(stream);
+ setBackingMap(
+ Maps.<E, AtomicInteger>newHashMapWithExpectedSize(distinctElements));
+ Serialization.populateMultiset(this, stream, distinctElements);
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/Hashing.java b/src/com/google/common/collect/Hashing.java
new file mode 100644
index 0000000..158888d
--- /dev/null
+++ b/src/com/google/common/collect/Hashing.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import static com.google.common.base.Preconditions.checkArgument;
+
+/**
+ * Static methods for implementing hash-based collections.
+ *
+ * @author Kevin Bourrillion
+ * @author Jesse Wilson
+ */
+@GwtCompatible
+final class Hashing {
+ private Hashing() {}
+
+ /*
+ * This method was written by Doug Lea with assistance from members of JCP
+ * JSR-166 Expert Group and released to the public domain, as explained at
+ * http://creativecommons.org/licenses/publicdomain
+ */
+ static int smear(int hashCode) {
+ hashCode ^= (hashCode >>> 20) ^ (hashCode >>> 12);
+ return hashCode ^ (hashCode >>> 7) ^ (hashCode >>> 4);
+ }
+
+ // We use power-of-2 tables, and this is the highest int that's a power of 2
+ private static final int MAX_TABLE_SIZE = 1 << 30;
+
+ // If the set has this many elements, it will "max out" the table size
+ private static final int CUTOFF = 1 << 29;
+
+ // Size the table to be at most 50% full, if possible
+ static int chooseTableSize(int setSize) {
+ if (setSize < CUTOFF) {
+ return Integer.highestOneBit(setSize) << 2;
+ }
+
+ // The table can't be completely full or we'll get infinite reprobes
+ checkArgument(setSize < MAX_TABLE_SIZE, "collection too large");
+ return MAX_TABLE_SIZE;
+ }
+}
diff --git a/src/com/google/common/collect/ImmutableBiMap.java b/src/com/google/common/collect/ImmutableBiMap.java
new file mode 100644
index 0000000..e9c31c0
--- /dev/null
+++ b/src/com/google/common/collect/ImmutableBiMap.java
@@ -0,0 +1,311 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * An immutable {@link BiMap} with reliable user-specified iteration order. Does
+ * not permit null keys or values. An {@code ImmutableBiMap} and its inverse
+ * have the same iteration ordering.
+ *
+ * <p>An instance of {@code ImmutableBiMap} contains its own data and will
+ * <i>never</i> change. {@code ImmutableBiMap} is convenient for
+ * {@code public static final} maps ("constant maps") and also lets you easily
+ * make a "defensive copy" of a bimap provided to your class by a caller.
+ *
+ * <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
+ * it has no public or protected constructors. Thus, instances of this class are
+ * guaranteed to be immutable.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(serializable = true)
+public abstract class ImmutableBiMap<K, V> extends ImmutableMap<K, V>
+ implements BiMap<K, V> {
+
+ private static final ImmutableBiMap<Object, Object> EMPTY_IMMUTABLE_BIMAP
+ = new EmptyBiMap();
+
+ /**
+ * Returns the empty bimap.
+ */
+ // Casting to any type is safe because the set will never hold any elements.
+ @SuppressWarnings("unchecked")
+ public static <K, V> ImmutableBiMap<K, V> of() {
+ return (ImmutableBiMap<K, V>) EMPTY_IMMUTABLE_BIMAP;
+ }
+
+ /**
+ * Returns an immutable bimap containing a single entry.
+ */
+ public static <K, V> ImmutableBiMap<K, V> of(K k1, V v1) {
+ return new RegularImmutableBiMap<K, V>(ImmutableMap.of(k1, v1));
+ }
+
+ /**
+ * Returns an immutable map containing the given entries, in order.
+ *
+ * @throws IllegalArgumentException if duplicate keys or values are added
+ */
+ public static <K, V> ImmutableBiMap<K, V> of(K k1, V v1, K k2, V v2) {
+ return new RegularImmutableBiMap<K, V>(ImmutableMap.of(k1, v1, k2, v2));
+ }
+
+ /**
+ * Returns an immutable map containing the given entries, in order.
+ *
+ * @throws IllegalArgumentException if duplicate keys or values are added
+ */
+ public static <K, V> ImmutableBiMap<K, V> of(
+ K k1, V v1, K k2, V v2, K k3, V v3) {
+ return new RegularImmutableBiMap<K, V>(ImmutableMap.of(
+ k1, v1, k2, v2, k3, v3));
+ }
+
+ /**
+ * Returns an immutable map containing the given entries, in order.
+ *
+ * @throws IllegalArgumentException if duplicate keys or values are added
+ */
+ public static <K, V> ImmutableBiMap<K, V> of(
+ K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
+ return new RegularImmutableBiMap<K, V>(ImmutableMap.of(
+ k1, v1, k2, v2, k3, v3, k4, v4));
+ }
+
+ /**
+ * Returns an immutable map containing the given entries, in order.
+ *
+ * @throws IllegalArgumentException if duplicate keys or values are added
+ */
+ public static <K, V> ImmutableBiMap<K, V> of(
+ K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
+ return new RegularImmutableBiMap<K, V>(ImmutableMap.of(
+ k1, v1, k2, v2, k3, v3, k4, v4, k5, v5));
+ }
+
+ // looking for of() with > 5 entries? Use the builder instead.
+
+ /**
+ * Returns a new builder. The generated builder is equivalent to the builder
+ * created by the {@link Builder} constructor.
+ */
+ public static <K, V> Builder<K, V> builder() {
+ return new Builder<K, V>();
+ }
+
+ /**
+ * A builder for creating immutable bimap instances, especially {@code public
+ * static final} bimaps ("constant bimaps"). Example: <pre> {@code
+ *
+ * static final ImmutableBiMap<String, Integer> WORD_TO_INT =
+ * new ImmutableBiMap.Builder<String, Integer>()
+ * .put("one", 1)
+ * .put("two", 2)
+ * .put("three", 3)
+ * .build();}</pre>
+ *
+ * For <i>small</i> immutable bimaps, the {@code ImmutableBiMap.of()} methods
+ * are even more convenient.
+ *
+ * <p>Builder instances can be reused - it is safe to call {@link #build}
+ * multiple times to build multiple bimaps in series. Each bimap is a superset
+ * of the bimaps created before it.
+ */
+ public static final class Builder<K, V> extends ImmutableMap.Builder<K, V> {
+
+ /**
+ * Creates a new builder. The returned builder is equivalent to the builder
+ * generated by {@link ImmutableBiMap#builder}.
+ */
+ public Builder() {}
+
+ /**
+ * Associates {@code key} with {@code value} in the built bimap. Duplicate
+ * keys or values are not allowed, and will cause {@link #build} to fail.
+ */
+ @Override public Builder<K, V> put(K key, V value) {
+ super.put(key, value);
+ return this;
+ }
+
+ /**
+ * Associates all of the given map's keys and values in the built bimap.
+ * Duplicate keys or values are not allowed, and will cause {@link #build}
+ * to fail.
+ *
+ * @throws NullPointerException if any key or value in {@code map} is null
+ */
+ @Override public Builder<K, V> putAll(Map<? extends K, ? extends V> map) {
+ super.putAll(map);
+ return this;
+ }
+
+ /**
+ * Returns a newly-created immutable bimap.
+ *
+ * @throws IllegalArgumentException if duplicate keys or values were added
+ */
+ @Override public ImmutableBiMap<K, V> build() {
+ ImmutableMap<K, V> map = super.build();
+ if (map.isEmpty()) {
+ return of();
+ }
+ return new RegularImmutableBiMap<K, V>(super.build());
+ }
+ }
+
+ /**
+ * Returns an immutable bimap containing the same entries as {@code map}. If
+ * {@code map} somehow contains entries with duplicate keys (for example, if
+ * it is a {@code SortedMap} whose comparator is not <i>consistent with
+ * equals</i>), the results of this method are undefined.
+ *
+ * <p><b>Note:</b> If {@code map} is an {@code ImmutableBiMap}, the given map
+ * itself will be returned.
+ *
+ * @throws IllegalArgumentException if two keys have the same value
+ * @throws NullPointerException if any key or value in {@code map} is null
+ */
+ public static <K, V> ImmutableBiMap<K, V> copyOf(
+ Map<? extends K, ? extends V> map) {
+ if (map instanceof ImmutableBiMap) {
+ @SuppressWarnings("unchecked") // safe since map is not writable
+ ImmutableBiMap<K, V> bimap = (ImmutableBiMap<K, V>) map;
+ return bimap;
+ }
+
+ if (map.isEmpty()) {
+ return of();
+ }
+
+ ImmutableMap<K, V> immutableMap = ImmutableMap.copyOf(map);
+ return new RegularImmutableBiMap<K, V>(immutableMap);
+ }
+
+ ImmutableBiMap() {}
+
+ abstract ImmutableMap<K, V> delegate();
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The inverse of an {@code ImmutableBiMap} is another
+ * {@code ImmutableBiMap}.
+ */
+ public abstract ImmutableBiMap<V, K> inverse();
+
+ @Override public boolean containsKey(@Nullable Object key) {
+ return delegate().containsKey(key);
+ }
+
+ @Override public boolean containsValue(@Nullable Object value) {
+ return inverse().containsKey(value);
+ }
+
+ @Override public ImmutableSet<Entry<K, V>> entrySet() {
+ return delegate().entrySet();
+ }
+
+ @Override public V get(@Nullable Object key) {
+ return delegate().get(key);
+ }
+
+ @Override public ImmutableSet<K> keySet() {
+ return delegate().keySet();
+ }
+
+ /**
+ * Returns an immutable set of the values in this map. The values are in the
+ * same order as the parameters used to build this map.
+ */
+ @Override public ImmutableSet<V> values() {
+ return inverse().keySet();
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the bimap unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public V forcePut(K key, V value) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override public boolean isEmpty() {
+ return delegate().isEmpty();
+ }
+
+ public int size() {
+ return delegate().size();
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ return object == this || delegate().equals(object);
+ }
+
+ @Override public int hashCode() {
+ return delegate().hashCode();
+ }
+
+ @Override public String toString() {
+ return delegate().toString();
+ }
+
+ /** Bimap with no mappings. */
+ @SuppressWarnings("serial") // uses writeReplace(), not default serialization
+ static class EmptyBiMap extends ImmutableBiMap<Object, Object> {
+ @Override ImmutableMap<Object, Object> delegate() {
+ return ImmutableMap.of();
+ }
+ @Override public ImmutableBiMap<Object, Object> inverse() {
+ return this;
+ }
+ Object readResolve() {
+ return EMPTY_IMMUTABLE_BIMAP; // preserve singleton property
+ }
+ }
+
+ /**
+ * Serialized type for all ImmutableBiMap instances. It captures the logical
+ * contents and they are reconstructed using public factory methods. This
+ * ensures that the implementation types remain as implementation details.
+ *
+ * Since the bimap is immutable, ImmutableBiMap doesn't require special logic
+ * for keeping the bimap and its inverse in sync during serialization, the way
+ * AbstractBiMap does.
+ */
+ private static class SerializedForm extends ImmutableMap.SerializedForm {
+ SerializedForm(ImmutableBiMap<?, ?> bimap) {
+ super(bimap);
+ }
+ @Override Object readResolve() {
+ Builder<Object, Object> builder = new Builder<Object, Object>();
+ return createMap(builder);
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ @Override Object writeReplace() {
+ return new SerializedForm(this);
+ }
+}
diff --git a/src/com/google/common/collect/ImmutableClassToInstanceMap.java b/src/com/google/common/collect/ImmutableClassToInstanceMap.java
new file mode 100644
index 0000000..525f47d
--- /dev/null
+++ b/src/com/google/common/collect/ImmutableClassToInstanceMap.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.MutableClassToInstanceMap.cast;
+
+import java.util.Map;
+
+/**
+ * A class-to-instance map backed by an {@link ImmutableMap}. See also {@link
+ * MutableClassToInstanceMap}.
+ *
+ * @author Kevin Bourrillion
+ */
+public final class ImmutableClassToInstanceMap<B> extends
+ ForwardingMap<Class<? extends B>, B> implements ClassToInstanceMap<B> {
+ /**
+ * Returns a new builder. The generated builder is equivalent to the builder
+ * created by the {@link Builder} constructor.
+ */
+ public static <B> Builder<B> builder() {
+ return new Builder<B>();
+ }
+
+ /**
+ * A builder for creating immutable class-to-instance maps. Example:
+ * <pre> {@code
+ *
+ * static final ImmutableClassToInstanceMap<Handler> HANDLERS =
+ * new ImmutableClassToInstanceMap.Builder<Handler>()
+ * .put(FooHandler.class, new FooHandler())
+ * .put(BarHandler.class, new SubBarHandler())
+ * .put(Handler.class, new QuuxHandler())
+ * .build();}</pre>
+ *
+ * <p>After invoking {@link #build()} it is still possible to add more
+ * entries and build again. Thus each map generated by this builder will be
+ * a superset of any map generated before it.
+ */
+ public static final class Builder<B> {
+ private final ImmutableMap.Builder<Class<? extends B>, B> mapBuilder
+ = ImmutableMap.builder();
+
+ /**
+ * Associates {@code key} with {@code value} in the built map. Duplicate
+ * keys are not allowed, and will cause {@link #build} to fail.
+ */
+ public <T extends B> Builder<B> put(Class<T> type, T value) {
+ mapBuilder.put(type, value);
+ return this;
+ }
+
+ /**
+ * Associates all of {@code map's} keys and values in the built map.
+ * Duplicate keys are not allowed, and will cause {@link #build} to fail.
+ *
+ * @throws NullPointerException if any key or value in {@code map} is null
+ * @throws ClassCastException if any value is not an instance of the type
+ * specified by its key
+ */
+ public <T extends B> Builder<B> putAll(
+ Map<? extends Class<? extends T>, ? extends T> map) {
+ for (Entry<? extends Class<? extends T>, ? extends T> entry
+ : map.entrySet()) {
+ Class<? extends T> type = entry.getKey();
+ T value = entry.getValue();
+ mapBuilder.put(type, cast(type, value));
+ }
+ return this;
+ }
+
+ /**
+ * Returns a new immutable class-to-instance map containing the entries
+ * provided to this builder.
+ *
+ * @throws IllegalArgumentException if duplicate keys were added
+ */
+ public ImmutableClassToInstanceMap<B> build() {
+ return new ImmutableClassToInstanceMap<B>(mapBuilder.build());
+ }
+ }
+
+ /**
+ * Returns an immutable map containing the same entries as {@code map}. If
+ * {@code map} somehow contains entries with duplicate keys (for example, if
+ * it is a {@code SortedMap} whose comparator is not <i>consistent with
+ * equals</i>), the results of this method are undefined.
+ *
+ * <p><b>Note:</b> Despite what the method name suggests, if {@code map} is
+ * an {@code ImmutableClassToInstanceMap}, no copy will actually be performed.
+ *
+ * @throws NullPointerException if any key or value in {@code map} is null
+ * @throws ClassCastException if any value is not an instance of the type
+ * specified by its key
+ */
+ @SuppressWarnings("unchecked") // covariant casts safe (unmodifiable)
+ public static <B, S extends B> ImmutableClassToInstanceMap<B> copyOf(
+ Map<? extends Class<? extends S>, ? extends S> map) {
+ if (map instanceof ImmutableClassToInstanceMap) {
+ return (ImmutableClassToInstanceMap<B>) (Map) map;
+ }
+ return new Builder<B>().putAll(map).build();
+ }
+
+ private final ImmutableMap<Class<? extends B>, B> delegate;
+
+ private ImmutableClassToInstanceMap(
+ ImmutableMap<Class<? extends B>, B> delegate) {
+ this.delegate = delegate;
+ }
+
+ @Override protected Map<Class<? extends B>, B> delegate() {
+ return delegate;
+ }
+
+ @SuppressWarnings("unchecked") // value could not get in if not a T
+ public <T extends B> T getInstance(Class<T> type) {
+ return (T) delegate.get(type);
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the map unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public <T extends B> T putInstance(Class<T> type, T value) {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git a/src/com/google/common/collect/ImmutableCollection.java b/src/com/google/common/collect/ImmutableCollection.java
new file mode 100644
index 0000000..56bae64
--- /dev/null
+++ b/src/com/google/common/collect/ImmutableCollection.java
@@ -0,0 +1,317 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Iterator;
+
+import javax.annotation.Nullable;
+
+/**
+ * An immutable collection. Does not permit null elements.
+ *
+ * <p><b>Note</b>: Although this class is not final, it cannot be subclassed
+ * outside of this package as it has no public or protected constructors. Thus,
+ * instances of this type are guaranteed to be immutable.
+ *
+ * @author Jesse Wilson
+ */
+@GwtCompatible
+@SuppressWarnings("serial") // we're overriding default serialization
+public abstract class ImmutableCollection<E>
+ implements Collection<E>, Serializable {
+ static final ImmutableCollection<Object> EMPTY_IMMUTABLE_COLLECTION
+ = new EmptyImmutableCollection();
+
+ ImmutableCollection() {}
+
+ /**
+ * Returns an unmodifiable iterator across the elements in this collection.
+ */
+ public abstract UnmodifiableIterator<E> iterator();
+
+ public Object[] toArray() {
+ Object[] newArray = new Object[size()];
+ return toArray(newArray);
+ }
+
+ public <T> T[] toArray(T[] other) {
+ int size = size();
+ if (other.length < size) {
+ other = ObjectArrays.newArray(other, size);
+ } else if (other.length > size) {
+ other[size] = null;
+ }
+
+ // Writes will produce ArrayStoreException when the toArray() doc requires.
+ Object[] otherAsObjectArray = other;
+ int index = 0;
+ for (E element : this) {
+ otherAsObjectArray[index++] = element;
+ }
+ return other;
+ }
+
+ public boolean contains(@Nullable Object object) {
+ if (object == null) {
+ return false;
+ }
+ for (E element : this) {
+ if (element.equals(object)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean containsAll(Collection<?> targets) {
+ for (Object target : targets) {
+ if (!contains(target)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public boolean isEmpty() {
+ return size() == 0;
+ }
+
+ @Override public String toString() {
+ StringBuilder sb = new StringBuilder(size() * 16).append('[');
+ Collections2.standardJoiner.appendTo(sb, this);
+ return sb.append(']').toString();
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the collection unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public final boolean add(E e) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the collection unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public final boolean remove(Object object) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the collection unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public final boolean addAll(Collection<? extends E> newElements) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the collection unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public final boolean removeAll(Collection<?> oldElements) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the collection unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public final boolean retainAll(Collection<?> elementsToKeep) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the collection unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public final void clear() {
+ throw new UnsupportedOperationException();
+ }
+
+ private static class EmptyImmutableCollection
+ extends ImmutableCollection<Object> {
+ public int size() {
+ return 0;
+ }
+
+ @Override public boolean isEmpty() {
+ return true;
+ }
+
+ @Override public boolean contains(@Nullable Object object) {
+ return false;
+ }
+
+ @Override public UnmodifiableIterator<Object> iterator() {
+ return Iterators.EMPTY_ITERATOR;
+ }
+
+ private static final Object[] EMPTY_ARRAY = new Object[0];
+
+ @Override public Object[] toArray() {
+ return EMPTY_ARRAY;
+ }
+
+ @Override public <T> T[] toArray(T[] array) {
+ if (array.length > 0) {
+ array[0] = null;
+ }
+ return array;
+ }
+ }
+
+ private static class ArrayImmutableCollection<E>
+ extends ImmutableCollection<E> {
+ private final E[] elements;
+
+ ArrayImmutableCollection(E[] elements) {
+ this.elements = elements;
+ }
+
+ public int size() {
+ return elements.length;
+ }
+
+ @Override public boolean isEmpty() {
+ return false;
+ }
+
+ @Override public UnmodifiableIterator<E> iterator() {
+ return Iterators.forArray(elements);
+ }
+ }
+
+ /*
+ * Serializes ImmutableCollections as their logical contents. This ensures
+ * that implementation types do not leak into the serialized representation.
+ */
+ private static class SerializedForm implements Serializable {
+ final Object[] elements;
+ SerializedForm(Object[] elements) {
+ this.elements = elements;
+ }
+ Object readResolve() {
+ return elements.length == 0
+ ? EMPTY_IMMUTABLE_COLLECTION
+ : new ArrayImmutableCollection<Object>(Platform.clone(elements));
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ Object writeReplace() {
+ return new SerializedForm(toArray());
+ }
+
+ /**
+ * Abstract base class for builders of {@link ImmutableCollection} types.
+ */
+ abstract static class Builder<E> {
+ /**
+ * Adds {@code element} to the {@code ImmutableCollection} being built.
+ *
+ * <p>Note that each builder class covariantly returns its own type from
+ * this method.
+ *
+ * @param element the element to add
+ * @return this {@code Builder} instance
+ * @throws NullPointerException if {@code element} is null
+ */
+ public abstract Builder<E> add(E element);
+
+ /**
+ * Adds each element of {@code elements} to the {@code ImmutableCollection}
+ * being built.
+ *
+ * <p>Note that each builder class overrides this method in order to
+ * covariantly return its own type.
+ *
+ * @param elements the elements to add
+ * @return this {@code Builder} instance
+ * @throws NullPointerException if {@code elements} is null or contains a
+ * null element
+ */
+ public Builder<E> add(E... elements) {
+ checkNotNull(elements); // for GWT
+ for (E element : elements) {
+ add(element);
+ }
+ return this;
+ }
+
+ /**
+ * Adds each element of {@code elements} to the {@code ImmutableCollection}
+ * being built.
+ *
+ * <p>Note that each builder class overrides this method in order to
+ * covariantly return its own type.
+ *
+ * @param elements the elements to add
+ * @return this {@code Builder} instance
+ * @throws NullPointerException if {@code elements} is null or contains a
+ * null element
+ */
+ public Builder<E> addAll(Iterable<? extends E> elements) {
+ checkNotNull(elements); // for GWT
+ for (E element : elements) {
+ add(element);
+ }
+ return this;
+ }
+
+ /**
+ * Adds each element of {@code elements} to the {@code ImmutableCollection}
+ * being built.
+ *
+ * <p>Note that each builder class overrides this method in order to
+ * covariantly return its own type.
+ *
+ * @param elements the elements to add
+ * @return this {@code Builder} instance
+ * @throws NullPointerException if {@code elements} is null or contains a
+ * null element
+ */
+ public Builder<E> addAll(Iterator<? extends E> elements) {
+ checkNotNull(elements); // for GWT
+ while (elements.hasNext()) {
+ add(elements.next());
+ }
+ return this;
+ }
+
+ /**
+ * Returns a newly-created {@code ImmutableCollection} of the appropriate
+ * type, containing the elements provided to this builder.
+ *
+ * <p>Note that each builder class covariantly returns the appropriate type
+ * of {@code ImmutableCollection} from this method.
+ */
+ public abstract ImmutableCollection<E> build();
+ }
+}
diff --git a/src/com/google/common/collect/ImmutableEntry.java b/src/com/google/common/collect/ImmutableEntry.java
new file mode 100644
index 0000000..56b1c9b
--- /dev/null
+++ b/src/com/google/common/collect/ImmutableEntry.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+
+import javax.annotation.Nullable;
+
+/**
+ * @see com.google.common.collect.Maps#immutableEntry(Object, Object)
+ */
+@GwtCompatible
+class ImmutableEntry<K, V> extends AbstractMapEntry<K, V>
+ implements Serializable {
+ private final K key;
+ private final V value;
+
+ ImmutableEntry(@Nullable K key, @Nullable V value) {
+ this.key = key;
+ this.value = value;
+ }
+
+ @Override public K getKey() {
+ return key;
+ }
+
+ @Override public V getValue() {
+ return value;
+ }
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/ImmutableEnumSet.java b/src/com/google/common/collect/ImmutableEnumSet.java
new file mode 100644
index 0000000..1e70db8
--- /dev/null
+++ b/src/com/google/common/collect/ImmutableEnumSet.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.EnumSet;
+import java.util.Set;
+
+/**
+ * Implementation of {@link ImmutableSet} backed by a non-empty {@link
+ * java.util.EnumSet}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(serializable = true)
+@SuppressWarnings("serial") // we're overriding default serialization
+final class ImmutableEnumSet<E /*extends Enum<E>*/> extends ImmutableSet<E> {
+ /*
+ * Notes on EnumSet and <E extends Enum<E>>:
+ *
+ * This class isn't an arbitrary ForwardingImmutableSet because we need to
+ * know that calling {@code clone()} during deserialization will return an
+ * object that no one else has a reference to, allowing us to guarantee
+ * immutability. Hence, we support only {@link EnumSet}.
+ *
+ * GWT complicates matters. If we declare the class's type parameter as
+ * <E extends Enum<E>> (as is necessary to declare a field of type
+ * EnumSet<E>), GWT generates serializers for every available enum. This
+ * increases the size of some applications' JavaScript by over 10%. To avoid
+ * this, we declare the type parameter as just <E> and the field as just
+ * Set<E>. writeReplace() must then use an unchecked cast to return to
+ * EnumSet, guaranteeing immutability as described above.
+ */
+ private final transient Set<E> delegate;
+
+ ImmutableEnumSet(Set<E> delegate) {
+ this.delegate = delegate;
+ }
+
+ @Override public UnmodifiableIterator<E> iterator() {
+ return Iterators.unmodifiableIterator(delegate.iterator());
+ }
+
+ public int size() {
+ return delegate.size();
+ }
+
+ @Override public boolean contains(Object object) {
+ return delegate.contains(object);
+ }
+
+ @Override public boolean containsAll(Collection<?> collection) {
+ return delegate.containsAll(collection);
+ }
+
+ @Override public boolean isEmpty() {
+ return delegate.isEmpty();
+ }
+
+ @Override public Object[] toArray() {
+ return delegate.toArray();
+ }
+
+ @Override public <T> T[] toArray(T[] array) {
+ return delegate.toArray(array);
+ }
+
+ @Override public boolean equals(Object object) {
+ return object == this || delegate.equals(object);
+ }
+
+ private transient int hashCode;
+
+ @Override public int hashCode() {
+ int result = hashCode;
+ return (result == 0) ? hashCode = delegate.hashCode() : result;
+ }
+
+ @Override public String toString() {
+ return delegate.toString();
+ }
+
+ // All callers of the constructor are restricted to <E extends Enum<E>>.
+ @SuppressWarnings("unchecked")
+ @Override Object writeReplace() {
+ return new EnumSerializedForm((EnumSet) delegate);
+ }
+
+ /*
+ * This class is used to serialize ImmutableEnumSet instances.
+ */
+ private static class EnumSerializedForm<E extends Enum<E>>
+ implements Serializable {
+ final EnumSet<E> delegate;
+ EnumSerializedForm(EnumSet<E> delegate) {
+ this.delegate = delegate;
+ }
+ Object readResolve() {
+ // EJ2 #76: Write readObject() methods defensively.
+ return new ImmutableEnumSet<E>(delegate.clone());
+ }
+ private static final long serialVersionUID = 0;
+ }
+}
diff --git a/src/com/google/common/collect/ImmutableList.java b/src/com/google/common/collect/ImmutableList.java
new file mode 100644
index 0000000..0aa2501
--- /dev/null
+++ b/src/com/google/common/collect/ImmutableList.java
@@ -0,0 +1,510 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.RandomAccess;
+
+import javax.annotation.Nullable;
+
+/**
+ * A high-performance, immutable, random-access {@code List} implementation.
+ * Does not permit null elements.
+ *
+ * <p>Unlike {@link Collections#unmodifiableList}, which is a <i>view</i> of a
+ * separate collection that can still change, an instance of {@code
+ * ImmutableList} contains its own private data and will <i>never</i> change.
+ * {@code ImmutableList} is convenient for {@code public static final} lists
+ * ("constant lists") and also lets you easily make a "defensive copy" of a list
+ * provided to your class by a caller.
+ *
+ * <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
+ * it has no public or protected constructors. Thus, instances of this type are
+ * guaranteed to be immutable.
+ *
+ * @see ImmutableMap
+ * @see ImmutableSet
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(serializable = true)
+@SuppressWarnings("serial") // we're overriding default serialization
+public abstract class ImmutableList<E> extends ImmutableCollection<E>
+ implements List<E>, RandomAccess {
+ /**
+ * Returns the empty immutable list. This set behaves and performs comparably
+ * to {@link Collections#emptyList}, and is preferable mainly for consistency
+ * and maintainability of your code.
+ */
+ // Casting to any type is safe because the list will never hold any elements.
+ @SuppressWarnings("unchecked")
+ public static <E> ImmutableList<E> of() {
+ return (ImmutableList<E>) EmptyImmutableList.INSTANCE;
+ }
+
+ /**
+ * Returns an immutable list containing a single element. This list behaves
+ * and performs comparably to {@link Collections#singleton}, but will not
+ * accept a null element. It is preferable mainly for consistency and
+ * maintainability of your code.
+ *
+ * @throws NullPointerException if {@code element} is null
+ */
+ public static <E> ImmutableList<E> of(E element) {
+ return new SingletonImmutableList<E>(element);
+ }
+
+ /**
+ * Identical to {@link #of(Object[])}.
+ *
+ * @throws NullPointerException if any element is null
+ */
+ public static <E> ImmutableList<E> of(E e1, E e2) {
+ return new RegularImmutableList<E>(copyIntoArray(e1, e2));
+ }
+
+ /**
+ * Identical to {@link #of(Object[])}.
+ *
+ * @throws NullPointerException if any element is null
+ */
+ public static <E> ImmutableList<E> of(E e1, E e2, E e3) {
+ return new RegularImmutableList<E>(copyIntoArray(e1, e2, e3));
+ }
+
+ /**
+ * Identical to {@link #of(Object[])}.
+ *
+ * @throws NullPointerException if any element is null
+ */
+ public static <E> ImmutableList<E> of(E e1, E e2, E e3, E e4) {
+ return new RegularImmutableList<E>(copyIntoArray(e1, e2, e3, e4));
+ }
+
+ /**
+ * Identical to {@link #of(Object[])}.
+ *
+ * @throws NullPointerException if any element is null
+ */
+ public static <E> ImmutableList<E> of(E e1, E e2, E e3, E e4, E e5) {
+ return new RegularImmutableList<E>(copyIntoArray(e1, e2, e3, e4, e5));
+ }
+
+ /**
+ * Identical to {@link #of(Object[])}.
+ *
+ * @throws NullPointerException if any element is null
+ */
+ public static <E> ImmutableList<E> of(E e1, E e2, E e3, E e4, E e5, E e6) {
+ return new RegularImmutableList<E>(copyIntoArray(e1, e2, e3, e4, e5, e6));
+ }
+
+ /**
+ * Identical to {@link #of(Object[])}.
+ *
+ * @throws NullPointerException if any element is null
+ */
+ public static <E> ImmutableList<E> of(
+ E e1, E e2, E e3, E e4, E e5, E e6, E e7) {
+ return new RegularImmutableList<E>(
+ copyIntoArray(e1, e2, e3, e4, e5, e6, e7));
+ }
+
+ /**
+ * Identical to {@link #of(Object[])}.
+ *
+ * @throws NullPointerException if any element is null
+ */
+ public static <E> ImmutableList<E> of(
+ E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8) {
+ return new RegularImmutableList<E>(
+ copyIntoArray(e1, e2, e3, e4, e5, e6, e7, e8));
+ }
+
+ /**
+ * Identical to {@link #of(Object[])}.
+ *
+ * @throws NullPointerException if any element is null
+ */
+ public static <E> ImmutableList<E> of(
+ E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9) {
+ return new RegularImmutableList<E>(
+ copyIntoArray(e1, e2, e3, e4, e5, e6, e7, e8, e9));
+ }
+
+ /**
+ * Identical to {@link #of(Object[])}.
+ *
+ * @throws NullPointerException if any element is null
+ */
+ public static <E> ImmutableList<E> of(
+ E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10) {
+ return new RegularImmutableList<E>(
+ copyIntoArray(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10));
+ }
+
+ /**
+ * Identical to {@link #of(Object[])}.
+ *
+ * @throws NullPointerException if any element is null
+ */
+ public static <E> ImmutableList<E> of(
+ E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10, E e11) {
+ return new RegularImmutableList<E>(
+ copyIntoArray(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11));
+ }
+
+ // These go up to eleven. After that, you just get the varargs form, and
+ // whatever warnings might come along with it. :(
+
+ /**
+ * Returns an immutable list containing the given elements, in order.
+ *
+ * @throws NullPointerException if any of {@code elements} is null
+ */
+ public static <E> ImmutableList<E> of(E... elements) {
+ checkNotNull(elements); // for GWT
+ switch (elements.length) {
+ case 0:
+ return ImmutableList.of();
+ case 1:
+ return new SingletonImmutableList<E>(elements[0]);
+ default:
+ return new RegularImmutableList<E>(copyIntoArray(elements));
+ }
+ }
+
+ /**
+ * Returns an immutable list containing the given elements, in order. This
+ * method iterates over {@code elements} at most once. Note that if {@code
+ * list} is a {@code List<String>}, then {@code ImmutableList.copyOf(list)}
+ * returns an {@code ImmutableList<String>} containing each of the strings
+ * in {@code list}, while ImmutableList.of(list)} returns an {@code
+ * ImmutableList<List<String>>} containing one element (the given list
+ * itself).
+ *
+ * <p><b>Note:</b> Despite what the method name suggests, if {@code elements}
+ * is an {@code ImmutableList}, no copy will actually be performed, and the
+ * given list itself will be returned.
+ *
+ * @throws NullPointerException if any of {@code elements} is null
+ */
+ public static <E> ImmutableList<E> copyOf(Iterable<? extends E> elements) {
+ if (elements instanceof ImmutableList) {
+ /*
+ * TODO: If the given ImmutableList is a sublist, copy the referenced
+ * portion of the array into a new array to save space?
+ */
+ @SuppressWarnings("unchecked") // all supported methods are covariant
+ ImmutableList<E> list = (ImmutableList<E>) elements;
+ return list;
+ } else if (elements instanceof Collection) {
+ @SuppressWarnings("unchecked")
+ Collection<? extends E> coll = (Collection<? extends E>) elements;
+ return copyOfInternal(coll);
+ } else {
+ return copyOfInternal(Lists.newArrayList(elements));
+ }
+ }
+
+ /**
+ * Returns an immutable list containing the given elements, in order.
+ *
+ * @throws NullPointerException if any of {@code elements} is null
+ */
+ public static <E> ImmutableList<E> copyOf(Iterator<? extends E> elements) {
+ return copyOfInternal(Lists.newArrayList(elements));
+ }
+
+ private static <E> ImmutableList<E> copyOfInternal(
+ ArrayList<? extends E> list) {
+ switch (list.size()) {
+ case 0:
+ return of();
+ case 1:
+ return new SingletonImmutableList<E>(list.iterator().next());
+ default:
+ return new RegularImmutableList<E>(nullChecked(list.toArray()));
+ }
+ }
+
+ /**
+ * Checks that all the array elements are non-null.
+ *
+ * @return the argument array
+ * @throws NullPointerException if any element is null
+ */
+ private static Object[] nullChecked(Object[] array) {
+ for (int i = 0, len = array.length; i < len; i++) {
+ if (array[i] == null) {
+ throw new NullPointerException("at index " + i);
+ }
+ }
+ return array;
+ }
+
+ private static <E> ImmutableList<E> copyOfInternal(
+ Collection<? extends E> collection) {
+ int size = collection.size();
+ return (size == 0)
+ ? ImmutableList.<E>of()
+ : ImmutableList.<E>createFromIterable(collection, size);
+ }
+
+ ImmutableList() {}
+
+ // This declaration is needed to make List.iterator() and
+ // ImmutableCollection.iterator() consistent.
+ @Override public abstract UnmodifiableIterator<E> iterator();
+
+ // Mark these two methods with @Nullable
+
+ public abstract int indexOf(@Nullable Object object);
+
+ public abstract int lastIndexOf(@Nullable Object object);
+
+ // constrain the return type to ImmutableList<E>
+
+ /**
+ * Returns an immutable list of the elements between the specified {@code
+ * fromIndex}, inclusive, and {@code toIndex}, exclusive. (If {@code
+ * fromIndex} and {@code toIndex} are equal, the empty immutable list is
+ * returned.)
+ */
+ public abstract ImmutableList<E> subList(int fromIndex, int toIndex);
+
+ /**
+ * Guaranteed to throw an exception and leave the list unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public final boolean addAll(int index, Collection<? extends E> newElements) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the list unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public final E set(int index, E element) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the list unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public final void add(int index, E element) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the list unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public final E remove(int index) {
+ throw new UnsupportedOperationException();
+ }
+
+ private static Object[] copyIntoArray(Object... source) {
+ Object[] array = new Object[source.length];
+ int index = 0;
+ for (Object element : source) {
+ if (element == null) {
+ throw new NullPointerException("at index " + index);
+ }
+ array[index++] = element;
+ }
+ return array;
+ }
+
+ private static <E> ImmutableList<E> createFromIterable(
+ Iterable<? extends E> source, int estimatedSize) {
+ Object[] array = new Object[estimatedSize];
+ int index = 0;
+
+ for (Object element : source) {
+ if (index == estimatedSize) {
+ // At least one element was added after our call to size().
+ estimatedSize = ((estimatedSize / 2) + 1) * 3;
+ array = copyOf(array, estimatedSize);
+ }
+ if (element == null) {
+ throw new NullPointerException("at index " + index);
+ }
+ array[index++] = element;
+ }
+
+ if (index == 0) {
+ return of();
+ } else if (index == 1) {
+ // The elements of "array" come from a Iterable<? extends E>.
+ @SuppressWarnings("unchecked")
+ E element = (E) array[0];
+ return of(element);
+ }
+
+ if (index != estimatedSize) {
+ array = copyOf(array, index);
+ }
+
+ return new RegularImmutableList<E>(array, 0, index);
+ }
+
+ // Avoid using Arrays.copyOf(), which is not present until JDK6.
+ private static Object[] copyOf(Object[] oldArray, int newSize) {
+ Object[] newArray = new Object[newSize];
+ System.arraycopy(oldArray, 0, newArray, 0,
+ Math.min(oldArray.length, newSize));
+ return newArray;
+ }
+
+ /*
+ * Serializes ImmutableLists as their logical contents. This ensures that
+ * implementation types do not leak into the serialized representation.
+ */
+ private static class SerializedForm implements Serializable {
+ final Object[] elements;
+ SerializedForm(Object[] elements) {
+ this.elements = elements;
+ }
+ Object readResolve() {
+ return of(elements);
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ private void readObject(ObjectInputStream stream)
+ throws InvalidObjectException {
+ throw new InvalidObjectException("Use SerializedForm");
+ }
+
+ @Override Object writeReplace() {
+ return new SerializedForm(toArray());
+ }
+
+ /**
+ * Returns a new builder. The generated builder is equivalent to the builder
+ * created by the {@link Builder} constructor.
+ */
+ public static <E> Builder<E> builder() {
+ return new Builder<E>();
+ }
+
+ /**
+ * A builder for creating immutable list instances, especially
+ * {@code public static final} lists ("constant lists").
+ *
+ * <p>Example:
+ * <pre> {@code
+ * public static final ImmutableList<Color> GOOGLE_COLORS
+ * = new ImmutableList.Builder<Color>()
+ * .addAll(WEBSAFE_COLORS)
+ * .add(new Color(0, 191, 255))
+ * .build();}</pre>
+ *
+ * <p>Builder instances can be reused - it is safe to call {@link #build}
+ * multiple times to build multiple lists in series. Each new list
+ * contains the one created before it.
+ */
+ public static final class Builder<E> extends ImmutableCollection.Builder<E> {
+ private final ArrayList<E> contents = Lists.newArrayList();
+
+ /**
+ * Creates a new builder. The returned builder is equivalent to the builder
+ * generated by {@link ImmutableList#builder}.
+ */
+ public Builder() {}
+
+ /**
+ * Adds {@code element} to the {@code ImmutableList}.
+ *
+ * @param element the element to add
+ * @return this {@code Builder} object
+ * @throws NullPointerException if {@code element} is null
+ */
+ @Override public Builder<E> add(E element) {
+ contents.add(checkNotNull(element));
+ return this;
+ }
+
+ /**
+ * Adds each element of {@code elements} to the {@code ImmutableList}.
+ *
+ * @param elements the {@code Iterable} to add to the {@code ImmutableList}
+ * @return this {@code Builder} object
+ * @throws NullPointerException if {@code elements} is null or contains a
+ * null element
+ */
+ @Override public Builder<E> addAll(Iterable<? extends E> elements) {
+ if (elements instanceof Collection) {
+ Collection<?> collection = (Collection<?>) elements;
+ contents.ensureCapacity(contents.size() + collection.size());
+ }
+ super.addAll(elements);
+ return this;
+ }
+
+ /**
+ * Adds each element of {@code elements} to the {@code ImmutableList}.
+ *
+ * @param elements the {@code Iterable} to add to the {@code ImmutableList}
+ * @return this {@code Builder} object
+ * @throws NullPointerException if {@code elements} is null or contains a
+ * null element
+ */
+ @Override public Builder<E> add(E... elements) {
+ checkNotNull(elements); // for GWT
+ contents.ensureCapacity(contents.size() + elements.length);
+ super.add(elements);
+ return this;
+ }
+
+ /**
+ * Adds each element of {@code elements} to the {@code ImmutableList}.
+ *
+ * @param elements the {@code Iterable} to add to the {@code ImmutableList}
+ * @return this {@code Builder} object
+ * @throws NullPointerException if {@code elements} is null or contains a
+ * null element
+ */
+ @Override public Builder<E> addAll(Iterator<? extends E> elements) {
+ super.addAll(elements);
+ return this;
+ }
+
+ /**
+ * Returns a newly-created {@code ImmutableList} based on the contents of
+ * the {@code Builder}.
+ */
+ @Override public ImmutableList<E> build() {
+ return copyOf(contents);
+ }
+ }
+}
diff --git a/src/com/google/common/collect/ImmutableListMultimap.java b/src/com/google/common/collect/ImmutableListMultimap.java
new file mode 100644
index 0000000..b71b47a
--- /dev/null
+++ b/src/com/google/common/collect/ImmutableListMultimap.java
@@ -0,0 +1,336 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.IOException;
+import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Collection;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * An immutable {@link ListMultimap} with reliable user-specified key and value
+ * iteration order. Does not permit null keys or values.
+ *
+ * <p>Unlike {@link Multimaps#unmodifiableListMultimap(ListMultimap)}, which is
+ * a <i>view</i> of a separate multimap which can still change, an instance of
+ * {@code ImmutableListMultimap} contains its own data and will <i>never</i>
+ * change. {@code ImmutableListMultimap} is convenient for
+ * {@code public static final} multimaps ("constant multimaps") and also lets
+ * you easily make a "defensive copy" of a multimap provided to your class by
+ * a caller.
+ *
+ * <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
+ * it has no public or protected constructors. Thus, instances of this class
+ * are guaranteed to be immutable.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(serializable = true)
+public class ImmutableListMultimap<K, V>
+ extends ImmutableMultimap<K, V>
+ implements ListMultimap<K, V> {
+
+ /** Returns the empty multimap. */
+ // Casting is safe because the multimap will never hold any elements.
+ @SuppressWarnings("unchecked")
+ public static <K, V> ImmutableListMultimap<K, V> of() {
+ return (ImmutableListMultimap<K, V>) EmptyImmutableListMultimap.INSTANCE;
+ }
+
+ /**
+ * Returns an immutable multimap containing a single entry.
+ */
+ public static <K, V> ImmutableListMultimap<K, V> of(K k1, V v1) {
+ ImmutableListMultimap.Builder<K, V> builder
+ = ImmutableListMultimap.builder();
+ builder.put(k1, v1);
+ return builder.build();
+ }
+
+ /**
+ * Returns an immutable multimap containing the given entries, in order.
+ */
+ public static <K, V> ImmutableListMultimap<K, V> of(K k1, V v1, K k2, V v2) {
+ ImmutableListMultimap.Builder<K, V> builder
+ = ImmutableListMultimap.builder();
+ builder.put(k1, v1);
+ builder.put(k2, v2);
+ return builder.build();
+ }
+
+ /**
+ * Returns an immutable multimap containing the given entries, in order.
+ */
+ public static <K, V> ImmutableListMultimap<K, V> of(
+ K k1, V v1, K k2, V v2, K k3, V v3) {
+ ImmutableListMultimap.Builder<K, V> builder
+ = ImmutableListMultimap.builder();
+ builder.put(k1, v1);
+ builder.put(k2, v2);
+ builder.put(k3, v3);
+ return builder.build();
+ }
+
+ /**
+ * Returns an immutable multimap containing the given entries, in order.
+ */
+ public static <K, V> ImmutableListMultimap<K, V> of(
+ K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
+ ImmutableListMultimap.Builder<K, V> builder
+ = ImmutableListMultimap.builder();
+ builder.put(k1, v1);
+ builder.put(k2, v2);
+ builder.put(k3, v3);
+ builder.put(k4, v4);
+ return builder.build();
+ }
+
+ /**
+ * Returns an immutable multimap containing the given entries, in order.
+ */
+ public static <K, V> ImmutableListMultimap<K, V> of(
+ K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
+ ImmutableListMultimap.Builder<K, V> builder
+ = ImmutableListMultimap.builder();
+ builder.put(k1, v1);
+ builder.put(k2, v2);
+ builder.put(k3, v3);
+ builder.put(k4, v4);
+ builder.put(k5, v5);
+ return builder.build();
+ }
+
+ // looking for of() with > 5 entries? Use the builder instead.
+
+ /**
+ * Returns a new builder. The generated builder is equivalent to the builder
+ * created by the {@link Builder} constructor.
+ */
+ public static <K, V> Builder<K, V> builder() {
+ return new Builder<K, V>();
+ }
+
+ /**
+ * A builder for creating immutable {@code ListMultimap} instances, especially
+ * {@code public static final} multimaps ("constant multimaps"). Example:
+ * <pre> {@code
+ *
+ * static final Multimap<String, Integer> STRING_TO_INTEGER_MULTIMAP =
+ * new ImmutableListMultimap.Builder<String, Integer>()
+ * .put("one", 1)
+ * .putAll("several", 1, 2, 3)
+ * .putAll("many", 1, 2, 3, 4, 5)
+ * .build();}</pre>
+ *
+ * <p>Builder instances can be reused - it is safe to call {@link #build}
+ * multiple times to build multiple multimaps in series. Each multimap
+ * contains the key-value mappings in the previously created multimaps.
+ */
+ public static final class Builder<K, V>
+ extends ImmutableMultimap.Builder<K, V> {
+ /**
+ * Creates a new builder. The returned builder is equivalent to the builder
+ * generated by {@link ImmutableListMultimap#builder}.
+ */
+ public Builder() {}
+
+ /**
+ * Adds a key-value mapping to the built multimap.
+ */
+ @Override public Builder<K, V> put(K key, V value) {
+ super.put(key, value);
+ return this;
+ }
+
+ /**
+ * Stores a collection of values with the same key in the built multimap.
+ *
+ * @throws NullPointerException if {@code key}, {@code values}, or any
+ * element in {@code values} is null. The builder is left in an invalid
+ * state.
+ */
+ @Override public Builder<K, V> putAll(K key, Iterable<? extends V> values) {
+ super.putAll(key, values);
+ return this;
+ }
+
+ /**
+ * Stores an array of values with the same key in the built multimap.
+ *
+ * @throws NullPointerException if the key or any value is null. The builder
+ * is left in an invalid state.
+ */
+ @Override public Builder<K, V> putAll(K key, V... values) {
+ super.putAll(key, values);
+ return this;
+ }
+
+ /**
+ * Stores another multimap's entries in the built multimap. The generated
+ * multimap's key and value orderings correspond to the iteration ordering
+ * of the {@code multimap.asMap()} view, with new keys and values following
+ * any existing keys and values.
+ *
+ * @throws NullPointerException if any key or value in {@code multimap} is
+ * null. The builder is left in an invalid state.
+ */
+ @Override public Builder<K, V> putAll(
+ Multimap<? extends K, ? extends V> multimap) {
+ super.putAll(multimap);
+ return this;
+ }
+
+ /**
+ * Returns a newly-created immutable multimap.
+ */
+ @Override public ImmutableListMultimap<K, V> build() {
+ return (ImmutableListMultimap<K, V>) super.build();
+ }
+ }
+
+ /**
+ * Returns an immutable multimap containing the same mappings as
+ * {@code multimap}. The generated multimap's key and value orderings
+ * correspond to the iteration ordering of the {@code multimap.asMap()} view.
+ *
+ * <p><b>Note:</b> Despite what the method name suggests, if
+ * {@code multimap} is an {@code ImmutableListMultimap}, no copy will actually
+ * be performed, and the given multimap itself will be returned.
+ *
+ * @throws NullPointerException if any key or value in {@code multimap} is
+ * null
+ */
+ public static <K, V> ImmutableListMultimap<K, V> copyOf(
+ Multimap<? extends K, ? extends V> multimap) {
+ if (multimap.isEmpty()) {
+ return of();
+ }
+
+ if (multimap instanceof ImmutableListMultimap) {
+ @SuppressWarnings("unchecked") // safe since multimap is not writable
+ ImmutableListMultimap<K, V> kvMultimap
+ = (ImmutableListMultimap<K, V>) multimap;
+ return kvMultimap;
+ }
+
+ ImmutableMap.Builder<K, ImmutableList<V>> builder = ImmutableMap.builder();
+ int size = 0;
+
+ for (Map.Entry<? extends K, ? extends Collection<? extends V>> entry
+ : multimap.asMap().entrySet()) {
+ ImmutableList<V> list = ImmutableList.copyOf(entry.getValue());
+ if (!list.isEmpty()) {
+ builder.put(entry.getKey(), list);
+ size += list.size();
+ }
+ }
+
+ return new ImmutableListMultimap<K, V>(builder.build(), size);
+ }
+
+ ImmutableListMultimap(ImmutableMap<K, ImmutableList<V>> map, int size) {
+ super(map, size);
+ }
+
+ // views
+
+ /**
+ * Returns an immutable list of the values for the given key. If no mappings
+ * in the multimap have the provided key, an empty immutable list is
+ * returned. The values are in the same order as the parameters used to build
+ * this multimap.
+ */
+ @Override public ImmutableList<V> get(@Nullable K key) {
+ // This cast is safe as its type is known in constructor.
+ ImmutableList<V> list = (ImmutableList<V>) map.get(key);
+ return (list == null) ? ImmutableList.<V>of() : list;
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the multimap unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ @Override public ImmutableList<V> removeAll(Object key) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the multimap unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ @Override public ImmutableList<V> replaceValues(
+ K key, Iterable<? extends V> values) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @serialData number of distinct keys, and then for each distinct key: the
+ * key, the number of values for that key, and the key's values
+ */
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ stream.defaultWriteObject();
+ Serialization.writeMultimap(this, stream);
+ }
+
+ private void readObject(ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+ int keyCount = stream.readInt();
+ if (keyCount < 0) {
+ throw new InvalidObjectException("Invalid key count " + keyCount);
+ }
+ ImmutableMap.Builder<Object, ImmutableList<Object>> builder
+ = ImmutableMap.builder();
+ int tmpSize = 0;
+
+ for (int i = 0; i < keyCount; i++) {
+ Object key = stream.readObject();
+ int valueCount = stream.readInt();
+ if (valueCount <= 0) {
+ throw new InvalidObjectException("Invalid value count " + valueCount);
+ }
+
+ Object[] array = new Object[valueCount];
+ for (int j = 0; j < valueCount; j++) {
+ array[j] = stream.readObject();
+ }
+ builder.put(key, ImmutableList.of(array));
+ tmpSize += valueCount;
+ }
+
+ ImmutableMap<Object, ImmutableList<Object>> tmpMap;
+ try {
+ tmpMap = builder.build();
+ } catch (IllegalArgumentException e) {
+ throw (InvalidObjectException)
+ new InvalidObjectException(e.getMessage()).initCause(e);
+ }
+
+ FieldSettersHolder.MAP_FIELD_SETTER.set(this, tmpMap);
+ FieldSettersHolder.SIZE_FIELD_SETTER.set(this, tmpSize);
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/ImmutableMap.java b/src/com/google/common/collect/ImmutableMap.java
new file mode 100644
index 0000000..65a0022
--- /dev/null
+++ b/src/com/google/common/collect/ImmutableMap.java
@@ -0,0 +1,380 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Iterables.getOnlyElement;
+
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * An immutable, hash-based {@link Map} with reliable user-specified iteration
+ * order. Does not permit null keys or values.
+ *
+ * <p>Unlike {@link Collections#unmodifiableMap}, which is a <i>view</i> of a
+ * separate map which can still change, an instance of {@code ImmutableMap}
+ * contains its own data and will <i>never</i> change. {@code ImmutableMap} is
+ * convenient for {@code public static final} maps ("constant maps") and also
+ * lets you easily make a "defensive copy" of a map provided to your class by a
+ * caller.
+ *
+ * <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
+ * it has no public or protected constructors. Thus, instances of this class are
+ * guaranteed to be immutable.
+ *
+ * @see ImmutableList
+ * @see ImmutableSet
+ * @author Jesse Wilson
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(serializable = true)
+@SuppressWarnings("serial") // we're overriding default serialization
+public abstract class ImmutableMap<K, V> implements Map<K, V>, Serializable {
+ /**
+ * Returns the empty map. This map behaves and performs comparably to
+ * {@link Collections#emptyMap}, and is preferable mainly for consistency
+ * and maintainability of your code.
+ */
+ // Casting to any type is safe because the set will never hold any elements.
+ @SuppressWarnings("unchecked")
+ public static <K, V> ImmutableMap<K, V> of() {
+ return (ImmutableMap<K, V>) EmptyImmutableMap.INSTANCE;
+ }
+
+ /**
+ * Returns an immutable map containing a single entry. This map behaves and
+ * performs comparably to {@link Collections#singletonMap} but will not accept
+ * a null key or value. It is preferable mainly for consistency and
+ * maintainability of your code.
+ */
+ public static <K, V> ImmutableMap<K, V> of(K k1, V v1) {
+ return new SingletonImmutableMap<K, V>(
+ checkNotNull(k1), checkNotNull(v1));
+ }
+
+ /**
+ * Returns an immutable map containing the given entries, in order.
+ *
+ * @throws IllegalArgumentException if duplicate keys are provided
+ */
+ public static <K, V> ImmutableMap<K, V> of(K k1, V v1, K k2, V v2) {
+ return new RegularImmutableMap<K, V>(entryOf(k1, v1), entryOf(k2, v2));
+ }
+
+ /**
+ * Returns an immutable map containing the given entries, in order.
+ *
+ * @throws IllegalArgumentException if duplicate keys are provided
+ */
+ public static <K, V> ImmutableMap<K, V> of(
+ K k1, V v1, K k2, V v2, K k3, V v3) {
+ return new RegularImmutableMap<K, V>(
+ entryOf(k1, v1), entryOf(k2, v2), entryOf(k3, v3));
+ }
+
+ /**
+ * Returns an immutable map containing the given entries, in order.
+ *
+ * @throws IllegalArgumentException if duplicate keys are provided
+ */
+ public static <K, V> ImmutableMap<K, V> of(
+ K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
+ return new RegularImmutableMap<K, V>(
+ entryOf(k1, v1), entryOf(k2, v2), entryOf(k3, v3), entryOf(k4, v4));
+ }
+
+ /**
+ * Returns an immutable map containing the given entries, in order.
+ *
+ * @throws IllegalArgumentException if duplicate keys are provided
+ */
+ public static <K, V> ImmutableMap<K, V> of(
+ K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
+ return new RegularImmutableMap<K, V>(entryOf(k1, v1),
+ entryOf(k2, v2), entryOf(k3, v3), entryOf(k4, v4), entryOf(k5, v5));
+ }
+
+ // looking for of() with > 5 entries? Use the builder instead.
+
+ /**
+ * Returns a new builder. The generated builder is equivalent to the builder
+ * created by the {@link Builder} constructor.
+ */
+ public static <K, V> Builder<K, V> builder() {
+ return new Builder<K, V>();
+ }
+
+ /**
+ * Verifies that {@code key} and {@code value} are non-null, and returns a new
+ * immutable entry with those values.
+ *
+ * <p>A call to {@link Map.Entry#setValue} on the returned entry will always
+ * throw {@link UnsupportedOperationException}.
+ */
+ static <K, V> Entry<K, V> entryOf(K key, V value) {
+ return Maps.immutableEntry(checkNotNull(key), checkNotNull(value));
+ }
+
+ /**
+ * A builder for creating immutable map instances, especially {@code public
+ * static final} maps ("constant maps"). Example: <pre> {@code
+ *
+ * static final ImmutableMap<String, Integer> WORD_TO_INT =
+ * new ImmutableMap.Builder<String, Integer>()
+ * .put("one", 1)
+ * .put("two", 2)
+ * .put("three", 3)
+ * .build();}</pre>
+ *
+ * For <i>small</i> immutable maps, the {@code ImmutableMap.of()} methods are
+ * even more convenient.
+ *
+ * <p>Builder instances can be reused - it is safe to call {@link #build}
+ * multiple times to build multiple maps in series. Each map is a superset of
+ * the maps created before it.
+ */
+ public static class Builder<K, V> {
+ final List<Entry<K, V>> entries = Lists.newArrayList();
+
+ /**
+ * Creates a new builder. The returned builder is equivalent to the builder
+ * generated by {@link ImmutableMap#builder}.
+ */
+ public Builder() {}
+
+ /**
+ * Associates {@code key} with {@code value} in the built map. Duplicate
+ * keys are not allowed, and will cause {@link #build} to fail.
+ */
+ public Builder<K, V> put(K key, V value) {
+ entries.add(entryOf(key, value));
+ return this;
+ }
+
+ /**
+ * Associates all of the given map's keys and values in the built map.
+ * Duplicate keys are not allowed, and will cause {@link #build} to fail.
+ *
+ * @throws NullPointerException if any key or value in {@code map} is null
+ */
+ public Builder<K, V> putAll(Map<? extends K, ? extends V> map) {
+ for (Entry<? extends K, ? extends V> entry : map.entrySet()) {
+ put(entry.getKey(), entry.getValue());
+ }
+ return this;
+ }
+
+ // TODO: Should build() and the ImmutableBiMap & ImmutableSortedMap versions
+ // throw an IllegalStateException instead?
+
+ /**
+ * Returns a newly-created immutable map.
+ *
+ * @throws IllegalArgumentException if duplicate keys were added
+ */
+ public ImmutableMap<K, V> build() {
+ return fromEntryList(entries);
+ }
+
+ private static <K, V> ImmutableMap<K, V> fromEntryList(
+ List<Entry<K, V>> entries) {
+ int size = entries.size();
+ switch (size) {
+ case 0:
+ return of();
+ case 1:
+ return new SingletonImmutableMap<K, V>(getOnlyElement(entries));
+ default:
+ Entry<?, ?>[] entryArray
+ = entries.toArray(new Entry<?, ?>[entries.size()]);
+ return new RegularImmutableMap<K, V>(entryArray);
+ }
+ }
+ }
+
+ /**
+ * Returns an immutable map containing the same entries as {@code map}. If
+ * {@code map} somehow contains entries with duplicate keys (for example, if
+ * it is a {@code SortedMap} whose comparator is not <i>consistent with
+ * equals</i>), the results of this method are undefined.
+ *
+ * <p><b>Note:</b> Despite what the method name suggests, if {@code map} is an
+ * {@code ImmutableMap}, no copy will actually be performed, and the given map
+ * itself will be returned.
+ *
+ * @throws NullPointerException if any key or value in {@code map} is null
+ */
+ public static <K, V> ImmutableMap<K, V> copyOf(
+ Map<? extends K, ? extends V> map) {
+ if ((map instanceof ImmutableMap) && !(map instanceof ImmutableSortedMap)) {
+ @SuppressWarnings("unchecked") // safe since map is not writable
+ ImmutableMap<K, V> kvMap = (ImmutableMap<K, V>) map;
+ return kvMap;
+ }
+
+ @SuppressWarnings("unchecked") // we won't write to this array
+ Entry<K, V>[] entries = map.entrySet().toArray(new Entry[0]);
+ switch (entries.length) {
+ case 0:
+ return of();
+ case 1:
+ return new SingletonImmutableMap<K, V>(entryOf(
+ entries[0].getKey(), entries[0].getValue()));
+ default:
+ for (int i = 0; i < entries.length; i++) {
+ K k = entries[i].getKey();
+ V v = entries[i].getValue();
+ entries[i] = entryOf(k, v);
+ }
+ return new RegularImmutableMap<K, V>(entries);
+ }
+ }
+
+ ImmutableMap() {}
+
+ /**
+ * Guaranteed to throw an exception and leave the map unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public final V put(K k, V v) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the map unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public final V remove(Object o) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the map unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public final void putAll(Map<? extends K, ? extends V> map) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the map unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public final void clear() {
+ throw new UnsupportedOperationException();
+ }
+
+ public boolean isEmpty() {
+ return size() == 0;
+ }
+
+ public boolean containsKey(@Nullable Object key) {
+ return get(key) != null;
+ }
+
+ // Overriding to mark it Nullable
+ public abstract boolean containsValue(@Nullable Object value);
+
+ // Overriding to mark it Nullable
+ public abstract V get(@Nullable Object key);
+
+ /**
+ * Returns an immutable set of the mappings in this map. The entries are in
+ * the same order as the parameters used to build this map.
+ */
+ public abstract ImmutableSet<Entry<K, V>> entrySet();
+
+ /**
+ * Returns an immutable set of the keys in this map. These keys are in
+ * the same order as the parameters used to build this map.
+ */
+ public abstract ImmutableSet<K> keySet();
+
+ /**
+ * Returns an immutable collection of the values in this map. The values are
+ * in the same order as the parameters used to build this map.
+ */
+ public abstract ImmutableCollection<V> values();
+
+ @Override public boolean equals(@Nullable Object object) {
+ if (object == this) {
+ return true;
+ }
+ if (object instanceof Map) {
+ Map<?, ?> that = (Map<?, ?>) object;
+ return this.entrySet().equals(that.entrySet());
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ // not caching hash code since it could change if map values are mutable
+ // in a way that modifies their hash codes
+ return entrySet().hashCode();
+ }
+
+ @Override public String toString() {
+ StringBuilder result = new StringBuilder(size() * 16).append('{');
+ Maps.standardJoiner.appendTo(result, this);
+ return result.append('}').toString();
+ }
+
+ /**
+ * Serialized type for all ImmutableMap instances. It captures the logical
+ * contents and they are reconstructed using public factory methods. This
+ * ensures that the implementation types remain as implementation details.
+ */
+ static class SerializedForm implements Serializable {
+ private final Object[] keys;
+ private final Object[] values;
+ SerializedForm(ImmutableMap<?, ?> map) {
+ keys = new Object[map.size()];
+ values = new Object[map.size()];
+ int i = 0;
+ for (Entry<?, ?> entry : map.entrySet()) {
+ keys[i] = entry.getKey();
+ values[i] = entry.getValue();
+ i++;
+ }
+ }
+ Object readResolve() {
+ Builder<Object, Object> builder = new Builder<Object, Object>();
+ return createMap(builder);
+ }
+ Object createMap(Builder<Object, Object> builder) {
+ for (int i = 0; i < keys.length; i++) {
+ builder.put(keys[i], values[i]);
+ }
+ return builder.build();
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ Object writeReplace() {
+ return new SerializedForm(this);
+ }
+}
diff --git a/src/com/google/common/collect/ImmutableMultimap.java b/src/com/google/common/collect/ImmutableMultimap.java
new file mode 100644
index 0000000..7368beb
--- /dev/null
+++ b/src/com/google/common/collect/ImmutableMultimap.java
@@ -0,0 +1,513 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * An immutable {@link Multimap}. Does not permit null keys or values.
+ *
+ * <p>Unlike {@link Multimaps#unmodifiableMultimap(Multimap)}, which is
+ * a <i>view</i> of a separate multimap which can still change, an instance of
+ * {@code ImmutableMultimap} contains its own data and will <i>never</i>
+ * change. {@code ImmutableMultimap} is convenient for
+ * {@code public static final} multimaps ("constant multimaps") and also lets
+ * you easily make a "defensive copy" of a multimap provided to your class by
+ * a caller.
+ *
+ * <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
+ * it has no public or protected constructors. Thus, instances of this class
+ * are guaranteed to be immutable.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+public abstract class ImmutableMultimap<K, V>
+ implements Multimap<K, V>, Serializable {
+
+ /** Returns an empty multimap. */
+ public static <K, V> ImmutableMultimap<K, V> of() {
+ return ImmutableListMultimap.of();
+ }
+
+ /**
+ * Returns an immutable multimap containing a single entry.
+ */
+ public static <K, V> ImmutableMultimap<K, V> of(K k1, V v1) {
+ return ImmutableListMultimap.of(k1, v1);
+ }
+
+ /**
+ * Returns an immutable multimap containing the given entries, in order.
+ */
+ public static <K, V> ImmutableMultimap<K, V> of(K k1, V v1, K k2, V v2) {
+ return ImmutableListMultimap.of(k1, v1, k2, v2);
+ }
+
+ /**
+ * Returns an immutable multimap containing the given entries, in order.
+ */
+ public static <K, V> ImmutableMultimap<K, V> of(
+ K k1, V v1, K k2, V v2, K k3, V v3) {
+ return ImmutableListMultimap.of(k1, v1, k2, v2, k3, v3);
+ }
+
+ /**
+ * Returns an immutable multimap containing the given entries, in order.
+ */
+ public static <K, V> ImmutableMultimap<K, V> of(
+ K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
+ return ImmutableListMultimap.of(k1, v1, k2, v2, k3, v3, k4, v4);
+ }
+
+ /**
+ * Returns an immutable multimap containing the given entries, in order.
+ */
+ public static <K, V> ImmutableMultimap<K, V> of(
+ K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
+ return ImmutableListMultimap.of(k1, v1, k2, v2, k3, v3, k4, v4, k5, v5);
+ }
+
+ // looking for of() with > 5 entries? Use the builder instead.
+
+ /**
+ * Returns a new builder. The generated builder is equivalent to the builder
+ * created by the {@link Builder} constructor.
+ */
+ public static <K, V> Builder<K, V> builder() {
+ return new Builder<K, V>();
+ }
+
+ /**
+ * Multimap for {@link ImmutableMultimap.Builder} that maintains key and
+ * value orderings, allows duplicate values, and performs better than
+ * {@link LinkedListMultimap}.
+ */
+ private static class BuilderMultimap<K, V> extends AbstractMultimap<K, V> {
+ BuilderMultimap() {
+ super(new LinkedHashMap<K, Collection<V>>());
+ }
+ @Override Collection<V> createCollection() {
+ return Lists.newArrayList();
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * A builder for creating immutable multimap instances, especially
+ * {@code public static final} multimaps ("constant multimaps"). Example:
+ * <pre> {@code
+ *
+ * static final Multimap<String, Integer> STRING_TO_INTEGER_MULTIMAP =
+ * new ImmutableMultimap.Builder<String, Integer>()
+ * .put("one", 1)
+ * .putAll("several", 1, 2, 3)
+ * .putAll("many", 1, 2, 3, 4, 5)
+ * .build();}</pre>
+ *
+ * <p>Builder instances can be reused - it is safe to call {@link #build}
+ * multiple times to build multiple multimaps in series. Each multimap
+ * contains the key-value mappings in the previously created multimaps.
+ */
+ public static class Builder<K, V> {
+ private final Multimap<K, V> builderMultimap = new BuilderMultimap<K, V>();
+
+ /**
+ * Creates a new builder. The returned builder is equivalent to the builder
+ * generated by {@link ImmutableMultimap#builder}.
+ */
+ public Builder() {}
+
+ /**
+ * Adds a key-value mapping to the built multimap.
+ */
+ public Builder<K, V> put(K key, V value) {
+ builderMultimap.put(checkNotNull(key), checkNotNull(value));
+ return this;
+ }
+
+ /**
+ * Stores a collection of values with the same key in the built multimap.
+ *
+ * @throws NullPointerException if {@code key}, {@code values}, or any
+ * element in {@code values} is null. The builder is left in an invalid
+ * state.
+ */
+ public Builder<K, V> putAll(K key, Iterable<? extends V> values) {
+ Collection<V> valueList = builderMultimap.get(checkNotNull(key));
+ for (V value : values) {
+ valueList.add(checkNotNull(value));
+ }
+ return this;
+ }
+
+ /**
+ * Stores an array of values with the same key in the built multimap.
+ *
+ * @throws NullPointerException if the key or any value is null. The builder
+ * is left in an invalid state.
+ */
+ public Builder<K, V> putAll(K key, V... values) {
+ return putAll(key, Arrays.asList(values));
+ }
+
+ /**
+ * Stores another multimap's entries in the built multimap. The generated
+ * multimap's key and value orderings correspond to the iteration ordering
+ * of the {@code multimap.asMap()} view, with new keys and values following
+ * any existing keys and values.
+ *
+ * @throws NullPointerException if any key or value in {@code multimap} is
+ * null. The builder is left in an invalid state.
+ */
+ public Builder<K, V> putAll(Multimap<? extends K, ? extends V> multimap) {
+ for (Map.Entry<? extends K, ? extends Collection<? extends V>> entry
+ : multimap.asMap().entrySet()) {
+ putAll(entry.getKey(), entry.getValue());
+ }
+ return this;
+ }
+
+ /**
+ * Returns a newly-created immutable multimap.
+ */
+ public ImmutableMultimap<K, V> build() {
+ return copyOf(builderMultimap);
+ }
+ }
+
+ /**
+ * Returns an immutable multimap containing the same mappings as
+ * {@code multimap}. The generated multimap's key and value orderings
+ * correspond to the iteration ordering of the {@code multimap.asMap()} view.
+ *
+ * <p><b>Note:</b> Despite what the method name suggests, if
+ * {@code multimap} is an {@code ImmutableMultimap}, no copy will actually be
+ * performed, and the given multimap itself will be returned.
+ *
+ * @throws NullPointerException if any key or value in {@code multimap} is
+ * null
+ */
+ public static <K, V> ImmutableMultimap<K, V> copyOf(
+ Multimap<? extends K, ? extends V> multimap) {
+ if (multimap instanceof ImmutableMultimap) {
+ @SuppressWarnings("unchecked") // safe since multimap is not writable
+ ImmutableMultimap<K, V> kvMultimap
+ = (ImmutableMultimap<K, V>) multimap;
+ return kvMultimap;
+ } else {
+ return ImmutableListMultimap.copyOf(multimap);
+ }
+ }
+
+ final transient ImmutableMap<K, ? extends ImmutableCollection<V>> map;
+ final transient int size;
+
+ // These constants allow the deserialization code to set final fields. This
+ // holder class makes sure they are not initialized unless an instance is
+ // deserialized.
+ static class FieldSettersHolder {
+ // Eclipse doesn't like the raw ImmutableMultimap
+ @SuppressWarnings("unchecked")
+ static final Serialization.FieldSetter<ImmutableMultimap>
+ MAP_FIELD_SETTER = Serialization.getFieldSetter(
+ ImmutableMultimap.class, "map");
+ // Eclipse doesn't like the raw ImmutableMultimap
+ @SuppressWarnings("unchecked")
+ static final Serialization.FieldSetter<ImmutableMultimap>
+ SIZE_FIELD_SETTER = Serialization.getFieldSetter(
+ ImmutableMultimap.class, "size");
+ }
+
+ ImmutableMultimap(ImmutableMap<K, ? extends ImmutableCollection<V>> map,
+ int size) {
+ this.map = map;
+ this.size = size;
+ }
+
+ // mutators (not supported)
+
+ /**
+ * Guaranteed to throw an exception and leave the multimap unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public ImmutableCollection<V> removeAll(Object key) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the multimap unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public ImmutableCollection<V> replaceValues(K key,
+ Iterable<? extends V> values) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the multimap unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public void clear() {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Returns an immutable collection of the values for the given key. If no
+ * mappings in the multimap have the provided key, an empty immutable
+ * collection is returned. The values are in the same order as the parameters
+ * used to build this multimap.
+ */
+ public abstract ImmutableCollection<V> get(K key);
+
+ /**
+ * Guaranteed to throw an exception and leave the multimap unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public boolean put(K key, V value) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the multimap unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public boolean putAll(K key, Iterable<? extends V> values) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the multimap unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the multimap unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public boolean remove(Object key, Object value) {
+ throw new UnsupportedOperationException();
+ }
+
+ // accessors
+
+ public boolean containsEntry(@Nullable Object key, @Nullable Object value) {
+ Collection<V> values = map.get(key);
+ return values != null && values.contains(value);
+ }
+
+ public boolean containsKey(@Nullable Object key) {
+ return map.containsKey(key);
+ }
+
+ public boolean containsValue(@Nullable Object value) {
+ for (Collection<V> valueCollection : map.values()) {
+ if (valueCollection.contains(value)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean isEmpty() {
+ return size == 0;
+ }
+
+ public int size() {
+ return size;
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ if (object instanceof Multimap) {
+ Multimap<?, ?> that = (Multimap<?, ?>) object;
+ return this.map.equals(that.asMap());
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ return map.hashCode();
+ }
+
+ @Override public String toString() {
+ return map.toString();
+ }
+
+ // views
+
+ /**
+ * Returns an immutable set of the distinct keys in this multimap. These keys
+ * are ordered according to when they first appeared during the construction
+ * of this multimap.
+ */
+ public ImmutableSet<K> keySet() {
+ return map.keySet();
+ }
+
+ /**
+ * Returns an immutable map that associates each key with its corresponding
+ * values in the multimap.
+ */
+ @SuppressWarnings("unchecked") // a widening cast
+ public ImmutableMap<K, Collection<V>> asMap() {
+ return (ImmutableMap) map;
+ }
+
+ private transient ImmutableCollection<Map.Entry<K, V>> entries;
+
+ /**
+ * Returns an immutable collection of all key-value pairs in the multimap. Its
+ * iterator traverses the values for the first key, the values for the second
+ * key, and so on.
+ */
+ public ImmutableCollection<Map.Entry<K, V>> entries() {
+ ImmutableCollection<Map.Entry<K, V>> result = entries;
+ return (result == null)
+ ? (entries = new EntryCollection<K, V>(this)) : result;
+ }
+
+ private static class EntryCollection<K, V>
+ extends ImmutableCollection<Map.Entry<K, V>> {
+ final ImmutableMultimap<K, V> multimap;
+
+ EntryCollection(ImmutableMultimap<K, V> multimap) {
+ this.multimap = multimap;
+ }
+
+ @Override public UnmodifiableIterator<Map.Entry<K, V>> iterator() {
+ final Iterator<? extends Map.Entry<K, ? extends ImmutableCollection<V>>>
+ mapIterator = this.multimap.map.entrySet().iterator();
+
+ return new UnmodifiableIterator<Map.Entry<K, V>>() {
+ K key;
+ Iterator<V> valueIterator;
+
+ public boolean hasNext() {
+ return (key != null && valueIterator.hasNext())
+ || mapIterator.hasNext();
+ }
+
+ public Map.Entry<K, V> next() {
+ if (key == null || !valueIterator.hasNext()) {
+ Map.Entry<K, ? extends ImmutableCollection<V>> entry
+ = mapIterator.next();
+ key = entry.getKey();
+ valueIterator = entry.getValue().iterator();
+ }
+ return Maps.immutableEntry(key, valueIterator.next());
+ }
+ };
+ }
+
+ public int size() {
+ return multimap.size();
+ }
+
+ @Override public boolean contains(Object object) {
+ if (object instanceof Map.Entry) {
+ Map.Entry<?, ?> entry = (Map.Entry<?, ?>) object;
+ return multimap.containsEntry(entry.getKey(), entry.getValue());
+ }
+ return false;
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ private transient ImmutableMultiset<K> keys;
+
+ /**
+ * Returns a collection, which may contain duplicates, of all keys. The number
+ * of times a key appears in the returned multiset equals the number of
+ * mappings the key has in the multimap. Duplicate keys appear consecutively
+ * in the multiset's iteration order.
+ */
+ public ImmutableMultiset<K> keys() {
+ ImmutableMultiset<K> result = keys;
+ return (result == null) ? (keys = createKeys()) : result;
+ }
+
+ private ImmutableMultiset<K> createKeys() {
+ ImmutableMultiset.Builder<K> builder = ImmutableMultiset.builder();
+ for (Map.Entry<K, ? extends ImmutableCollection<V>> entry
+ : map.entrySet()) {
+ builder.addCopies(entry.getKey(), entry.getValue().size());
+ }
+ return builder.build();
+ }
+
+ private transient ImmutableCollection<V> values;
+
+ /**
+ * Returns an immutable collection of the values in this multimap. Its
+ * iterator traverses the values for the first key, the values for the second
+ * key, and so on.
+ */
+ public ImmutableCollection<V> values() {
+ ImmutableCollection<V> result = values;
+ return (result == null) ? (values = new Values<V>(this)) : result;
+ }
+
+ private static class Values<V> extends ImmutableCollection<V> {
+ final Multimap<?, V> multimap;
+
+ Values(Multimap<?, V> multimap) {
+ this.multimap = multimap;
+ }
+
+ @Override public UnmodifiableIterator<V> iterator() {
+ final Iterator<? extends Map.Entry<?, V>> entryIterator
+ = multimap.entries().iterator();
+ return new UnmodifiableIterator<V>() {
+ public boolean hasNext() {
+ return entryIterator.hasNext();
+ }
+ public V next() {
+ return entryIterator.next().getValue();
+ }
+ };
+ }
+
+ public int size() {
+ return multimap.size();
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/ImmutableMultiset.java b/src/com/google/common/collect/ImmutableMultiset.java
new file mode 100644
index 0000000..cd78905
--- /dev/null
+++ b/src/com/google/common/collect/ImmutableMultiset.java
@@ -0,0 +1,502 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.collect.Serialization.FieldSetter;
+
+import java.io.IOException;
+import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * An immutable hash-based multiset. Does not permit null elements.
+ *
+ * <p>Its iterator orders elements according to the first appearance of the
+ * element among the items passed to the factory method or builder. When the
+ * multiset contains multiple instances of an element, those instances are
+ * consecutive in the iteration order.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(serializable = true)
+public class ImmutableMultiset<E> extends ImmutableCollection<E>
+ implements Multiset<E> {
+
+ /**
+ * Returns the empty immutable multiset.
+ */
+ @SuppressWarnings("unchecked") // all supported methods are covariant
+ public static <E> ImmutableMultiset<E> of() {
+ return (ImmutableMultiset<E>) EmptyImmutableMultiset.INSTANCE;
+ }
+
+ /**
+ * Returns an immutable multiset containing the given elements.
+ *
+ * <p>The multiset is ordered by the first occurrence of each element. For
+ * example, {@code ImmutableMultiset.of(2, 3, 1, 3)} yields a multiset with
+ * elements in the order {@code 2, 3, 3, 1}.
+ *
+ * @throws NullPointerException if any of {@code elements} is null
+ */
+ public static <E> ImmutableMultiset<E> of(E... elements) {
+ return copyOf(Arrays.asList(elements));
+ }
+
+ /**
+ * Returns an immutable multiset containing the given elements.
+ *
+ * <p>The multiset is ordered by the first occurrence of each element. For
+ * example, {@code ImmutableMultiset.copyOf(Arrays.asList(2, 3, 1, 3))} yields
+ * a multiset with elements in the order {@code 2, 3, 3, 1}.
+ *
+ * <p>Note that if {@code c} is a {@code Collection<String>}, then {@code
+ * ImmutableMultiset.copyOf(c)} returns an {@code ImmutableMultiset<String>}
+ * containing each of the strings in {@code c}, while
+ * {@code ImmutableMultiset.of(c)} returns an
+ * {@code ImmutableMultiset<Collection<String>>} containing one element (the
+ * given collection itself).
+ *
+ * <p><b>Note:</b> Despite what the method name suggests, if {@code elements}
+ * is an {@code ImmutableMultiset}, no copy will actually be performed, and
+ * the given multiset itself will be returned.
+ *
+ * @throws NullPointerException if any of {@code elements} is null
+ */
+ public static <E> ImmutableMultiset<E> copyOf(
+ Iterable<? extends E> elements) {
+ if (elements instanceof ImmutableMultiset) {
+ @SuppressWarnings("unchecked") // all supported methods are covariant
+ ImmutableMultiset<E> result = (ImmutableMultiset<E>) elements;
+ return result;
+ }
+
+ @SuppressWarnings("unchecked") // the cast causes a warning
+ Multiset<? extends E> multiset = (elements instanceof Multiset)
+ ? (Multiset<? extends E>) elements
+ : LinkedHashMultiset.create(elements);
+
+ return copyOfInternal(multiset);
+ }
+
+ private static <E> ImmutableMultiset<E> copyOfInternal(
+ Multiset<? extends E> multiset) {
+ long size = 0;
+ ImmutableMap.Builder<E, Integer> builder = ImmutableMap.builder();
+
+ for (Entry<? extends E> entry : multiset.entrySet()) {
+ int count = entry.getCount();
+ if (count > 0) {
+ // Since ImmutableMap.Builder throws an NPE if an element is null, no
+ // other null checks are needed.
+ builder.put(entry.getElement(), count);
+ size += count;
+ }
+ }
+
+ if (size == 0) {
+ return of();
+ }
+ return new ImmutableMultiset<E>(
+ builder.build(), (int) Math.min(size, Integer.MAX_VALUE));
+ }
+
+ /**
+ * Returns an immutable multiset containing the given elements.
+ *
+ * <p>The multiset is ordered by the first occurrence of each element. For
+ * example,
+ * {@code ImmutableMultiset.copyOf(Arrays.asList(2, 3, 1, 3).iterator())}
+ * yields a multiset with elements in the order {@code 2, 3, 3, 1}.
+ *
+ * @throws NullPointerException if any of {@code elements} is null
+ */
+ public static <E> ImmutableMultiset<E> copyOf(
+ Iterator<? extends E> elements) {
+ Multiset<E> multiset = LinkedHashMultiset.create();
+ Iterators.addAll(multiset, elements);
+ return copyOfInternal(multiset);
+ }
+
+ private final transient ImmutableMap<E, Integer> map;
+ private final transient int size;
+
+ // These constants allow the deserialization code to set final fields. This
+ // holder class makes sure they are not initialized unless an instance is
+ // deserialized.
+ @SuppressWarnings("unchecked")
+ // eclipse doesn't like the raw types here, but they're harmless
+ private static class FieldSettersHolder {
+ static final FieldSetter<ImmutableMultiset> MAP_FIELD_SETTER
+ = Serialization.getFieldSetter(ImmutableMultiset.class, "map");
+ static final FieldSetter<ImmutableMultiset> SIZE_FIELD_SETTER
+ = Serialization.getFieldSetter(ImmutableMultiset.class, "size");
+ }
+
+ ImmutableMultiset(ImmutableMap<E, Integer> map, int size) {
+ this.map = map;
+ this.size = size;
+ }
+
+ public int count(@Nullable Object element) {
+ Integer value = map.get(element);
+ return (value == null) ? 0 : value;
+ }
+
+ @Override public UnmodifiableIterator<E> iterator() {
+ final Iterator<Map.Entry<E, Integer>> mapIterator
+ = map.entrySet().iterator();
+
+ return new UnmodifiableIterator<E>() {
+ int remaining;
+ E element;
+
+ public boolean hasNext() {
+ return (remaining > 0) || mapIterator.hasNext();
+ }
+
+ public E next() {
+ if (remaining <= 0) {
+ Map.Entry<E, Integer> entry = mapIterator.next();
+ element = entry.getKey();
+ remaining = entry.getValue();
+ }
+ remaining--;
+ return element;
+ }
+ };
+ }
+
+ public int size() {
+ return size;
+ }
+
+ @Override public boolean contains(@Nullable Object element) {
+ return map.containsKey(element);
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the collection unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public int add(E element, int occurrences) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the collection unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public int remove(Object element, int occurrences) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the collection unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public int setCount(E element, int count) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the collection unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public boolean setCount(E element, int oldCount, int newCount) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ if (object == this) {
+ return true;
+ }
+ if (object instanceof Multiset) {
+ Multiset<?> that = (Multiset<?>) object;
+ if (this.size() != that.size()) {
+ return false;
+ }
+ for (Entry<?> entry : that.entrySet()) {
+ if (count(entry.getElement()) != entry.getCount()) {
+ return false;
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ // could cache this, but not considered worthwhile to do so
+ return map.hashCode();
+ }
+
+ @Override public String toString() {
+ return entrySet().toString();
+ }
+
+ // TODO: Serialization of the element set should serialize the multiset, and
+ // deserialization should call multiset.elementSet(). Then
+ // reserialized(multiset).elementSet() == reserialized(multiset.elementSet())
+ // Currently, those object references differ.
+ public Set<E> elementSet() {
+ return map.keySet();
+ }
+
+ private transient ImmutableSet<Entry<E>> entrySet;
+
+ public Set<Entry<E>> entrySet() {
+ ImmutableSet<Entry<E>> es = entrySet;
+ return (es == null) ? (entrySet = new EntrySet<E>(this)) : es;
+ }
+
+ private static class EntrySet<E> extends ImmutableSet<Entry<E>> {
+ final ImmutableMultiset<E> multiset;
+
+ public EntrySet(ImmutableMultiset<E> multiset) {
+ this.multiset = multiset;
+ }
+
+ @Override public UnmodifiableIterator<Entry<E>> iterator() {
+ final Iterator<Map.Entry<E, Integer>> mapIterator
+ = multiset.map.entrySet().iterator();
+ return new UnmodifiableIterator<Entry<E>>() {
+ public boolean hasNext() {
+ return mapIterator.hasNext();
+ }
+ public Entry<E> next() {
+ Map.Entry<E, Integer> mapEntry = mapIterator.next();
+ return
+ Multisets.immutableEntry(mapEntry.getKey(), mapEntry.getValue());
+ }
+ };
+ }
+
+ public int size() {
+ return multiset.map.size();
+ }
+
+ @Override public boolean contains(Object o) {
+ if (o instanceof Entry) {
+ Entry<?> entry = (Entry<?>) o;
+ if (entry.getCount() <= 0) {
+ return false;
+ }
+ int count = multiset.count(entry.getElement());
+ return count == entry.getCount();
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ return multiset.map.hashCode();
+ }
+
+ @Override Object writeReplace() {
+ return this;
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * @serialData the number of distinct elements, the first element, its count,
+ * the second element, its count, and so on
+ */
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ stream.defaultWriteObject();
+ Serialization.writeMultiset(this, stream);
+ }
+
+ private void readObject(ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+ int entryCount = stream.readInt();
+ ImmutableMap.Builder<E, Integer> builder = ImmutableMap.builder();
+ long tmpSize = 0;
+ for (int i = 0; i < entryCount; i++) {
+ @SuppressWarnings("unchecked") // reading data stored by writeMultiset
+ E element = (E) stream.readObject();
+ int count = stream.readInt();
+ if (count <= 0) {
+ throw new InvalidObjectException("Invalid count " + count);
+ }
+ builder.put(element, count);
+ tmpSize += count;
+ }
+
+ FieldSettersHolder.MAP_FIELD_SETTER.set(this, builder.build());
+ FieldSettersHolder.SIZE_FIELD_SETTER.set(
+ this, (int) Math.min(tmpSize, Integer.MAX_VALUE));
+ }
+
+ @Override Object writeReplace() {
+ return this;
+ }
+
+ private static final long serialVersionUID = 0;
+
+ /**
+ * Returns a new builder. The generated builder is equivalent to the builder
+ * created by the {@link Builder} constructor.
+ */
+ public static <E> Builder<E> builder() {
+ return new Builder<E>();
+ }
+
+ /**
+ * A builder for creating immutable multiset instances, especially
+ * {@code public static final} multisets ("constant multisets").
+ *
+ * <p>Example:
+ * <pre> {@code
+ * public static final ImmutableMultiset<Bean> BEANS
+ * = new ImmutableMultiset.Builder<Bean>()
+ * .addCopies(Bean.COCOA, 4)
+ * .addCopies(Bean.GARDEN, 6)
+ * .addCopies(Bean.RED, 8)
+ * .addCopies(Bean.BLACK_EYED, 10)
+ * .build();}</pre>
+ *
+ * <p>Builder instances can be reused - it is safe to call {@link #build}
+ * multiple times to build multiple multisets in series. Each multiset
+ * is a superset of the multiset created before it.
+ */
+ public static final class Builder<E> extends ImmutableCollection.Builder<E> {
+ private final Multiset<E> contents = LinkedHashMultiset.create();
+
+ /**
+ * Creates a new builder. The returned builder is equivalent to the builder
+ * generated by {@link ImmutableMultiset#builder}.
+ */
+ public Builder() {}
+
+ /**
+ * Adds {@code element} to the {@code ImmutableMultiset}.
+ *
+ * @param element the element to add
+ * @return this {@code Builder} object
+ * @throws NullPointerException if {@code element} is null
+ */
+ @Override public Builder<E> add(E element) {
+ contents.add(checkNotNull(element));
+ return this;
+ }
+
+ /**
+ * Adds a number of occurrences of an element to this {@code
+ * ImmutableMultiset}.
+ *
+ * @param element the element to add
+ * @param occurrences the number of occurrences of the element to add. May
+ * be zero, in which case no change will be made.
+ * @return this {@code Builder} object
+ * @throws NullPointerException if {@code element} is null
+ * @throws IllegalArgumentException if {@code occurrences} is negative, or
+ * if this operation would result in more than {@link Integer#MAX_VALUE}
+ * occurrences of the element
+ */
+ public Builder<E> addCopies(E element, int occurrences) {
+ contents.add(checkNotNull(element), occurrences);
+ return this;
+ }
+
+ /**
+ * Adds or removes the necessary occurrences of an element such that the
+ * element attains the desired count.
+ *
+ * @param element the element to add or remove occurrences of
+ * @param count the desired count of the element in this multiset
+ * @return this {@code Builder} object
+ * @throws NullPointerException if {@code element} is null
+ * @throws IllegalArgumentException if {@code count} is negative
+ */
+ public Builder<E> setCount(E element, int count) {
+ contents.setCount(checkNotNull(element), count);
+ return this;
+ }
+
+ /**
+ * Adds each element of {@code elements} to the {@code ImmutableMultiset}.
+ *
+ * @param elements the elements to add
+ * @return this {@code Builder} object
+ * @throws NullPointerException if {@code elements} is null or contains a
+ * null element
+ */
+ @Override public Builder<E> add(E... elements) {
+ super.add(elements);
+ return this;
+ }
+
+ /**
+ * Adds each element of {@code elements} to the {@code ImmutableMultiset}.
+ *
+ * @param elements the {@code Iterable} to add to the {@code
+ * ImmutableMultiset}
+ * @return this {@code Builder} object
+ * @throws NullPointerException if {@code elements} is null or contains a
+ * null element
+ */
+ @Override public Builder<E> addAll(Iterable<? extends E> elements) {
+ if (elements instanceof Multiset) {
+ @SuppressWarnings("unchecked")
+ Multiset<? extends E> multiset = (Multiset<? extends E>) elements;
+ for (Entry<? extends E> entry : multiset.entrySet()) {
+ addCopies(entry.getElement(), entry.getCount());
+ }
+ } else {
+ super.addAll(elements);
+ }
+ return this;
+ }
+
+ /**
+ * Adds each element of {@code elements} to the {@code ImmutableMultiset}.
+ *
+ * @param elements the elements to add to the {@code ImmutableMultiset}
+ * @return this {@code Builder} object
+ * @throws NullPointerException if {@code elements} is null or contains a
+ * null element
+ */
+ @Override public Builder<E> addAll(Iterator<? extends E> elements) {
+ super.addAll(elements);
+ return this;
+ }
+
+ /**
+ * Returns a newly-created {@code ImmutableMultiset} based on the contents
+ * of the {@code Builder}.
+ */
+ @Override public ImmutableMultiset<E> build() {
+ return copyOf(contents);
+ }
+ }
+}
diff --git a/src/com/google/common/collect/ImmutableSet.java b/src/com/google/common/collect/ImmutableSet.java
new file mode 100644
index 0000000..8410a79
--- /dev/null
+++ b/src/com/google/common/collect/ImmutableSet.java
@@ -0,0 +1,536 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * A high-performance, immutable {@code Set} with reliable, user-specified
+ * iteration order. Does not permit null elements.
+ *
+ * <p>Unlike {@link Collections#unmodifiableSet}, which is a <i>view</i> of a
+ * separate collection that can still change, an instance of this class contains
+ * its own private data and will <i>never</i> change. This class is convenient
+ * for {@code public static final} sets ("constant sets") and also lets you
+ * easily make a "defensive copy" of a set provided to your class by a caller.
+ *
+ * <p><b>Warning:</b> Like most sets, an {@code ImmutableSet} will not function
+ * correctly if an element is modified after being placed in the set. For this
+ * reason, and to avoid general confusion, it is strongly recommended to place
+ * only immutable objects into this collection.
+ *
+ * <p>This class has been observed to perform significantly better than {@link
+ * HashSet} for objects with very fast {@link Object#hashCode} implementations
+ * (as a well-behaved immutable object should). While this class's factory
+ * methods create hash-based instances, the {@link ImmutableSortedSet} subclass
+ * performs binary searches instead.
+ *
+ * <p><b>Note</b>: Although this class is not final, it cannot be subclassed
+ * outside its package as it has no public or protected constructors. Thus,
+ * instances of this type are guaranteed to be immutable.
+ *
+ * @see ImmutableList
+ * @see ImmutableMap
+ * @author Kevin Bourrillion
+ * @author Nick Kralevich
+ */
+@GwtCompatible(serializable = true)
+@SuppressWarnings("serial") // we're overriding default serialization
+public abstract class ImmutableSet<E> extends ImmutableCollection<E>
+ implements Set<E> {
+ /**
+ * Returns the empty immutable set. This set behaves and performs comparably
+ * to {@link Collections#emptySet}, and is preferable mainly for consistency
+ * and maintainability of your code.
+ */
+ // Casting to any type is safe because the set will never hold any elements.
+ @SuppressWarnings({"unchecked"})
+ public static <E> ImmutableSet<E> of() {
+ return (ImmutableSet<E>) EmptyImmutableSet.INSTANCE;
+ }
+
+ /**
+ * Returns an immutable set containing a single element. This set behaves and
+ * performs comparably to {@link Collections#singleton}, but will not accept
+ * a null element. It is preferable mainly for consistency and
+ * maintainability of your code.
+ */
+ public static <E> ImmutableSet<E> of(E element) {
+ return new SingletonImmutableSet<E>(element);
+ }
+
+ /**
+ * Returns an immutable set containing the given elements, in order. Repeated
+ * occurrences of an element (according to {@link Object#equals}) after the
+ * first are ignored.
+ *
+ * @throws NullPointerException if any element is null
+ */
+ @SuppressWarnings("unchecked")
+ public static <E> ImmutableSet<E> of(E e1, E e2) {
+ return create(e1, e2);
+ }
+
+ /**
+ * Returns an immutable set containing the given elements, in order. Repeated
+ * occurrences of an element (according to {@link Object#equals}) after the
+ * first are ignored.
+ *
+ * @throws NullPointerException if any element is null
+ */
+ @SuppressWarnings("unchecked")
+ public static <E> ImmutableSet<E> of(E e1, E e2, E e3) {
+ return create(e1, e2, e3);
+ }
+
+ /**
+ * Returns an immutable set containing the given elements, in order. Repeated
+ * occurrences of an element (according to {@link Object#equals}) after the
+ * first are ignored.
+ *
+ * @throws NullPointerException if any element is null
+ */
+ @SuppressWarnings("unchecked")
+ public static <E> ImmutableSet<E> of(E e1, E e2, E e3, E e4) {
+ return create(e1, e2, e3, e4);
+ }
+
+ /**
+ * Returns an immutable set containing the given elements, in order. Repeated
+ * occurrences of an element (according to {@link Object#equals}) after the
+ * first are ignored.
+ *
+ * @throws NullPointerException if any element is null
+ */
+ @SuppressWarnings("unchecked")
+ public static <E> ImmutableSet<E> of(E e1, E e2, E e3, E e4, E e5) {
+ return create(e1, e2, e3, e4, e5);
+ }
+
+ /**
+ * Returns an immutable set containing the given elements, in order. Repeated
+ * occurrences of an element (according to {@link Object#equals}) after the
+ * first are ignored (but too many of these may result in the set being
+ * sized inappropriately).
+ *
+ * @throws NullPointerException if any of {@code elements} is null
+ */
+ public static <E> ImmutableSet<E> of(E... elements) {
+ checkNotNull(elements); // for GWT
+ switch (elements.length) {
+ case 0:
+ return of();
+ case 1:
+ return of(elements[0]);
+ default:
+ return create(elements);
+ }
+ }
+
+ /**
+ * Returns an immutable set containing the given elements, in order. Repeated
+ * occurrences of an element (according to {@link Object#equals}) after the
+ * first are ignored (but too many of these may result in the set being
+ * sized inappropriately). This method iterates over {@code elements} at most
+ * once.
+ *
+ * <p>Note that if {@code s} is a {@code Set<String>}, then {@code
+ * ImmutableSet.copyOf(s)} returns an {@code ImmutableSet<String>} containing
+ * each of the strings in {@code s}, while {@code ImmutableSet.of(s)} returns
+ * a {@code ImmutableSet<Set<String>>} containing one element (the given set
+ * itself).
+ *
+ * <p><b>Note:</b> Despite what the method name suggests, if {@code elements}
+ * is an {@code ImmutableSet} (but not an {@code ImmutableSortedSet}), no copy
+ * will actually be performed, and the given set itself will be returned.
+ *
+ * @throws NullPointerException if any of {@code elements} is null
+ */
+ public static <E> ImmutableSet<E> copyOf(Iterable<? extends E> elements) {
+ if (elements instanceof ImmutableSet
+ && !(elements instanceof ImmutableSortedSet)) {
+ @SuppressWarnings("unchecked") // all supported methods are covariant
+ ImmutableSet<E> set = (ImmutableSet<E>) elements;
+ return set;
+ }
+ return copyOfInternal(Collections2.toCollection(elements));
+ }
+
+ /**
+ * Returns an immutable set containing the given elements, in order. Repeated
+ * occurrences of an element (according to {@link Object#equals}) after the
+ * first are ignored.
+ *
+ * @throws NullPointerException if any of {@code elements} is null
+ */
+ public static <E> ImmutableSet<E> copyOf(Iterator<? extends E> elements) {
+ Collection<E> list = Lists.newArrayList(elements);
+ return copyOfInternal(list);
+ }
+
+ private static <E> ImmutableSet<E> copyOfInternal(
+ Collection<? extends E> collection) {
+ // TODO: Support concurrent collections that change while this method is
+ // running.
+ switch (collection.size()) {
+ case 0:
+ return of();
+ case 1:
+ // TODO: Remove "ImmutableSet.<E>" when eclipse bug is fixed.
+ return ImmutableSet.<E>of(collection.iterator().next());
+ default:
+ return create(collection, collection.size());
+ }
+ }
+
+ ImmutableSet() {}
+
+ /** Returns {@code true} if the {@code hashCode()} method runs quickly. */
+ boolean isHashCodeFast() {
+ return false;
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ if (object == this) {
+ return true;
+ }
+ if (object instanceof ImmutableSet
+ && isHashCodeFast()
+ && ((ImmutableSet<?>) object).isHashCodeFast()
+ && hashCode() != object.hashCode()) {
+ return false;
+ }
+ return Collections2.setEquals(this, object);
+ }
+
+ @Override public int hashCode() {
+ int hashCode = 0;
+ for (Object o : this) {
+ hashCode += o.hashCode();
+ }
+ return hashCode;
+ }
+
+ // This declaration is needed to make Set.iterator() and
+ // ImmutableCollection.iterator() consistent.
+ @Override public abstract UnmodifiableIterator<E> iterator();
+
+ private static <E> ImmutableSet<E> create(E... elements) {
+ return create(Arrays.asList(elements), elements.length);
+ }
+
+ private static <E> ImmutableSet<E> create(
+ Iterable<? extends E> iterable, int count) {
+ // count is always the (nonzero) number of elements in the iterable
+ int tableSize = Hashing.chooseTableSize(count);
+ Object[] table = new Object[tableSize];
+ int mask = tableSize - 1;
+
+ List<E> elements = new ArrayList<E>(count);
+ int hashCode = 0;
+
+ for (E element : iterable) {
+ checkNotNull(element); // for GWT
+ int hash = element.hashCode();
+ for (int i = Hashing.smear(hash); true; i++) {
+ int index = i & mask;
+ Object value = table[index];
+ if (value == null) {
+ // Came to an empty bucket. Put the element here.
+ table[index] = element;
+ elements.add(element);
+ hashCode += hash;
+ break;
+ } else if (value.equals(element)) {
+ break; // Found a duplicate. Nothing to do.
+ }
+ }
+ }
+
+ if (elements.size() == 1) {
+ // The iterable contained only duplicates of the same element.
+ return new SingletonImmutableSet<E>(elements.get(0), hashCode);
+ } else if (tableSize > Hashing.chooseTableSize(elements.size())) {
+ // Resize the table when the iterable includes too many duplicates.
+ return create(elements, elements.size());
+ } else {
+ return new RegularImmutableSet<E>(
+ elements.toArray(), hashCode, table, mask);
+ }
+ }
+
+ abstract static class ArrayImmutableSet<E> extends ImmutableSet<E> {
+ // the elements (two or more) in the desired order.
+ final transient Object[] elements;
+
+ ArrayImmutableSet(Object[] elements) {
+ this.elements = elements;
+ }
+
+ public int size() {
+ return elements.length;
+ }
+
+ @Override public boolean isEmpty() {
+ return false;
+ }
+
+ /*
+ * The cast is safe because the only way to create an instance is via the
+ * create() method above, which only permits elements of type E.
+ */
+ @SuppressWarnings("unchecked")
+ @Override public UnmodifiableIterator<E> iterator() {
+ return (UnmodifiableIterator<E>) Iterators.forArray(elements);
+ }
+
+ @Override public Object[] toArray() {
+ Object[] array = new Object[size()];
+ System.arraycopy(elements, 0, array, 0, size());
+ return array;
+ }
+
+ @Override public <T> T[] toArray(T[] array) {
+ int size = size();
+ if (array.length < size) {
+ array = ObjectArrays.newArray(array, size);
+ } else if (array.length > size) {
+ array[size] = null;
+ }
+ System.arraycopy(elements, 0, array, 0, size);
+ return array;
+ }
+
+ @Override public boolean containsAll(Collection<?> targets) {
+ if (targets == this) {
+ return true;
+ }
+ if (!(targets instanceof ArrayImmutableSet)) {
+ return super.containsAll(targets);
+ }
+ if (targets.size() > size()) {
+ return false;
+ }
+ for (Object target : ((ArrayImmutableSet<?>) targets).elements) {
+ if (!contains(target)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+
+ /** such as ImmutableMap.keySet() */
+ abstract static class TransformedImmutableSet<D, E> extends ImmutableSet<E> {
+ final D[] source;
+ final int hashCode;
+
+ TransformedImmutableSet(D[] source, int hashCode) {
+ this.source = source;
+ this.hashCode = hashCode;
+ }
+
+ abstract E transform(D element);
+
+ public int size() {
+ return source.length;
+ }
+
+ @Override public boolean isEmpty() {
+ return false;
+ }
+
+ @Override public UnmodifiableIterator<E> iterator() {
+ return new AbstractIterator<E>() {
+ int index = 0;
+ @Override protected E computeNext() {
+ return index < source.length
+ ? transform(source[index++])
+ : endOfData();
+ }
+ };
+ }
+
+ @Override public Object[] toArray() {
+ return toArray(new Object[size()]);
+ }
+
+ @Override public <T> T[] toArray(T[] array) {
+ int size = size();
+ if (array.length < size) {
+ array = ObjectArrays.newArray(array, size);
+ } else if (array.length > size) {
+ array[size] = null;
+ }
+
+ // Writes will produce ArrayStoreException when the toArray() doc requires.
+ Object[] objectArray = array;
+ for (int i = 0; i < source.length; i++) {
+ objectArray[i] = transform(source[i]);
+ }
+ return array;
+ }
+
+ @Override public final int hashCode() {
+ return hashCode;
+ }
+
+ @Override boolean isHashCodeFast() {
+ return true;
+ }
+ }
+
+ /*
+ * This class is used to serialize all ImmutableSet instances, except for
+ * ImmutableEnumSet/ImmutableSortedSet, regardless of implementation type. It
+ * captures their "logical contents" and they are reconstructed using public
+ * static factories. This is necessary to ensure that the existence of a
+ * particular implementation type is an implementation detail.
+ */
+ private static class SerializedForm implements Serializable {
+ final Object[] elements;
+ SerializedForm(Object[] elements) {
+ this.elements = elements;
+ }
+ Object readResolve() {
+ return of(elements);
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ @Override Object writeReplace() {
+ return new SerializedForm(toArray());
+ }
+
+ /**
+ * Returns a new builder. The generated builder is equivalent to the builder
+ * created by the {@link Builder} constructor.
+ */
+ public static <E> Builder<E> builder() {
+ return new Builder<E>();
+ }
+
+ /**
+ * A builder for creating immutable set instances, especially
+ * {@code public static final} sets ("constant sets").
+ *
+ * <p>Example:
+ * <pre>{@code
+ * public static final ImmutableSet<Color> GOOGLE_COLORS
+ * = new ImmutableSet.Builder<Color>()
+ * .addAll(WEBSAFE_COLORS)
+ * .add(new Color(0, 191, 255))
+ * .build();}</pre>
+ *
+ * <p>Builder instances can be reused - it is safe to call {@link #build}
+ * multiple times to build multiple sets in series. Each set
+ * is a superset of the set created before it.
+ */
+ public static class Builder<E> extends ImmutableCollection.Builder<E> {
+ // accessed directly by ImmutableSortedSet
+ final ArrayList<E> contents = Lists.newArrayList();
+
+ /**
+ * Creates a new builder. The returned builder is equivalent to the builder
+ * generated by {@link ImmutableSet#builder}.
+ */
+ public Builder() {}
+
+ /**
+ * Adds {@code element} to the {@code ImmutableSet}. If the {@code
+ * ImmutableSet} already contains {@code element}, then {@code add} has no
+ * effect (only the previously added element is retained).
+ *
+ * @param element the element to add
+ * @return this {@code Builder} object
+ * @throws NullPointerException if {@code element} is null
+ */
+ @Override public Builder<E> add(E element) {
+ contents.add(checkNotNull(element));
+ return this;
+ }
+
+ /**
+ * Adds each element of {@code elements} to the {@code ImmutableSet},
+ * ignoring duplicate elements (only the first duplicate element is added).
+ *
+ * @param elements the elements to add
+ * @return this {@code Builder} object
+ * @throws NullPointerException if {@code elements} is null or contains a
+ * null element
+ */
+ @Override public Builder<E> add(E... elements) {
+ checkNotNull(elements); // for GWT
+ contents.ensureCapacity(contents.size() + elements.length);
+ super.add(elements);
+ return this;
+ }
+
+ /**
+ * Adds each element of {@code elements} to the {@code ImmutableSet},
+ * ignoring duplicate elements (only the first duplicate element is added).
+ *
+ * @param elements the {@code Iterable} to add to the {@code ImmutableSet}
+ * @return this {@code Builder} object
+ * @throws NullPointerException if {@code elements} is null or contains a
+ * null element
+ */
+ @Override public Builder<E> addAll(Iterable<? extends E> elements) {
+ if (elements instanceof Collection) {
+ Collection<?> collection = (Collection<?>) elements;
+ contents.ensureCapacity(contents.size() + collection.size());
+ }
+ super.addAll(elements);
+ return this;
+ }
+
+ /**
+ * Adds each element of {@code elements} to the {@code ImmutableSet},
+ * ignoring duplicate elements (only the first duplicate element is added).
+ *
+ * @param elements the elements to add to the {@code ImmutableSet}
+ * @return this {@code Builder} object
+ * @throws NullPointerException if {@code elements} is null or contains a
+ * null element
+ */
+ @Override public Builder<E> addAll(Iterator<? extends E> elements) {
+ super.addAll(elements);
+ return this;
+ }
+
+ /**
+ * Returns a newly-created {@code ImmutableSet} based on the contents of
+ * the {@code Builder}.
+ */
+ @Override public ImmutableSet<E> build() {
+ return copyOf(contents);
+ }
+ }
+}
diff --git a/src/com/google/common/collect/ImmutableSetMultimap.java b/src/com/google/common/collect/ImmutableSetMultimap.java
new file mode 100644
index 0000000..af3ca84
--- /dev/null
+++ b/src/com/google/common/collect/ImmutableSetMultimap.java
@@ -0,0 +1,387 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.io.IOException;
+import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * An immutable {@link SetMultimap} with reliable user-specified key and value
+ * iteration order. Does not permit null keys or values.
+ *
+ * <p>Unlike {@link Multimaps#unmodifiableSetMultimap(SetMultimap)}, which is
+ * a <i>view</i> of a separate multimap which can still change, an instance of
+ * {@code ImmutableSetMultimap} contains its own data and will <i>never</i>
+ * change. {@code ImmutableSetMultimap} is convenient for
+ * {@code public static final} multimaps ("constant multimaps") and also lets
+ * you easily make a "defensive copy" of a multimap provided to your class by
+ * a caller.
+ *
+ * <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
+ * it has no public or protected constructors. Thus, instances of this class
+ * are guaranteed to be immutable.
+ *
+ * @author Mike Ward
+ */
+@GwtCompatible(serializable = true)
+public class ImmutableSetMultimap<K, V>
+ extends ImmutableMultimap<K, V>
+ implements SetMultimap<K, V> {
+
+ /** Returns the empty multimap. */
+ // Casting is safe because the multimap will never hold any elements.
+ @SuppressWarnings("unchecked")
+ public static <K, V> ImmutableSetMultimap<K, V> of() {
+ return (ImmutableSetMultimap<K, V>) EmptyImmutableSetMultimap.INSTANCE;
+ }
+
+ /**
+ * Returns an immutable multimap containing a single entry.
+ */
+ public static <K, V> ImmutableSetMultimap<K, V> of(K k1, V v1) {
+ ImmutableSetMultimap.Builder<K, V> builder = ImmutableSetMultimap.builder();
+ builder.put(k1, v1);
+ return builder.build();
+ }
+
+ /**
+ * Returns an immutable multimap containing the given entries, in order.
+ * Repeated occurrences of an entry (according to {@link Object#equals}) after
+ * the first are ignored.
+ */
+ public static <K, V> ImmutableSetMultimap<K, V> of(K k1, V v1, K k2, V v2) {
+ ImmutableSetMultimap.Builder<K, V> builder = ImmutableSetMultimap.builder();
+ builder.put(k1, v1);
+ builder.put(k2, v2);
+ return builder.build();
+ }
+
+ /**
+ * Returns an immutable multimap containing the given entries, in order.
+ * Repeated occurrences of an entry (according to {@link Object#equals}) after
+ * the first are ignored.
+ */
+ public static <K, V> ImmutableSetMultimap<K, V> of(
+ K k1, V v1, K k2, V v2, K k3, V v3) {
+ ImmutableSetMultimap.Builder<K, V> builder = ImmutableSetMultimap.builder();
+ builder.put(k1, v1);
+ builder.put(k2, v2);
+ builder.put(k3, v3);
+ return builder.build();
+ }
+
+ /**
+ * Returns an immutable multimap containing the given entries, in order.
+ * Repeated occurrences of an entry (according to {@link Object#equals}) after
+ * the first are ignored.
+ */
+ public static <K, V> ImmutableSetMultimap<K, V> of(
+ K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
+ ImmutableSetMultimap.Builder<K, V> builder = ImmutableSetMultimap.builder();
+ builder.put(k1, v1);
+ builder.put(k2, v2);
+ builder.put(k3, v3);
+ builder.put(k4, v4);
+ return builder.build();
+ }
+
+ /**
+ * Returns an immutable multimap containing the given entries, in order.
+ * Repeated occurrences of an entry (according to {@link Object#equals}) after
+ * the first are ignored.
+ */
+ public static <K, V> ImmutableSetMultimap<K, V> of(
+ K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
+ ImmutableSetMultimap.Builder<K, V> builder = ImmutableSetMultimap.builder();
+ builder.put(k1, v1);
+ builder.put(k2, v2);
+ builder.put(k3, v3);
+ builder.put(k4, v4);
+ builder.put(k5, v5);
+ return builder.build();
+ }
+
+ // looking for of() with > 5 entries? Use the builder instead.
+
+ /**
+ * Returns a new {@link Builder}.
+ */
+ public static <K, V> Builder<K, V> builder() {
+ return new Builder<K, V>();
+ }
+
+ /**
+ * Multimap for {@link ImmutableSetMultimap.Builder} that maintains key
+ * and value orderings and performs better than {@link LinkedHashMultimap}.
+ */
+ private static class BuilderMultimap<K, V> extends AbstractMultimap<K, V> {
+ BuilderMultimap() {
+ super(new LinkedHashMap<K, Collection<V>>());
+ }
+ @Override Collection<V> createCollection() {
+ return Sets.newLinkedHashSet();
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * A builder for creating immutable {@code SetMultimap} instances, especially
+ * {@code public static final} multimaps ("constant multimaps"). Example:
+ * <pre> {@code
+ *
+ * static final Multimap<String, Integer> STRING_TO_INTEGER_MULTIMAP =
+ * new ImmutableSetMultimap.Builder<String, Integer>()
+ * .put("one", 1)
+ * .putAll("several", 1, 2, 3)
+ * .putAll("many", 1, 2, 3, 4, 5)
+ * .build();}</pre>
+ *
+ * <p>Builder instances can be reused - it is safe to call {@link #build}
+ * multiple times to build multiple multimaps in series. Each multimap
+ * contains the key-value mappings in the previously created multimaps.
+ */
+ public static final class Builder<K, V>
+ extends ImmutableMultimap.Builder<K, V> {
+ private final Multimap<K, V> builderMultimap = new BuilderMultimap<K, V>();
+
+ /**
+ * Creates a new builder. The returned builder is equivalent to the builder
+ * generated by {@link ImmutableSetMultimap#builder}.
+ */
+ public Builder() {}
+
+ /**
+ * Adds a key-value mapping to the built multimap if it is not already
+ * present.
+ */
+ @Override public Builder<K, V> put(K key, V value) {
+ builderMultimap.put(checkNotNull(key), checkNotNull(value));
+ return this;
+ }
+
+ /**
+ * Stores a collection of values with the same key in the built multimap.
+ *
+ * @throws NullPointerException if {@code key}, {@code values}, or any
+ * element in {@code values} is null. The builder is left in an invalid
+ * state.
+ */
+ @Override public Builder<K, V> putAll(K key, Iterable<? extends V> values) {
+ Collection<V> collection = builderMultimap.get(checkNotNull(key));
+ for (V value : values) {
+ collection.add(checkNotNull(value));
+ }
+ return this;
+ }
+
+ /**
+ * Stores an array of values with the same key in the built multimap.
+ *
+ * @throws NullPointerException if the key or any value is null. The
+ * builder is left in an invalid state.
+ */
+ @Override public Builder<K, V> putAll(K key, V... values) {
+ return putAll(key, Arrays.asList(values));
+ }
+
+ /**
+ * Stores another multimap's entries in the built multimap. The generated
+ * multimap's key and value orderings correspond to the iteration ordering
+ * of the {@code multimap.asMap()} view, with new keys and values following
+ * any existing keys and values.
+ *
+ * @throws NullPointerException if any key or value in {@code multimap} is
+ * null. The builder is left in an invalid state.
+ */
+ @Override public Builder<K, V> putAll(
+ Multimap<? extends K, ? extends V> multimap) {
+ for (Map.Entry<? extends K, ? extends Collection<? extends V>> entry
+ : multimap.asMap().entrySet()) {
+ putAll(entry.getKey(), entry.getValue());
+ }
+ return this;
+ }
+
+ /**
+ * Returns a newly-created immutable set multimap.
+ */
+ @Override public ImmutableSetMultimap<K, V> build() {
+ return copyOf(builderMultimap);
+ }
+ }
+
+ /**
+ * Returns an immutable set multimap containing the same mappings as
+ * {@code multimap}. The generated multimap's key and value orderings
+ * correspond to the iteration ordering of the {@code multimap.asMap()} view.
+ * Repeated occurrences of an entry in the multimap after the first are
+ * ignored.
+ *
+ * <p><b>Note:</b> Despite what the method name suggests, if
+ * {@code multimap} is an {@code ImmutableSetMultimap}, no copy will actually
+ * be performed, and the given multimap itself will be returned.
+ *
+ * @throws NullPointerException if any key or value in {@code multimap} is
+ * null
+ */
+ public static <K, V> ImmutableSetMultimap<K, V> copyOf(
+ Multimap<? extends K, ? extends V> multimap) {
+ if (multimap.isEmpty()) {
+ return of();
+ }
+
+ if (multimap instanceof ImmutableSetMultimap) {
+ @SuppressWarnings("unchecked") // safe since multimap is not writable
+ ImmutableSetMultimap<K, V> kvMultimap
+ = (ImmutableSetMultimap<K, V>) multimap;
+ return kvMultimap;
+ }
+
+ ImmutableMap.Builder<K, ImmutableSet<V>> builder = ImmutableMap.builder();
+ int size = 0;
+
+ for (Map.Entry<? extends K, ? extends Collection<? extends V>> entry
+ : multimap.asMap().entrySet()) {
+ K key = entry.getKey();
+ Collection<? extends V> values = entry.getValue();
+ ImmutableSet<V> set = ImmutableSet.copyOf(values);
+ if (!set.isEmpty()) {
+ builder.put(key, set);
+ size += set.size();
+ }
+ }
+
+ return new ImmutableSetMultimap<K, V>(builder.build(), size);
+ }
+
+ ImmutableSetMultimap(ImmutableMap<K, ImmutableSet<V>> map, int size) {
+ super(map, size);
+ }
+
+ // views
+
+ /**
+ * Returns an immutable set of the values for the given key. If no mappings
+ * in the multimap have the provided key, an empty immutable set is returned.
+ * The values are in the same order as the parameters used to build this
+ * multimap.
+ */
+ @Override public ImmutableSet<V> get(@Nullable K key) {
+ // This cast is safe as its type is known in constructor.
+ ImmutableSet<V> set = (ImmutableSet<V>) map.get(key);
+ return (set == null) ? ImmutableSet.<V>of() : set;
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the multimap unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ @Override public ImmutableSet<V> removeAll(Object key) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Guaranteed to throw an exception and leave the multimap unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ @Override public ImmutableSet<V> replaceValues(
+ K key, Iterable<? extends V> values) {
+ throw new UnsupportedOperationException();
+ }
+
+ private transient ImmutableSet<Map.Entry<K, V>> entries;
+
+ /**
+ * Returns an immutable collection of all key-value pairs in the multimap.
+ * Its iterator traverses the values for the first key, the values for the
+ * second key, and so on.
+ */
+ // TODO: Fix this so that two copies of the entries are not created.
+ @Override public ImmutableSet<Map.Entry<K, V>> entries() {
+ ImmutableSet<Map.Entry<K, V>> result = entries;
+ return (result == null)
+ ? (entries = ImmutableSet.copyOf(super.entries()))
+ : result;
+ }
+
+ /**
+ * @serialData number of distinct keys, and then for each distinct key: the
+ * key, the number of values for that key, and the key's values
+ */
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ stream.defaultWriteObject();
+ Serialization.writeMultimap(this, stream);
+ }
+
+ private void readObject(ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+ int keyCount = stream.readInt();
+ if (keyCount < 0) {
+ throw new InvalidObjectException("Invalid key count " + keyCount);
+ }
+ ImmutableMap.Builder<Object, ImmutableSet<Object>> builder
+ = ImmutableMap.builder();
+ int tmpSize = 0;
+
+ for (int i = 0; i < keyCount; i++) {
+ Object key = stream.readObject();
+ int valueCount = stream.readInt();
+ if (valueCount <= 0) {
+ throw new InvalidObjectException("Invalid value count " + valueCount);
+ }
+
+ Object[] array = new Object[valueCount];
+ for (int j = 0; j < valueCount; j++) {
+ array[j] = stream.readObject();
+ }
+ ImmutableSet<Object> valueSet = ImmutableSet.of(array);
+ if (valueSet.size() != array.length) {
+ throw new InvalidObjectException(
+ "Duplicate key-value pairs exist for key " + key);
+ }
+ builder.put(key, valueSet);
+ tmpSize += valueCount;
+ }
+
+ ImmutableMap<Object, ImmutableSet<Object>> tmpMap;
+ try {
+ tmpMap = builder.build();
+ } catch (IllegalArgumentException e) {
+ throw (InvalidObjectException)
+ new InvalidObjectException(e.getMessage()).initCause(e);
+ }
+
+ FieldSettersHolder.MAP_FIELD_SETTER.set(this, tmpMap);
+ FieldSettersHolder.SIZE_FIELD_SETTER.set(this, tmpSize);
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/ImmutableSortedMap.java b/src/com/google/common/collect/ImmutableSortedMap.java
new file mode 100644
index 0000000..f12044a
--- /dev/null
+++ b/src/com/google/common/collect/ImmutableSortedMap.java
@@ -0,0 +1,695 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+import javax.annotation.Nullable;
+
+/**
+ * An immutable {@link SortedMap}. Does not permit null keys or values.
+ *
+ * <p>Unlike {@link Collections#unmodifiableSortedMap}, which is a <i>view</i>
+ * of a separate map which can still change, an instance of {@code
+ * ImmutableSortedMap} contains its own data and will <i>never</i> change.
+ * {@code ImmutableSortedMap} is convenient for {@code public static final} maps
+ * ("constant maps") and also lets you easily make a "defensive copy" of a map
+ * provided to your class by a caller.
+ *
+ * <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
+ * it has no public or protected constructors. Thus, instances of this class are
+ * guaranteed to be immutable.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(serializable = true)
+public class ImmutableSortedMap<K, V>
+ extends ImmutableSortedMapFauxverideShim<K, V> implements SortedMap<K, V> {
+
+ // TODO: Confirm that ImmutableSortedMap is faster to construct and uses less
+ // memory than TreeMap; then say so in the class Javadoc.
+
+ // TODO: Create separate subclasses for empty, single-entry, and
+ // multiple-entry instances.
+
+ @SuppressWarnings("unchecked")
+ private static final Comparator NATURAL_ORDER = Ordering.natural();
+ private static final Entry<?, ?>[] EMPTY_ARRAY = new Entry<?, ?>[0];
+
+ @SuppressWarnings("unchecked")
+ private static final ImmutableMap<Object, Object> NATURAL_EMPTY_MAP
+ = new ImmutableSortedMap<Object, Object>(EMPTY_ARRAY, NATURAL_ORDER);
+
+ /**
+ * Returns the empty sorted map.
+ */
+ // Casting to any type is safe because the set will never hold any elements.
+ @SuppressWarnings("unchecked")
+ public static <K, V> ImmutableSortedMap<K, V> of() {
+ return (ImmutableSortedMap) NATURAL_EMPTY_MAP;
+ }
+
+ private static <K, V> ImmutableSortedMap<K, V> emptyMap(
+ Comparator<? super K> comparator) {
+ if (NATURAL_ORDER.equals(comparator)) {
+ return ImmutableSortedMap.of();
+ } else {
+ return new ImmutableSortedMap<K, V>(EMPTY_ARRAY, comparator);
+ }
+ }
+
+ /**
+ * Returns an immutable map containing a single entry.
+ */
+ public static <K extends Comparable<? super K>, V> ImmutableSortedMap<K, V>
+ of(K k1, V v1) {
+ Entry<?, ?>[] entries = { entryOf(k1, v1) };
+ return new ImmutableSortedMap<K, V>(entries, Ordering.natural());
+ }
+
+ /**
+ * Returns an immutable sorted map containing the given entries, sorted by the
+ * natural ordering of their keys.
+ *
+ * @throws IllegalArgumentException if the two keys are equal according to
+ * their natural ordering
+ */
+ public static <K extends Comparable<? super K>, V> ImmutableSortedMap<K, V>
+ of(K k1, V v1, K k2, V v2) {
+ return new Builder<K, V>(Ordering.natural())
+ .put(k1, v1).put(k2, v2).build();
+ }
+
+ /**
+ * Returns an immutable sorted map containing the given entries, sorted by the
+ * natural ordering of their keys.
+ *
+ * @throws IllegalArgumentException if any two keys are equal according to
+ * their natural ordering
+ */
+ public static <K extends Comparable<? super K>, V> ImmutableSortedMap<K, V>
+ of(K k1, V v1, K k2, V v2, K k3, V v3) {
+ return new Builder<K, V>(Ordering.natural())
+ .put(k1, v1).put(k2, v2).put(k3, v3).build();
+ }
+
+ /**
+ * Returns an immutable sorted map containing the given entries, sorted by the
+ * natural ordering of their keys.
+ *
+ * @throws IllegalArgumentException if any two keys are equal according to
+ * their natural ordering
+ */
+ public static <K extends Comparable<? super K>, V> ImmutableSortedMap<K, V>
+ of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
+ return new Builder<K, V>(Ordering.natural())
+ .put(k1, v1).put(k2, v2).put(k3, v3).put(k4, v4).build();
+ }
+
+ /**
+ * Returns an immutable sorted map containing the given entries, sorted by the
+ * natural ordering of their keys.
+ *
+ * @throws IllegalArgumentException if any two keys are equal according to
+ * their natural ordering
+ */
+ public static <K extends Comparable<? super K>, V> ImmutableSortedMap<K, V>
+ of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
+ return new Builder<K, V>(Ordering.natural())
+ .put(k1, v1).put(k2, v2).put(k3, v3).put(k4, v4).put(k5, v5).build();
+ }
+
+ /**
+ * Returns an immutable map containing the same entries as {@code map}, sorted
+ * by the natural ordering of the keys.
+ *
+ * <p><b>Note:</b> Despite what the method name suggests, if {@code map} is an
+ * {@code ImmutableSortedMap}, it may be returned instead of a copy.
+ *
+ * <p>This method is not type-safe, as it may be called on a map with keys
+ * that are not mutually comparable.
+ *
+ * @throws ClassCastException if the keys in {@code map} are not mutually
+ * comparable
+ * @throws NullPointerException if any key or value in {@code map} is null
+ * @throws IllegalArgumentException if any two keys are equal according to
+ * their natural ordering
+ */
+ public static <K, V> ImmutableSortedMap<K, V> copyOf(
+ Map<? extends K, ? extends V> map) {
+ // Hack around K not being a subtype of Comparable.
+ // Unsafe, see ImmutableSortedSetFauxverideShim.
+ @SuppressWarnings("unchecked")
+ Ordering<K> naturalOrder = (Ordering) Ordering.<Comparable>natural();
+ return copyOfInternal(map, naturalOrder);
+ }
+
+ /**
+ * Returns an immutable map containing the same entries as {@code map}, with
+ * keys sorted by the provided comparator.
+ *
+ * <p><b>Note:</b> Despite what the method name suggests, if {@code map} is an
+ * {@code ImmutableSortedMap}, it may be returned instead of a copy.
+ *
+ * @throws NullPointerException if any key or value in {@code map} is null
+ * @throws IllegalArgumentException if any two keys are equal according to
+ * the comparator
+ */
+ public static <K, V> ImmutableSortedMap<K, V> copyOf(
+ Map<? extends K, ? extends V> map, Comparator<? super K> comparator) {
+ return copyOfInternal(map, checkNotNull(comparator));
+ }
+
+ /**
+ * Returns an immutable map containing the same entries as the provided sorted
+ * map, with the same ordering.
+ *
+ * <p><b>Note:</b> Despite what the method name suggests, if {@code map} is an
+ * {@code ImmutableSortedMap}, it may be returned instead of a copy.
+ *
+ * @throws NullPointerException if any key or value in {@code map} is null
+ */
+ public static <K, V> ImmutableSortedMap<K, V> copyOfSorted(
+ SortedMap<K, ? extends V> map) {
+ // If map has a null comparator, the keys should have a natural ordering,
+ // even though K doesn't explicitly implement Comparable.
+ @SuppressWarnings("unchecked")
+ Comparator<? super K> comparator =
+ (map.comparator() == null) ? NATURAL_ORDER : map.comparator();
+ return copyOfInternal(map, comparator);
+ }
+
+ private static <K, V> ImmutableSortedMap<K, V> copyOfInternal(
+ Map<? extends K, ? extends V> map, Comparator<? super K> comparator) {
+ boolean sameComparator = false;
+ if (map instanceof SortedMap) {
+ SortedMap<?, ?> sortedMap = (SortedMap<?, ?>) map;
+ Comparator<?> comparator2 = sortedMap.comparator();
+ sameComparator = (comparator2 == null)
+ ? comparator == NATURAL_ORDER
+ : comparator.equals(comparator2);
+ }
+
+ if (sameComparator && (map instanceof ImmutableSortedMap)) {
+ // TODO: Prove that this cast is safe, even though
+ // Collections.unmodifiableSortedMap requires the same key type.
+ @SuppressWarnings("unchecked")
+ ImmutableSortedMap<K, V> kvMap = (ImmutableSortedMap<K, V>) map;
+ return kvMap;
+ }
+
+ // Using List to support concurrent map whose size changes
+ List<Entry<?, ?>> list = Lists.newArrayListWithCapacity(map.size());
+ for (Entry<? extends K, ? extends V> entry : map.entrySet()) {
+ list.add(entryOf(entry.getKey(), entry.getValue()));
+ }
+ Entry<?, ?>[] entryArray = list.toArray(new Entry<?, ?>[list.size()]);
+
+ if (!sameComparator) {
+ sortEntries(entryArray, comparator);
+ validateEntries(entryArray, comparator);
+ }
+
+ return new ImmutableSortedMap<K, V>(entryArray, comparator);
+ }
+
+ private static void sortEntries(Entry<?, ?>[] entryArray,
+ final Comparator<?> comparator) {
+ Comparator<Entry<?, ?>> entryComparator = new Comparator<Entry<?, ?>>() {
+ public int compare(Entry<?, ?> entry1, Entry<?, ?> entry2) {
+ return ImmutableSortedSet.unsafeCompare(
+ comparator, entry1.getKey(), entry2.getKey());
+ }
+ };
+ Arrays.sort(entryArray, entryComparator);
+ }
+
+ private static void validateEntries(Entry<?, ?>[] entryArray,
+ Comparator<?> comparator) {
+ for (int i = 1; i < entryArray.length; i++) {
+ if (ImmutableSortedSet.unsafeCompare(comparator,
+ entryArray[i - 1].getKey(), entryArray[i].getKey()) == 0) {
+ throw new IllegalArgumentException(
+ "Duplicate keys in mappings "
+ + entryArray[i - 1] + " and " + entryArray[i]);
+ }
+ }
+ }
+
+ /**
+ * Returns a builder that creates immutable sorted maps whose keys are
+ * ordered by their natural ordering. The sorted maps use {@link
+ * Ordering#natural()} as the comparator.
+ *
+ * <p>Note: the type parameter {@code K} extends {@code Comparable<K>} rather
+ * than {@code Comparable<? super K>} as a workaround for javac <a
+ * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6468354">bug
+ * 6468354</a>.
+ */
+ public static <K extends Comparable<K>, V> Builder<K, V> naturalOrder() {
+ return new Builder<K, V>(Ordering.natural());
+ }
+
+ /**
+ * Returns a builder that creates immutable sorted maps with an explicit
+ * comparator. If the comparator has a more general type than the map's keys,
+ * such as creating a {@code SortedMap<Integer, String>} with a {@code
+ * Comparator<Number>}, use the {@link Builder} constructor instead.
+ *
+ * @throws NullPointerException if {@code comparator} is null
+ */
+ public static <K, V> Builder<K, V> orderedBy(Comparator<K> comparator) {
+ return new Builder<K, V>(comparator);
+ }
+
+ /**
+ * Returns a builder that creates immutable sorted maps whose keys are
+ * ordered by the reverse of their natural ordering.
+ *
+ * <p>Note: the type parameter {@code K} extends {@code Comparable<K>} rather
+ * than {@code Comparable<? super K>} as a workaround for javac <a
+ * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6468354">bug
+ * 6468354</a>.
+ */
+ public static <K extends Comparable<K>, V> Builder<K, V> reverseOrder() {
+ return new Builder<K, V>(Ordering.natural().reverse());
+ }
+
+ /**
+ * A builder for creating immutable sorted map instances, especially {@code
+ * public static final} maps ("constant maps"). Example: <pre> {@code
+ *
+ * static final ImmutableSortedMap<Integer, String> INT_TO_WORD =
+ * new ImmutableSortedMap.Builder<Integer, String>(Ordering.natural())
+ * .put(1, "one")
+ * .put(2, "two")
+ * .put(3, "three")
+ * .build();}</pre>
+ *
+ * For <i>small</i> immutable sorted maps, the {@code ImmutableSortedMap.of()}
+ * methods are even more convenient.
+ *
+ * <p>Builder instances can be reused - it is safe to call {@link #build}
+ * multiple times to build multiple maps in series. Each map is a superset of
+ * the maps created before it.
+ */
+ public static final class Builder<K, V> extends ImmutableMap.Builder<K, V> {
+ private final Comparator<? super K> comparator;
+
+ /**
+ * Creates a new builder. The returned builder is equivalent to the builder
+ * generated by {@link ImmutableSortedMap#orderedBy}.
+ */
+ public Builder(Comparator<? super K> comparator) {
+ this.comparator = checkNotNull(comparator);
+ }
+
+ /**
+ * Associates {@code key} with {@code value} in the built map. Duplicate
+ * keys, according to the comparator (which might be the keys' natural
+ * order), are not allowed, and will cause {@link #build} to fail.
+ */
+ @Override public Builder<K, V> put(K key, V value) {
+ entries.add(entryOf(key, value));
+ return this;
+ }
+
+ /**
+ * Associates all of the given map's keys and values in the built map.
+ * Duplicate keys, according to the comparator (which might be the keys'
+ * natural order), are not allowed, and will cause {@link #build} to fail.
+ *
+ * @throws NullPointerException if any key or value in {@code map} is null
+ */
+ @Override public Builder<K, V> putAll(Map<? extends K, ? extends V> map) {
+ for (Entry<? extends K, ? extends V> entry : map.entrySet()) {
+ put(entry.getKey(), entry.getValue());
+ }
+ return this;
+ }
+
+ /**
+ * Returns a newly-created immutable sorted map.
+ *
+ * @throws IllegalArgumentException if any two keys are equal according to
+ * the comparator (which might be the keys' natural order)
+ */
+ @Override public ImmutableSortedMap<K, V> build() {
+ Entry<?, ?>[] entryArray
+ = entries.toArray(new Entry<?, ?>[entries.size()]);
+ sortEntries(entryArray, comparator);
+ validateEntries(entryArray, comparator);
+ return new ImmutableSortedMap<K, V>(entryArray, comparator);
+ }
+ }
+
+ private final transient Entry<K, V>[] entries;
+ private final transient Comparator<? super K> comparator;
+ private final transient int fromIndex;
+ private final transient int toIndex;
+
+ private ImmutableSortedMap(Entry<?, ?>[] entries,
+ Comparator<? super K> comparator, int fromIndex, int toIndex) {
+ // each of the callers carefully put only Entry<K, V>s into the array!
+ @SuppressWarnings("unchecked")
+ Entry<K, V>[] tmp = (Entry<K, V>[]) entries;
+ this.entries = tmp;
+ this.comparator = comparator;
+ this.fromIndex = fromIndex;
+ this.toIndex = toIndex;
+ }
+
+ ImmutableSortedMap(Entry<?, ?>[] entries,
+ Comparator<? super K> comparator) {
+ this(entries, comparator, 0, entries.length);
+ }
+
+ public int size() {
+ return toIndex - fromIndex;
+ }
+
+ @Override public V get(@Nullable Object key) {
+ if (key == null) {
+ return null;
+ }
+ int i;
+ try {
+ i = binarySearch(key);
+ } catch (ClassCastException e) {
+ return null;
+ }
+ return (i >= 0) ? entries[i].getValue() : null;
+ }
+
+ private int binarySearch(Object key) {
+ int lower = fromIndex;
+ int upper = toIndex - 1;
+
+ while (lower <= upper) {
+ int middle = lower + (upper - lower) / 2;
+ int c = ImmutableSortedSet.unsafeCompare(
+ comparator, key, entries[middle].getKey());
+ if (c < 0) {
+ upper = middle - 1;
+ } else if (c > 0) {
+ lower = middle + 1;
+ } else {
+ return middle;
+ }
+ }
+
+ return -lower - 1;
+ }
+
+ @Override public boolean containsValue(@Nullable Object value) {
+ if (value == null) {
+ return false;
+ }
+ for (int i = fromIndex; i < toIndex; i++) {
+ if (entries[i].getValue().equals(value)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private transient ImmutableSet<Entry<K, V>> entrySet;
+
+ /**
+ * Returns an immutable set of the mappings in this map, sorted by the key
+ * ordering.
+ */
+ @Override public ImmutableSet<Entry<K, V>> entrySet() {
+ ImmutableSet<Entry<K, V>> es = entrySet;
+ return (es == null) ? (entrySet = createEntrySet()) : es;
+ }
+
+ private ImmutableSet<Entry<K, V>> createEntrySet() {
+ return isEmpty() ? ImmutableSet.<Entry<K, V>>of()
+ : new EntrySet<K, V>(this);
+ }
+
+ @SuppressWarnings("serial") // uses writeReplace(), not default serialization
+ private static class EntrySet<K, V> extends ImmutableSet<Entry<K, V>> {
+ final transient ImmutableSortedMap<K, V> map;
+
+ EntrySet(ImmutableSortedMap<K, V> map) {
+ this.map = map;
+ }
+
+ public int size() {
+ return map.size();
+ }
+
+ @Override public UnmodifiableIterator<Entry<K, V>> iterator() {
+ return Iterators.forArray(map.entries, map.fromIndex, size());
+ }
+
+ @Override public boolean contains(Object target) {
+ if (target instanceof Entry) {
+ Entry<?, ?> entry = (Entry<?, ?>) target;
+ V mappedValue = map.get(entry.getKey());
+ return mappedValue != null && mappedValue.equals(entry.getValue());
+ }
+ return false;
+ }
+
+ @Override Object writeReplace() {
+ return new EntrySetSerializedForm<K, V>(map);
+ }
+ }
+
+ private static class EntrySetSerializedForm<K, V> implements Serializable {
+ final ImmutableSortedMap<K, V> map;
+ EntrySetSerializedForm(ImmutableSortedMap<K, V> map) {
+ this.map = map;
+ }
+ Object readResolve() {
+ return map.entrySet();
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ private transient ImmutableSortedSet<K> keySet;
+
+ /**
+ * Returns an immutable sorted set of the keys in this map.
+ */
+ @Override public ImmutableSortedSet<K> keySet() {
+ ImmutableSortedSet<K> ks = keySet;
+ return (ks == null) ? (keySet = createKeySet()) : ks;
+ }
+
+ private ImmutableSortedSet<K> createKeySet() {
+ if (isEmpty()) {
+ return ImmutableSortedSet.emptySet(comparator);
+ }
+
+ // TODO: For better performance, don't create a separate array.
+ Object[] array = new Object[size()];
+ for (int i = fromIndex; i < toIndex; i++) {
+ array[i - fromIndex] = entries[i].getKey();
+ }
+ return new RegularImmutableSortedSet<K>(array, comparator);
+ }
+
+ private transient ImmutableCollection<V> values;
+
+ /**
+ * Returns an immutable collection of the values in this map, sorted by the
+ * ordering of the corresponding keys.
+ */
+ @Override public ImmutableCollection<V> values() {
+ ImmutableCollection<V> v = values;
+ return (v == null) ? (values = new Values<V>(this)) : v;
+ }
+
+ @SuppressWarnings("serial") // uses writeReplace(), not default serialization
+ private static class Values<V> extends ImmutableCollection<V> {
+ private final ImmutableSortedMap<?, V> map;
+
+ Values(ImmutableSortedMap<?, V> map) {
+ this.map = map;
+ }
+
+ public int size() {
+ return map.size();
+ }
+
+ @Override public UnmodifiableIterator<V> iterator() {
+ return new AbstractIterator<V>() {
+ int index = map.fromIndex;
+ @Override protected V computeNext() {
+ return (index < map.toIndex)
+ ? map.entries[index++].getValue()
+ : endOfData();
+ }
+ };
+ }
+
+ @Override public boolean contains(Object target) {
+ return map.containsValue(target);
+ }
+
+ @Override Object writeReplace() {
+ return new ValuesSerializedForm<V>(map);
+ }
+ }
+
+ private static class ValuesSerializedForm<V> implements Serializable {
+ final ImmutableSortedMap<?, V> map;
+ ValuesSerializedForm(ImmutableSortedMap<?, V> map) {
+ this.map = map;
+ }
+ Object readResolve() {
+ return map.values();
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Returns the comparator that orders the keys, which is
+ * {@link Ordering#natural()} when the natural ordering of the keys is used.
+ * Note that its behavior is not consistent with {@link TreeMap#comparator()},
+ * which returns {@code null} to indicate natural ordering.
+ */
+ public Comparator<? super K> comparator() {
+ return comparator;
+ }
+
+ public K firstKey() {
+ if (isEmpty()) {
+ throw new NoSuchElementException();
+ }
+ return entries[fromIndex].getKey();
+ }
+
+ public K lastKey() {
+ if (isEmpty()) {
+ throw new NoSuchElementException();
+ }
+ return entries[toIndex - 1].getKey();
+ }
+
+ /**
+ * This method returns a {@code ImmutableSortedMap}, consisting of the entries
+ * whose keys are less than {@code toKey}.
+ *
+ * <p>The {@link SortedMap#headMap} documentation states that a submap of a
+ * submap throws an {@link IllegalArgumentException} if passed a {@code toKey}
+ * greater than an earlier {@code toKey}. However, this method doesn't throw
+ * an exception in that situation, but instead keeps the original {@code
+ * toKey}.
+ */
+ public ImmutableSortedMap<K, V> headMap(K toKey) {
+ int newToIndex = findSubmapIndex(checkNotNull(toKey));
+ return createSubmap(fromIndex, newToIndex);
+ }
+
+ /**
+ * This method returns a {@code ImmutableSortedMap}, consisting of the entries
+ * whose keys ranges from {@code fromKey}, inclusive, to {@code toKey},
+ * exclusive.
+ *
+ * <p>The {@link SortedMap#subMap} documentation states that a submap of a
+ * submap throws an {@link IllegalArgumentException} if passed a {@code
+ * fromKey} less than an earlier {@code fromKey}. However, this method doesn't
+ * throw an exception in that situation, but instead keeps the original {@code
+ * fromKey}. Similarly, this method keeps the original {@code toKey}, instead
+ * of throwing an exception, if passed a {@code toKey} greater than an earlier
+ * {@code toKey}.
+ */
+ public ImmutableSortedMap<K, V> subMap(K fromKey, K toKey) {
+ checkNotNull(fromKey);
+ checkNotNull(toKey);
+ checkArgument(comparator.compare(fromKey, toKey) <= 0);
+ int newFromIndex = findSubmapIndex(fromKey);
+ int newToIndex = findSubmapIndex(toKey);
+ return createSubmap(newFromIndex, newToIndex);
+ }
+
+ /**
+ * This method returns a {@code ImmutableSortedMap}, consisting of the entries
+ * whose keys are greater than or equals to {@code fromKey}.
+ *
+ * <p>The {@link SortedMap#tailMap} documentation states that a submap of a
+ * submap throws an {@link IllegalArgumentException} if passed a {@code
+ * fromKey} less than an earlier {@code fromKey}. However, this method doesn't
+ * throw an exception in that situation, but instead keeps the original {@code
+ * fromKey}.
+ */
+ public ImmutableSortedMap<K, V> tailMap(K fromKey) {
+ int newFromIndex = findSubmapIndex(checkNotNull(fromKey));
+ return createSubmap(newFromIndex, toIndex);
+ }
+
+ private int findSubmapIndex(K key) {
+ int index = binarySearch(key);
+ return (index >= 0) ? index : (-index - 1);
+ }
+
+ private ImmutableSortedMap<K, V> createSubmap(
+ int newFromIndex, int newToIndex) {
+ if (newFromIndex < newToIndex) {
+ return new ImmutableSortedMap<K, V>(entries, comparator,
+ newFromIndex, newToIndex);
+ } else {
+ return emptyMap(comparator);
+ }
+ }
+
+ /**
+ * Serialized type for all ImmutableSortedMap instances. It captures the
+ * logical contents and they are reconstructed using public factory methods.
+ * This ensures that the implementation types remain as implementation
+ * details.
+ */
+ private static class SerializedForm extends ImmutableMap.SerializedForm {
+ private final Comparator<Object> comparator;
+ @SuppressWarnings("unchecked")
+ SerializedForm(ImmutableSortedMap<?, ?> sortedMap) {
+ super(sortedMap);
+ comparator = (Comparator<Object>) sortedMap.comparator();
+ }
+ @Override Object readResolve() {
+ Builder<Object, Object> builder = new Builder<Object, Object>(comparator);
+ return createMap(builder);
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ @Override Object writeReplace() {
+ return new SerializedForm(this);
+ }
+
+ // This class is never actually serialized directly, but we have to make the
+ // warning go away (and suppressing would suppress for all nested classes too)
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/ImmutableSortedMapFauxverideShim.java b/src/com/google/common/collect/ImmutableSortedMapFauxverideShim.java
new file mode 100644
index 0000000..0748d51
--- /dev/null
+++ b/src/com/google/common/collect/ImmutableSortedMapFauxverideShim.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * "Overrides" the {@link ImmutableMap} static methods that lack
+ * {@link ImmutableSortedMap} equivalents with deprecated, exception-throwing
+ * versions. See {@link ImmutableSortedSetFauxverideShim} for details.
+ *
+ * @author Chris Povirk
+ */
+@GwtCompatible
+abstract class ImmutableSortedMapFauxverideShim<K, V>
+ extends ImmutableMap<K, V> {
+ /**
+ * Not supported. Use {@link ImmutableSortedMap#naturalOrder}, which offers
+ * better type-safety, instead. This method exists only to hide
+ * {@link ImmutableMap#builder} from consumers of {@code ImmutableSortedMap}.
+ *
+ * @throws UnsupportedOperationException always
+ * @deprecated Use {@link ImmutableSortedMap#naturalOrder}, which offers
+ * better type-safety.
+ */
+ @Deprecated public static <K, V> ImmutableSortedMap.Builder<K, V> builder() {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Not supported. <b>You are attempting to create a map that may contain a
+ * non-{@code Comparable} key.</b> Proper calls will resolve to the version in
+ * {@code ImmutableSortedMap}, not this dummy version.
+ *
+ * @throws UnsupportedOperationException always
+ * @deprecated <b>Pass a key of type {@code Comparable} to use {@link
+ * ImmutableSortedMap#of(Comparable, Object)}.</b>
+ */
+ @Deprecated public static <K, V> ImmutableSortedMap<K, V> of(K k1, V v1) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Not supported. <b>You are attempting to create a map that may contain
+ * non-{@code Comparable} keys.</b> Proper calls will resolve to the version
+ * in {@code ImmutableSortedMap}, not this dummy version.
+ *
+ * @throws UnsupportedOperationException always
+ * @deprecated <b>Pass keys of type {@code Comparable} to use {@link
+ * ImmutableSortedMap#of(Comparable, Object, Comparable, Object)}.</b>
+ */
+ @Deprecated public static <K, V> ImmutableSortedMap<K, V> of(
+ K k1, V v1, K k2, V v2) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Not supported. <b>You are attempting to create a map that may contain
+ * non-{@code Comparable} keys.</b> Proper calls to will resolve to the
+ * version in {@code ImmutableSortedMap}, not this dummy version.
+ *
+ * @throws UnsupportedOperationException always
+ * @deprecated <b>Pass keys of type {@code Comparable} to use {@link
+ * ImmutableSortedMap#of(Comparable, Object, Comparable, Object,
+ * Comparable, Object)}.</b>
+ */
+ @Deprecated public static <K, V> ImmutableSortedMap<K, V> of(
+ K k1, V v1, K k2, V v2, K k3, V v3) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Not supported. <b>You are attempting to create a map that may contain
+ * non-{@code Comparable} keys.</b> Proper calls will resolve to the version
+ * in {@code ImmutableSortedMap}, not this dummy version.
+ *
+ * @throws UnsupportedOperationException always
+ * @deprecated <b>Pass keys of type {@code Comparable} to use {@link
+ * ImmutableSortedMap#of(Comparable, Object, Comparable, Object,
+ * Comparable, Object, Comparable, Object)}.</b>
+ */
+ @Deprecated public static <K, V> ImmutableSortedMap<K, V> of(
+ K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Not supported. <b>You are attempting to create a map that may contain
+ * non-{@code Comparable} keys.</b> Proper calls will resolve to the version
+ * in {@code ImmutableSortedMap}, not this dummy version.
+ *
+ * @throws UnsupportedOperationException always
+ * @deprecated <b>Pass keys of type {@code Comparable} to use {@link
+ * ImmutableSortedMap#of(Comparable, Object, Comparable, Object,
+ * Comparable, Object, Comparable, Object, Comparable, Object)}.</b>
+ */
+ @Deprecated public static <K, V> ImmutableSortedMap<K, V> of(
+ K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
+ throw new UnsupportedOperationException();
+ }
+
+ // No copyOf() fauxveride; see ImmutableSortedSetFauxverideShim.
+}
diff --git a/src/com/google/common/collect/ImmutableSortedSet.java b/src/com/google/common/collect/ImmutableSortedSet.java
new file mode 100644
index 0000000..cb3fe9c
--- /dev/null
+++ b/src/com/google/common/collect/ImmutableSortedSet.java
@@ -0,0 +1,678 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.SortedSet;
+
+/**
+ * An immutable {@code SortedSet} that stores its elements in a sorted array.
+ * Some instances are ordered by an explicit comparator, while others follow the
+ * natural sort ordering of their elements. Either way, null elements are not
+ * supported.
+ *
+ * <p>Unlike {@link Collections#unmodifiableSortedSet}, which is a <i>view</i>
+ * of a separate collection that can still change, an instance of {@code
+ * ImmutableSortedSet} contains its own private data and will <i>never</i>
+ * change. This class is convenient for {@code public static final} sets
+ * ("constant sets") and also lets you easily make a "defensive copy" of a set
+ * provided to your class by a caller.
+ *
+ * <p>The sets returned by {@link #headSet}, {@link #tailSet}, and
+ * {@link #subSet} methods share the same array as the original set, preventing
+ * that array from being garbage collected. If this is a concern, the data may
+ * be copied into a correctly-sized array by calling {@link #copyOfSorted}.
+ *
+ * <p><b>Note on element equivalence:</b> The {@link #contains(Object)},
+ * {@link #containsAll(Collection)}, and {@link #equals(Object)}
+ * implementations must check whether a provided object is equivalent to an
+ * element in the collection. Unlike most collections, an
+ * {@code ImmutableSortedSet} doesn't use {@link Object#equals} to determine if
+ * two elements are equivalent. Instead, with an explicit comparator, the
+ * following relation determines whether elements {@code x} and {@code y} are
+ * equivalent: <pre> {@code
+ *
+ * {(x, y) | comparator.compare(x, y) == 0}}</pre>
+ *
+ * With natural ordering of elements, the following relation determines whether
+ * two elements are equivalent: <pre> {@code
+ *
+ * {(x, y) | x.compareTo(y) == 0}}</pre>
+ *
+ * <b>Warning:</b> Like most sets, an {@code ImmutableSortedSet} will not
+ * function correctly if an element is modified after being placed in the set.
+ * For this reason, and to avoid general confusion, it is strongly recommended
+ * to place only immutable objects into this collection.
+ *
+ * <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
+ * it has no public or protected constructors. Thus, instances of this type are
+ * guaranteed to be immutable.
+ *
+ * @see ImmutableSet
+ * @author Jared Levy
+ */
+@GwtCompatible(serializable = true)
+@SuppressWarnings("serial") // we're overriding default serialization
+public abstract class ImmutableSortedSet<E>
+ extends ImmutableSortedSetFauxverideShim<E> implements SortedSet<E> {
+
+ // TODO: Can we find a way to remove this @SuppressWarnings even for eclipse?
+ @SuppressWarnings("unchecked")
+ private static final Comparator NATURAL_ORDER = Ordering.natural();
+
+ @SuppressWarnings("unchecked")
+ private static final ImmutableSortedSet<Object> NATURAL_EMPTY_SET =
+ new EmptyImmutableSortedSet<Object>(NATURAL_ORDER);
+
+ @SuppressWarnings("unchecked")
+ private static <E> ImmutableSortedSet<E> emptySet() {
+ return (ImmutableSortedSet<E>) NATURAL_EMPTY_SET;
+ }
+
+ static <E> ImmutableSortedSet<E> emptySet(
+ Comparator<? super E> comparator) {
+ if (NATURAL_ORDER.equals(comparator)) {
+ return emptySet();
+ } else {
+ return new EmptyImmutableSortedSet<E>(comparator);
+ }
+ }
+
+ /**
+ * Returns the empty immutable sorted set.
+ */
+ public static <E> ImmutableSortedSet<E> of() {
+ return emptySet();
+ }
+
+ /**
+ * Returns an immutable sorted set containing a single element.
+ */
+ public static <E extends Comparable<? super E>> ImmutableSortedSet<E> of(
+ E element) {
+ Object[] array = { checkNotNull(element) };
+ return new RegularImmutableSortedSet<E>(array, Ordering.natural());
+ }
+
+ /**
+ * Returns an immutable sorted set containing the given elements sorted by
+ * their natural ordering. When multiple elements are equivalent according to
+ * {@link Comparable#compareTo}, only the first one specified is included.
+ *
+ * @throws NullPointerException if any element is null
+ */
+ @SuppressWarnings("unchecked")
+ public static <E extends Comparable<? super E>> ImmutableSortedSet<E> of(
+ E e1, E e2) {
+ return ofInternal(Ordering.natural(), e1, e2);
+ }
+
+ /**
+ * Returns an immutable sorted set containing the given elements sorted by
+ * their natural ordering. When multiple elements are equivalent according to
+ * {@link Comparable#compareTo}, only the first one specified is included.
+ *
+ * @throws NullPointerException if any element is null
+ */
+ @SuppressWarnings("unchecked")
+ public static <E extends Comparable<? super E>> ImmutableSortedSet<E> of(
+ E e1, E e2, E e3) {
+ return ofInternal(Ordering.natural(), e1, e2, e3);
+ }
+
+ /**
+ * Returns an immutable sorted set containing the given elements sorted by
+ * their natural ordering. When multiple elements are equivalent according to
+ * {@link Comparable#compareTo}, only the first one specified is included.
+ *
+ * @throws NullPointerException if any element is null
+ */
+ @SuppressWarnings("unchecked")
+ public static <E extends Comparable<? super E>> ImmutableSortedSet<E> of(
+ E e1, E e2, E e3, E e4) {
+ return ofInternal(Ordering.natural(), e1, e2, e3, e4);
+ }
+
+ /**
+ * Returns an immutable sorted set containing the given elements sorted by
+ * their natural ordering. When multiple elements are equivalent according to
+ * {@link Comparable#compareTo}, only the first one specified is included.
+ *
+ * @throws NullPointerException if any element is null
+ */
+ @SuppressWarnings("unchecked")
+ public static <E extends Comparable<? super E>> ImmutableSortedSet<E> of(
+ E e1, E e2, E e3, E e4, E e5) {
+ return ofInternal(Ordering.natural(), e1, e2, e3, e4, e5);
+ }
+
+ // TODO: Consider adding factory methods that throw an exception when given
+ // duplicate elements.
+
+ /**
+ * Returns an immutable sorted set containing the given elements sorted by
+ * their natural ordering. When multiple elements are equivalent according to
+ * {@link Comparable#compareTo}, only the first one specified is included.
+ *
+ * @throws NullPointerException if any of {@code elements} is null
+ */
+ public static <E extends Comparable<? super E>> ImmutableSortedSet<E> of(
+ E... elements) {
+ return ofInternal(Ordering.natural(), elements);
+ }
+
+ private static <E> ImmutableSortedSet<E> ofInternal(
+ Comparator<? super E> comparator, E... elements) {
+ checkNotNull(elements); // for GWT
+ switch (elements.length) {
+ case 0:
+ return emptySet(comparator);
+ default:
+ /*
+ * We can't use Platform.clone() because of GWT bug 3621. See our GWT
+ * ImmutableSortedSetTest.testOf_gwtArraycopyBug() for details. We can't
+ * use System.arraycopy() here for the same reason.
+ */
+ Object[] array = new Object[elements.length];
+ for (int i = 0; i < elements.length; i++) {
+ array[i] = checkNotNull(elements[i]);
+ }
+ sort(array, comparator);
+ array = removeDupes(array, comparator);
+ return new RegularImmutableSortedSet<E>(array, comparator);
+ }
+ }
+
+ /** Sort the array, according to the comparator. */
+ @SuppressWarnings("unchecked") // E comparator with Object array
+ private static <E> void sort(
+ Object[] array, Comparator<? super E> comparator) {
+ Arrays.sort(array, (Comparator<Object>) comparator);
+ }
+
+ /**
+ * Returns an array that removes duplicate consecutive elements, according to
+ * the provided comparator. Note that the input array is modified. This method
+ * does not support empty arrays.
+ */
+ private static <E> Object[] removeDupes(Object[] array,
+ Comparator<? super E> comparator) {
+ int size = 1;
+ for (int i = 1; i < array.length; i++) {
+ Object element = array[i];
+ if (unsafeCompare(comparator, array[size - 1], element) != 0) {
+ array[size] = element;
+ size++;
+ }
+ }
+
+ // TODO: Move to ObjectArrays?
+ if (size == array.length) {
+ return array;
+ } else {
+ Object[] copy = new Object[size];
+ System.arraycopy(array, 0, copy, 0, size);
+ return copy;
+ }
+ }
+
+ /**
+ * Returns an immutable sorted set containing the given elements sorted by
+ * their natural ordering. When multiple elements are equivalent according to
+ * {@code compareTo()}, only the first one specified is included. To create a
+ * copy of a {@code SortedSet} that preserves the comparator, call
+ * {@link #copyOfSorted} instead. This method iterates over {@code elements}
+ * at most once.
+ *
+ * <p>Note that if {@code s} is a {@code Set<String>}, then
+ * {@code ImmutableSortedSet.copyOf(s)} returns an
+ * {@code ImmutableSortedSet<String>} containing each of the strings in
+ * {@code s}, while {@code ImmutableSortedSet.of(s)} returns an
+ * {@code ImmutableSortedSet<Set<String>>} containing one element (the given
+ * set itself).
+ *
+ * <p><b>Note:</b> Despite what the method name suggests, if {@code elements}
+ * is an {@code ImmutableSortedSet}, it may be returned instead of a copy.
+ *
+ * <p>This method is not type-safe, as it may be called on elements that are
+ * not mutually comparable.
+ *
+ * @throws ClassCastException if the elements are not mutually comparable
+ * @throws NullPointerException if any of {@code elements} is null
+ */
+ public static <E> ImmutableSortedSet<E> copyOf(
+ Iterable<? extends E> elements) {
+ // Hack around K not being a subtype of Comparable.
+ // Unsafe, see ImmutableSortedSetFauxverideShim.
+ @SuppressWarnings("unchecked")
+ Ordering<E> naturalOrder = (Ordering) Ordering.<Comparable>natural();
+ return copyOfInternal(naturalOrder, elements, false);
+ }
+
+ /**
+ * Returns an immutable sorted set containing the given elements sorted by
+ * their natural ordering. When multiple elements are equivalent according to
+ * {@code compareTo()}, only the first one specified is included.
+ *
+ * <p>This method is not type-safe, as it may be called on elements that are
+ * not mutually comparable.
+ *
+ * @throws ClassCastException if the elements are not mutually comparable
+ * @throws NullPointerException if any of {@code elements} is null
+ */
+ public static <E> ImmutableSortedSet<E> copyOf(
+ Iterator<? extends E> elements) {
+ // Hack around K not being a subtype of Comparable.
+ // Unsafe, see ImmutableSortedSetFauxverideShim.
+ @SuppressWarnings("unchecked")
+ Ordering<E> naturalOrder = (Ordering) Ordering.<Comparable>natural();
+ return copyOfInternal(naturalOrder, elements);
+ }
+
+ /**
+ * Returns an immutable sorted set containing the given elements sorted by
+ * the given {@code Comparator}. When multiple elements are equivalent
+ * according to {@code compare()}, only the first one specified is
+ * included. This method iterates over {@code elements} at most once.
+ *
+ * <p><b>Note:</b> Despite what the method name suggests, if {@code elements}
+ * is an {@code ImmutableSortedSet}, it may be returned instead of a copy.
+ *
+ * @throws NullPointerException if {@code comparator} or any of
+ * {@code elements} is null
+ */
+ public static <E> ImmutableSortedSet<E> copyOf(
+ Comparator<? super E> comparator, Iterable<? extends E> elements) {
+ checkNotNull(comparator);
+ return copyOfInternal(comparator, elements, false);
+ }
+
+ /**
+ * Returns an immutable sorted set containing the given elements sorted by
+ * the given {@code Comparator}. When multiple elements are equivalent
+ * according to {@code compareTo()}, only the first one specified is
+ * included.
+ *
+ * @throws NullPointerException if {@code comparator} or any of
+ * {@code elements} is null
+ */
+ public static <E> ImmutableSortedSet<E> copyOf(
+ Comparator<? super E> comparator, Iterator<? extends E> elements) {
+ checkNotNull(comparator);
+ return copyOfInternal(comparator, elements);
+ }
+
+ /**
+ * Returns an immutable sorted set containing the elements of a sorted set,
+ * sorted by the same {@code Comparator}. That behavior differs from
+ * {@link #copyOf(Iterable)}, which always uses the natural ordering of the
+ * elements.
+ *
+ * <p><b>Note:</b> Despite what the method name suggests, if {@code sortedSet}
+ * is an {@code ImmutableSortedSet}, it may be returned instead of a copy.
+ *
+ * @throws NullPointerException if any of {@code elements} is null
+ */
+ @SuppressWarnings("unchecked")
+ public static <E> ImmutableSortedSet<E> copyOfSorted(SortedSet<E> sortedSet) {
+ Comparator<? super E> comparator = sortedSet.comparator();
+ if (comparator == null) {
+ comparator = NATURAL_ORDER;
+ }
+ return copyOfInternal(comparator, sortedSet, true);
+ }
+
+ private static <E> ImmutableSortedSet<E> copyOfInternal(
+ Comparator<? super E> comparator, Iterable<? extends E> elements,
+ boolean fromSortedSet) {
+ boolean hasSameComparator
+ = fromSortedSet || hasSameComparator(elements, comparator);
+
+ if (hasSameComparator && (elements instanceof ImmutableSortedSet)) {
+ @SuppressWarnings("unchecked")
+ ImmutableSortedSet<E> result = (ImmutableSortedSet<E>) elements;
+ if (!result.hasPartialArray()) {
+ return result;
+ }
+ }
+
+ Object[] array = newObjectArray(elements);
+ if (array.length == 0) {
+ return emptySet(comparator);
+ }
+
+ for (Object e : array) {
+ checkNotNull(e);
+ }
+ if (!hasSameComparator) {
+ sort(array, comparator);
+ array = removeDupes(array, comparator);
+ }
+ return new RegularImmutableSortedSet<E>(array, comparator);
+ }
+
+ /** Simplified version of {@link Iterables#toArray} that is GWT safe. */
+ private static <T> Object[] newObjectArray(Iterable<T> iterable) {
+ Collection<T> collection = (iterable instanceof Collection)
+ ? (Collection<T>) iterable : Lists.newArrayList(iterable);
+ Object[] array = new Object[collection.size()];
+ return collection.toArray(array);
+ }
+
+ private static <E> ImmutableSortedSet<E> copyOfInternal(
+ Comparator<? super E> comparator, Iterator<? extends E> elements) {
+ if (!elements.hasNext()) {
+ return emptySet(comparator);
+ }
+ List<E> list = Lists.newArrayList();
+ while (elements.hasNext()) {
+ list.add(checkNotNull(elements.next()));
+ }
+ Object[] array = list.toArray();
+ sort(array, comparator);
+ array = removeDupes(array, comparator);
+ return new RegularImmutableSortedSet<E>(array, comparator);
+ }
+
+ /**
+ * Returns {@code true} if {@code elements} is a {@code SortedSet} that uses
+ * {@code comparator} to order its elements. Note that equivalent comparators
+ * may still return {@code false}, if {@code equals} doesn't consider them
+ * equal. If one comparator is {@code null} and the other is
+ * {@link Ordering#natural()}, this method returns {@code true}.
+ */
+ static boolean hasSameComparator(
+ Iterable<?> elements, Comparator<?> comparator) {
+ if (elements instanceof SortedSet) {
+ SortedSet<?> sortedSet = (SortedSet<?>) elements;
+ Comparator<?> comparator2 = sortedSet.comparator();
+ return (comparator2 == null)
+ ? comparator == Ordering.natural()
+ : comparator.equals(comparator2);
+ }
+ return false;
+ }
+
+ /**
+ * Returns a builder that creates immutable sorted sets with an explicit
+ * comparator. If the comparator has a more general type than the set being
+ * generated, such as creating a {@code SortedSet<Integer>} with a
+ * {@code Comparator<Number>}, use the {@link Builder} constructor instead.
+ *
+ * @throws NullPointerException if {@code comparator} is null
+ */
+ public static <E> Builder<E> orderedBy(Comparator<E> comparator) {
+ return new Builder<E>(comparator);
+ }
+
+ /**
+ * Returns a builder that creates immutable sorted sets whose elements are
+ * ordered by the reverse of their natural ordering.
+ *
+ * <p>Note: the type parameter {@code E} extends {@code Comparable<E>} rather
+ * than {@code Comparable<? super E>} as a workaround for javac <a
+ * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6468354">bug
+ * 6468354</a>.
+ */
+ public static <E extends Comparable<E>> Builder<E> reverseOrder() {
+ return new Builder<E>(Ordering.natural().reverse());
+ }
+
+ /**
+ * Returns a builder that creates immutable sorted sets whose elements are
+ * ordered by their natural ordering. The sorted sets use {@link
+ * Ordering#natural()} as the comparator. This method provides more
+ * type-safety than {@link #builder}, as it can be called only for classes
+ * that implement {@link Comparable}.
+ *
+ * <p>Note: the type parameter {@code E} extends {@code Comparable<E>} rather
+ * than {@code Comparable<? super E>} as a workaround for javac <a
+ * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6468354">bug
+ * 6468354</a>.
+ */
+ public static <E extends Comparable<E>> Builder<E> naturalOrder() {
+ return new Builder<E>(Ordering.natural());
+ }
+
+ /**
+ * A builder for creating immutable sorted set instances, especially
+ * {@code public static final} sets ("constant sets"), with a given
+ * comparator.
+ *
+ * <p>Example:
+ * <pre>{@code
+ * public static final ImmutableSortedSet<Number> LUCKY_NUMBERS
+ * = new ImmutableSortedSet.Builder<Number>(ODDS_FIRST_COMPARATOR)
+ * .addAll(SINGLE_DIGIT_PRIMES)
+ * .add(42)
+ * .build();}</pre>
+ *
+ * <p>Builder instances can be reused - it is safe to call {@link #build}
+ * multiple times to build multiple sets in series. Each set
+ * is a superset of the set created before it.
+ */
+ public static final class Builder<E> extends ImmutableSet.Builder<E> {
+ private final Comparator<? super E> comparator;
+
+ /**
+ * Creates a new builder. The returned builder is equivalent to the builder
+ * generated by {@link ImmutableSortedSet#orderedBy}.
+ */
+ public Builder(Comparator<? super E> comparator) {
+ this.comparator = checkNotNull(comparator);
+ }
+
+ /**
+ * Adds {@code element} to the {@code ImmutableSortedSet}. If the
+ * {@code ImmutableSortedSet} already contains {@code element}, then
+ * {@code add} has no effect. (only the previously added element
+ * is retained).
+ *
+ * @param element the element to add
+ * @return this {@code Builder} object
+ * @throws NullPointerException if {@code element} is null
+ */
+ @Override public Builder<E> add(E element) {
+ super.add(element);
+ return this;
+ }
+
+ /**
+ * Adds each element of {@code elements} to the {@code ImmutableSortedSet},
+ * ignoring duplicate elements (only the first duplicate element is added).
+ *
+ * @param elements the elements to add
+ * @return this {@code Builder} object
+ * @throws NullPointerException if {@code elements} contains a null element
+ */
+ @Override public Builder<E> add(E... elements) {
+ super.add(elements);
+ return this;
+ }
+
+ /**
+ * Adds each element of {@code elements} to the {@code ImmutableSortedSet},
+ * ignoring duplicate elements (only the first duplicate element is added).
+ *
+ * @param elements the elements to add to the {@code ImmutableSortedSet}
+ * @return this {@code Builder} object
+ * @throws NullPointerException if {@code elements} contains a null element
+ */
+ @Override public Builder<E> addAll(Iterable<? extends E> elements) {
+ super.addAll(elements);
+ return this;
+ }
+
+ /**
+ * Adds each element of {@code elements} to the {@code ImmutableSortedSet},
+ * ignoring duplicate elements (only the first duplicate element is added).
+ *
+ * @param elements the elements to add to the {@code ImmutableSortedSet}
+ * @return this {@code Builder} object
+ * @throws NullPointerException if {@code elements} contains a null element
+ */
+ @Override public Builder<E> addAll(Iterator<? extends E> elements) {
+ super.addAll(elements);
+ return this;
+ }
+
+ /**
+ * Returns a newly-created {@code ImmutableSortedSet} based on the contents
+ * of the {@code Builder} and its comparator.
+ */
+ @Override public ImmutableSortedSet<E> build() {
+ return copyOfInternal(comparator, contents.iterator());
+ }
+ }
+
+ int unsafeCompare(Object a, Object b) {
+ return unsafeCompare(comparator, a, b);
+ }
+
+ static int unsafeCompare(
+ Comparator<?> comparator, Object a, Object b) {
+ // Pretend the comparator can compare anything. If it turns out it can't
+ // compare a and b, we should get a CCE on the subsequent line. Only methods
+ // that are spec'd to throw CCE should call this.
+ @SuppressWarnings("unchecked")
+ Comparator<Object> unsafeComparator = (Comparator<Object>) comparator;
+ return unsafeComparator.compare(a, b);
+ }
+
+ final transient Comparator<? super E> comparator;
+
+ ImmutableSortedSet(Comparator<? super E> comparator) {
+ this.comparator = comparator;
+ }
+
+ /**
+ * Returns the comparator that orders the elements, which is
+ * {@link Ordering#natural()} when the natural ordering of the
+ * elements is used. Note that its behavior is not consistent with
+ * {@link SortedSet#comparator()}, which returns {@code null} to indicate
+ * natural ordering.
+ */
+ public Comparator<? super E> comparator() {
+ return comparator;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>This method returns a serializable {@code ImmutableSortedSet}.
+ *
+ * <p>The {@link SortedSet#headSet} documentation states that a subset of a
+ * subset throws an {@link IllegalArgumentException} if passed a
+ * {@code toElement} greater than an earlier {@code toElement}. However, this
+ * method doesn't throw an exception in that situation, but instead keeps the
+ * original {@code toElement}.
+ */
+ public ImmutableSortedSet<E> headSet(E toElement) {
+ return headSetImpl(checkNotNull(toElement));
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>This method returns a serializable {@code ImmutableSortedSet}.
+ *
+ * <p>The {@link SortedSet#subSet} documentation states that a subset of a
+ * subset throws an {@link IllegalArgumentException} if passed a
+ * {@code fromElement} smaller than an earlier {@code fromElement}. However,
+ * this method doesn't throw an exception in that situation, but instead keeps
+ * the original {@code fromElement}. Similarly, this method keeps the
+ * original {@code toElement}, instead of throwing an exception, if passed a
+ * {@code toElement} greater than an earlier {@code toElement}.
+ */
+ public ImmutableSortedSet<E> subSet(E fromElement, E toElement) {
+ checkNotNull(fromElement);
+ checkNotNull(toElement);
+ checkArgument(comparator.compare(fromElement, toElement) <= 0);
+ return subSetImpl(fromElement, toElement);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>This method returns a serializable {@code ImmutableSortedSet}.
+ *
+ * <p>The {@link SortedSet#tailSet} documentation states that a subset of a
+ * subset throws an {@link IllegalArgumentException} if passed a
+ * {@code fromElement} smaller than an earlier {@code fromElement}. However,
+ * this method doesn't throw an exception in that situation, but instead keeps
+ * the original {@code fromElement}.
+ */
+ public ImmutableSortedSet<E> tailSet(E fromElement) {
+ return tailSetImpl(checkNotNull(fromElement));
+ }
+
+ /*
+ * These methods perform most headSet, subSet, and tailSet logic, besides
+ * parameter validation.
+ */
+ abstract ImmutableSortedSet<E> headSetImpl(E toElement);
+ abstract ImmutableSortedSet<E> subSetImpl(E fromElement, E toElement);
+ abstract ImmutableSortedSet<E> tailSetImpl(E fromElement);
+
+ /** Returns whether the elements are stored in a subset of a larger array. */
+ abstract boolean hasPartialArray();
+
+ /*
+ * This class is used to serialize all ImmutableSortedSet instances,
+ * regardless of implementation type. It captures their "logical contents"
+ * only. This is necessary to ensure that the existence of a particular
+ * implementation type is an implementation detail.
+ */
+ private static class SerializedForm<E> implements Serializable {
+ final Comparator<? super E> comparator;
+ final Object[] elements;
+
+ public SerializedForm(Comparator<? super E> comparator, Object[] elements) {
+ this.comparator = comparator;
+ this.elements = elements;
+ }
+
+ @SuppressWarnings("unchecked")
+ Object readResolve() {
+ return new Builder<E>(comparator).add((E[]) elements).build();
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ private void readObject(ObjectInputStream stream)
+ throws InvalidObjectException {
+ throw new InvalidObjectException("Use SerializedForm");
+ }
+
+ @Override Object writeReplace() {
+ return new SerializedForm<E>(comparator, toArray());
+ }
+}
diff --git a/src/com/google/common/collect/ImmutableSortedSetFauxverideShim.java b/src/com/google/common/collect/ImmutableSortedSetFauxverideShim.java
new file mode 100644
index 0000000..3b42eb5
--- /dev/null
+++ b/src/com/google/common/collect/ImmutableSortedSetFauxverideShim.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * "Overrides" the {@link ImmutableSet} static methods that lack
+ * {@link ImmutableSortedSet} equivalents with deprecated, exception-throwing
+ * versions. This prevents accidents like the following:<pre> {@code
+ *
+ * List<Object> objects = ...;
+ * // Sort them:
+ * Set<Object> sorted = ImmutableSortedSet.copyOf(objects);
+ * // BAD CODE! The returned set is actually an unsorted ImmutableSet!}</pre>
+ *
+ * <p>While we could put the overrides in {@link ImmutableSortedSet} itself, it
+ * seems clearer to separate these "do not call" methods from those intended for
+ * normal use.
+ *
+ * @author Chris Povirk
+ */
+@GwtCompatible
+abstract class ImmutableSortedSetFauxverideShim<E> extends ImmutableSet<E> {
+ /**
+ * Not supported. Use {@link ImmutableSortedSet#naturalOrder}, which offers
+ * better type-safety, instead. This method exists only to hide
+ * {@link ImmutableSet#builder} from consumers of {@code ImmutableSortedSet}.
+ *
+ * @throws UnsupportedOperationException always
+ * @deprecated Use {@link ImmutableSortedSet#naturalOrder}, which offers
+ * better type-safety.
+ */
+ @Deprecated public static <E> ImmutableSortedSet.Builder<E> builder() {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Not supported. <b>You are attempting to create a set that may contain a
+ * non-{@code Comparable} element.</b> Proper calls will resolve to the
+ * version in {@code ImmutableSortedSet}, not this dummy version.
+ *
+ * @throws UnsupportedOperationException always
+ * @deprecated <b>Pass a parameter of type {@code Comparable} to use {@link
+ * ImmutableSortedSet#of(Comparable)}.</b>
+ */
+ @Deprecated public static <E> ImmutableSortedSet<E> of(E element) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Not supported. <b>You are attempting to create a set that may contain a
+ * non-{@code Comparable} element.</b> Proper calls will resolve to the
+ * version in {@code ImmutableSortedSet}, not this dummy version.
+ *
+ * @throws UnsupportedOperationException always
+ * @deprecated <b>Pass the parameters of type {@code Comparable} to use {@link
+ * ImmutableSortedSet#of(Comparable, Comparable)}.</b>
+ */
+ @Deprecated public static <E> ImmutableSortedSet<E> of(E e1, E e2) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Not supported. <b>You are attempting to create a set that may contain a
+ * non-{@code Comparable} element.</b> Proper calls will resolve to the
+ * version in {@code ImmutableSortedSet}, not this dummy version.
+ *
+ * @throws UnsupportedOperationException always
+ * @deprecated <b>Pass the parameters of type {@code Comparable} to use {@link
+ * ImmutableSortedSet#of(Comparable, Comparable, Comparable)}.</b>
+ */
+ @Deprecated public static <E> ImmutableSortedSet<E> of(E e1, E e2, E e3) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Not supported. <b>You are attempting to create a set that may contain a
+ * non-{@code Comparable} element.</b> Proper calls will resolve to the
+ * version in {@code ImmutableSortedSet}, not this dummy version.
+ *
+ * @throws UnsupportedOperationException always
+ * @deprecated <b>Pass the parameters of type {@code Comparable} to use {@link
+ * ImmutableSortedSet#of(Comparable, Comparable, Comparable, Comparable)}.
+ * </b>
+ */
+ @Deprecated public static <E> ImmutableSortedSet<E> of(
+ E e1, E e2, E e3, E e4) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Not supported. <b>You are attempting to create a set that may contain a
+ * non-{@code Comparable} element.</b> Proper calls will resolve to the
+ * version in {@code ImmutableSortedSet}, not this dummy version.
+ *
+ * @throws UnsupportedOperationException always
+ * @deprecated <b>Pass the parameters of type {@code Comparable} to use {@link
+ * ImmutableSortedSet#of(
+ * Comparable, Comparable, Comparable, Comparable, Comparable)}. </b>
+ */
+ @Deprecated public static <E> ImmutableSortedSet<E> of(
+ E e1, E e2, E e3, E e4, E e5) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Not supported. <b>You are attempting to create a set that may contain
+ * non-{@code Comparable} elements.</b> Proper calls will resolve to the
+ * version in {@code ImmutableSortedSet}, not this dummy version.
+ *
+ * @throws UnsupportedOperationException always
+ * @deprecated <b>Pass parameters of type {@code Comparable} to use {@link
+ * ImmutableSortedSet#of(Comparable[])}.</b>
+ */
+ @Deprecated public static <E> ImmutableSortedSet<E> of(E... elements) {
+ throw new UnsupportedOperationException();
+ }
+
+ /*
+ * We would like to include an unsupported "<E> copyOf(Iterable<E>)" here,
+ * providing only the properly typed
+ * "<E extends Comparable<E>> copyOf(Iterable<E>)" in ImmutableSortedSet (and
+ * likewise for the Iterator equivalent). However, due to a change in Sun's
+ * interpretation of the JLS (as described at
+ * http://bugs.sun.com/view_bug.do?bug_id=6182950), the OpenJDK 7 compiler
+ * available as of this writing rejects our attempts. To maintain
+ * compatibility with that version and with any other compilers that interpret
+ * the JLS similarly, there is no definition of copyOf() here, and the
+ * definition in ImmutableSortedSet matches that in ImmutableSet.
+ *
+ * The result is that ImmutableSortedSet.copyOf() may be called on
+ * non-Comparable elements. We have not discovered a better solution. In
+ * retrospect, the static factory methods should have gone in a separate class
+ * so that ImmutableSortedSet wouldn't "inherit" too-permissive factory
+ * methods from ImmutableSet.
+ */
+}
diff --git a/src/com/google/common/collect/Iterables.java b/src/com/google/common/collect/Iterables.java
new file mode 100644
index 0000000..18db775
--- /dev/null
+++ b/src/com/google/common/collect/Iterables.java
@@ -0,0 +1,717 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Objects;
+import com.google.common.base.Preconditions;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.base.Predicate;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.NoSuchElementException;
+import java.util.RandomAccess;
+import java.util.Set;
+import java.util.SortedSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * This class contains static utility methods that operate on or return objects
+ * of type {@code Iterable}. Except as noted, each method has a corresponding
+ * {@link Iterator}-based method in the {@link Iterators} class.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ */
+@GwtCompatible
+public final class Iterables {
+ private Iterables() {}
+
+ /** Returns an unmodifiable view of {@code iterable}. */
+ public static <T> Iterable<T> unmodifiableIterable(final Iterable<T> iterable)
+ {
+ checkNotNull(iterable);
+ return new Iterable<T>() {
+ public Iterator<T> iterator() {
+ return Iterators.unmodifiableIterator(iterable.iterator());
+ }
+ @Override public String toString() {
+ return iterable.toString();
+ }
+ // no equals and hashCode; it would break the contract!
+ };
+ }
+
+ /**
+ * Returns the number of elements in {@code iterable}.
+ */
+ public static int size(Iterable<?> iterable) {
+ return (iterable instanceof Collection)
+ ? ((Collection<?>) iterable).size()
+ : Iterators.size(iterable.iterator());
+ }
+
+ /**
+ * Returns {@code true} if {@code iterable} contains {@code element}; that is,
+ * any object for while {@code equals(element)} is true.
+ */
+ public static boolean contains(Iterable<?> iterable, @Nullable Object element)
+ {
+ if (iterable instanceof Collection) {
+ Collection<?> collection = (Collection<?>) iterable;
+ try {
+ return collection.contains(element);
+ } catch (NullPointerException e) {
+ return false;
+ } catch (ClassCastException e) {
+ return false;
+ }
+ }
+ return Iterators.contains(iterable.iterator(), element);
+ }
+
+ /**
+ * Removes, from an iterable, every element that belongs to the provided
+ * collection.
+ *
+ * <p>This method calls {@link Collection#removeAll} if {@code iterable} is a
+ * collection, and {@link Iterators#removeAll} otherwise.
+ *
+ * @param removeFrom the iterable to (potentially) remove elements from
+ * @param elementsToRemove the elements to remove
+ * @return {@code true} if any elements are removed from {@code iterable}
+ */
+ public static boolean removeAll(
+ Iterable<?> removeFrom, Collection<?> elementsToRemove) {
+ return (removeFrom instanceof Collection)
+ ? ((Collection<?>) removeFrom).removeAll(checkNotNull(elementsToRemove))
+ : Iterators.removeAll(removeFrom.iterator(), elementsToRemove);
+ }
+
+ /**
+ * Removes, from an iterable, every element that does not belong to the
+ * provided collection.
+ *
+ * <p>This method calls {@link Collection#retainAll} if {@code iterable} is a
+ * collection, and {@link Iterators#retainAll} otherwise.
+ *
+ * @param removeFrom the iterable to (potentially) remove elements from
+ * @param elementsToRetain the elements to retain
+ * @return {@code true} if any elements are removed from {@code iterable}
+ */
+ public static boolean retainAll(
+ Iterable<?> removeFrom, Collection<?> elementsToRetain) {
+ return (removeFrom instanceof Collection)
+ ? ((Collection<?>) removeFrom).retainAll(checkNotNull(elementsToRetain))
+ : Iterators.retainAll(removeFrom.iterator(), elementsToRetain);
+ }
+
+ /**
+ * Removes, from an iterable, every element that satisfies the provided
+ * predicate.
+ *
+ * @param removeFrom the iterable to (potentially) remove elements from
+ * @param predicate a predicate that determines whether an element should
+ * be removed
+ * @return {@code true} if any elements were removed from the iterable
+ *
+ * @throws UnsupportedOperationException if the iterable does not support
+ * {@code remove()}.
+ */
+ static <T> boolean removeIf(
+ Iterable<T> removeFrom, Predicate<? super T> predicate) {
+ if (removeFrom instanceof RandomAccess && removeFrom instanceof List) {
+ return removeIfFromRandomAccessList(
+ (List<T>) removeFrom, checkNotNull(predicate));
+ }
+ return Iterators.removeIf(removeFrom.iterator(), predicate);
+ }
+
+ private static <T> boolean removeIfFromRandomAccessList(
+ List<T> list, Predicate<? super T> predicate) {
+ int from = 0;
+ int to = 0;
+
+ for (; from < list.size(); from++) {
+ T element = list.get(from);
+ if (!predicate.apply(element)) {
+ if (from > to) {
+ list.set(to, element);
+ }
+ to++;
+ }
+ }
+
+ // Clear the tail of any remaining items
+ // Note: hand-written GWT-compatible version of
+ // list.subList(to, list.size()).clear();
+ ListIterator<T> iter = list.listIterator(list.size());
+ for (int idx = from - to; idx > 0; idx--) {
+ iter.previous();
+ iter.remove();
+ }
+
+ return from != to;
+ }
+
+ /**
+ * Determines whether two iterables contain equal elements in the same order.
+ * More specifically, this method returns {@code true} if {@code iterable1}
+ * and {@code iterable2} contain the same number of elements and every element
+ * of {@code iterable1} is equal to the corresponding element of
+ * {@code iterable2}.
+ */
+ public static boolean elementsEqual(
+ Iterable<?> iterable1, Iterable<?> iterable2) {
+ return Iterators.elementsEqual(iterable1.iterator(), iterable2.iterator());
+ }
+
+ /**
+ * Returns a string representation of {@code iterable}, with the format
+ * {@code [e1, e2, ..., en]}.
+ */
+ public static String toString(Iterable<?> iterable) {
+ return Iterators.toString(iterable.iterator());
+ }
+
+ /**
+ * Returns the single element contained in {@code iterable}.
+ *
+ * @throws NoSuchElementException if the iterable is empty
+ * @throws IllegalArgumentException if the iterable contains multiple
+ * elements
+ */
+ public static <T> T getOnlyElement(Iterable<T> iterable) {
+ return Iterators.getOnlyElement(iterable.iterator());
+ }
+
+ /**
+ * Returns the single element contained in {@code iterable}, or {@code
+ * defaultValue} if the iterable is empty.
+ *
+ * @throws IllegalArgumentException if the iterator contains multiple
+ * elements
+ */
+ public static <T> T getOnlyElement(
+ Iterable<T> iterable, @Nullable T defaultValue) {
+ return Iterators.getOnlyElement(iterable.iterator(), defaultValue);
+ }
+
+ /**
+ * Copies an iterable's elements into an array.
+ *
+ * @param iterable the iterable to copy
+ * @param type the type of the elements
+ * @return a newly-allocated array into which all the elements of the iterable
+ * have been copied
+ */
+ @GwtIncompatible("Array.newInstance(Class, int)")
+ public static <T> T[] toArray(Iterable<? extends T> iterable, Class<T> type) {
+ @SuppressWarnings("unchecked") // bugs.sun.com/view_bug.do?bug_id=6558557
+ Collection<? extends T> collection = (iterable instanceof Collection)
+ ? (Collection<? extends T>) iterable
+ : Lists.newArrayList(iterable);
+ T[] array = ObjectArrays.newArray(type, collection.size());
+ return collection.toArray(array);
+ }
+
+ /**
+ * Adds all elements in {@code iterable} to {@code collection}.
+ *
+ * @return {@code true} if {@code collection} was modified as a result of this
+ * operation.
+ */
+ public static <T> boolean addAll(
+ Collection<T> addTo, Iterable<? extends T> elementsToAdd) {
+ if (elementsToAdd instanceof Collection) {
+ @SuppressWarnings("unchecked")
+ Collection<? extends T> c = (Collection<? extends T>) elementsToAdd;
+ return addTo.addAll(c);
+ }
+ return Iterators.addAll(addTo, elementsToAdd.iterator());
+ }
+
+ /**
+ * Returns the number of elements in the specified iterable that equal the
+ * specified object.
+ *
+ * @see Collections#frequency
+ */
+ public static int frequency(Iterable<?> iterable, @Nullable Object element) {
+ if ((iterable instanceof Multiset)) {
+ return ((Multiset<?>) iterable).count(element);
+ }
+ if ((iterable instanceof Set)) {
+ return ((Set<?>) iterable).contains(element) ? 1 : 0;
+ }
+ return Iterators.frequency(iterable.iterator(), element);
+ }
+
+ /**
+ * Returns an iterable whose iterators cycle indefinitely over the elements of
+ * {@code iterable}.
+ *
+ * <p>That iterator supports {@code remove()} if {@code iterable.iterator()}
+ * does. After {@code remove()} is called, subsequent cycles omit the removed
+ * element, which is no longer in {@code iterable}. The iterator's
+ * {@code hasNext()} method returns {@code true} until {@code iterable} is
+ * empty.
+ *
+ * <p><b>Warning:</b> Typical uses of the resulting iterator may produce an
+ * infinite loop. You should use an explicit {@code break} or be certain that
+ * you will eventually remove all the elements.
+ *
+ * <p>To cycle over the iterable {@code n} times, use the following:
+ * {@code Iterables.concat(Collections.nCopies(n, iterable))}
+ */
+ public static <T> Iterable<T> cycle(final Iterable<T> iterable) {
+ checkNotNull(iterable);
+ return new Iterable<T>() {
+ public Iterator<T> iterator() {
+ return Iterators.cycle(iterable);
+ }
+ @Override public String toString() {
+ return iterable.toString() + " (cycled)";
+ }
+ };
+ }
+
+ /**
+ * Returns an iterable whose iterators cycle indefinitely over the provided
+ * elements.
+ *
+ * <p>After {@code remove} is invoked on a generated iterator, the removed
+ * element will no longer appear in either that iterator or any other iterator
+ * created from the same source iterable. That is, this method behaves exactly
+ * as {@code Iterables.cycle(Lists.newArrayList(elements))}. The iterator's
+ * {@code hasNext} method returns {@code true} until all of the original
+ * elements have been removed.
+ *
+ * <p><b>Warning:</b> Typical uses of the resulting iterator may produce an
+ * infinite loop. You should use an explicit {@code break} or be certain that
+ * you will eventually remove all the elements.
+ *
+ * <p>To cycle over the elements {@code n} times, use the following:
+ * {@code Iterables.concat(Collections.nCopies(n, Arrays.asList(elements)))}
+ */
+ public static <T> Iterable<T> cycle(T... elements) {
+ return cycle(Lists.newArrayList(elements));
+ }
+
+ /**
+ * Combines two iterables into a single iterable. The returned iterable has an
+ * iterator that traverses the elements in {@code a}, followed by the elements
+ * in {@code b}. The source iterators are not polled until necessary.
+ *
+ * <p>The returned iterable's iterator supports {@code remove()} when the
+ * corresponding input iterator supports it.
+ */
+ @SuppressWarnings("unchecked")
+ public static <T> Iterable<T> concat(
+ Iterable<? extends T> a, Iterable<? extends T> b) {
+ checkNotNull(a);
+ checkNotNull(b);
+ return concat(Arrays.asList(a, b));
+ }
+
+ /**
+ * Combines three iterables into a single iterable. The returned iterable has
+ * an iterator that traverses the elements in {@code a}, followed by the
+ * elements in {@code b}, followed by the elements in {@code c}. The source
+ * iterators are not polled until necessary.
+ *
+ * <p>The returned iterable's iterator supports {@code remove()} when the
+ * corresponding input iterator supports it.
+ */
+ @SuppressWarnings("unchecked")
+ public static <T> Iterable<T> concat(Iterable<? extends T> a,
+ Iterable<? extends T> b, Iterable<? extends T> c) {
+ checkNotNull(a);
+ checkNotNull(b);
+ checkNotNull(c);
+ return concat(Arrays.asList(a, b, c));
+ }
+
+ /**
+ * Combines four iterables into a single iterable. The returned iterable has
+ * an iterator that traverses the elements in {@code a}, followed by the
+ * elements in {@code b}, followed by the elements in {@code c}, followed by
+ * the elements in {@code d}. The source iterators are not polled until
+ * necessary.
+ *
+ * <p>The returned iterable's iterator supports {@code remove()} when the
+ * corresponding input iterator supports it.
+ */
+ @SuppressWarnings("unchecked")
+ public static <T> Iterable<T> concat(Iterable<? extends T> a,
+ Iterable<? extends T> b, Iterable<? extends T> c,
+ Iterable<? extends T> d) {
+ checkNotNull(a);
+ checkNotNull(b);
+ checkNotNull(c);
+ checkNotNull(d);
+ return concat(Arrays.asList(a, b, c, d));
+ }
+
+ /**
+ * Combines multiple iterables into a single iterable. The returned iterable
+ * has an iterator that traverses the elements of each iterable in
+ * {@code inputs}. The input iterators are not polled until necessary.
+ *
+ * <p>The returned iterable's iterator supports {@code remove()} when the
+ * corresponding input iterator supports it.
+ *
+ * @throws NullPointerException if any of the provided iterables is null
+ */
+ public static <T> Iterable<T> concat(Iterable<? extends T>... inputs) {
+ return concat(ImmutableList.of(inputs));
+ }
+
+ /**
+ * Combines multiple iterables into a single iterable. The returned iterable
+ * has an iterator that traverses the elements of each iterable in
+ * {@code inputs}. The input iterators are not polled until necessary.
+ *
+ * <p>The returned iterable's iterator supports {@code remove()} when the
+ * corresponding input iterator supports it. The methods of the returned
+ * iterable may throw {@code NullPointerException} if any of the input
+ * iterators are null.
+ */
+ public static <T> Iterable<T> concat(
+ Iterable<? extends Iterable<? extends T>> inputs) {
+ /*
+ * Hint: if you let A represent Iterable<? extends T> and B represent
+ * Iterator<? extends T>, then this Function would look simply like:
+ *
+ * Function<A, B> function = new Function<A, B> {
+ * public B apply(A from) {
+ * return from.iterator();
+ * }
+ * }
+ *
+ * TODO: there may be a better way to do this.
+ */
+
+ Function<Iterable<? extends T>, Iterator<? extends T>> function
+ = new Function<Iterable<? extends T>, Iterator<? extends T>>() {
+ public Iterator<? extends T> apply(Iterable<? extends T> from) {
+ return from.iterator();
+ }
+ };
+ final Iterable<Iterator<? extends T>> iterators
+ = transform(inputs, function);
+ return new IterableWithToString<T>() {
+ public Iterator<T> iterator() {
+ return Iterators.concat(iterators.iterator());
+ }
+ };
+ }
+
+ /**
+ * Divides an iterable into unmodifiable sublists of the given size (the final
+ * iterable may be smaller). For example, partitioning an iterable containing
+ * {@code [a, b, c, d, e]} with a partition size of 3 yields {@code
+ * [[a, b, c], [d, e]]} -- an outer iterable containing two inner lists of
+ * three and two elements, all in the original order.
+ *
+ * <p>Iterators returned by the returned iterable do not support the {@link
+ * Iterator#remove()} method. The returned lists implement {@link
+ * RandomAccess}, whether or not the input list does.
+ *
+ * <p><b>Note:</b> if {@code iterable} is a {@link List}, use {@link
+ * Lists#partition(List, int)} instead.
+ *
+ * @param iterable the iterable to return a partitioned view of
+ * @param size the desired size of each partition (the last may be smaller)
+ * @return an iterable of unmodifiable lists containing the elements of {@code
+ * iterable} divided into partitions
+ * @throws IllegalArgumentException if {@code size} is nonpositive
+ */
+ public static <T> Iterable<List<T>> partition(
+ final Iterable<T> iterable, final int size) {
+ checkNotNull(iterable);
+ checkArgument(size > 0);
+ return new IterableWithToString<List<T>>() {
+ public Iterator<List<T>> iterator() {
+ return Iterators.partition(iterable.iterator(), size);
+ }
+ };
+ }
+
+ /**
+ * Divides an iterable into unmodifiable sublists of the given size, padding
+ * the final iterable with null values if necessary. For example, partitioning
+ * an iterable containing {@code [a, b, c, d, e]} with a partition size of 3
+ * yields {@code [[a, b, c], [d, e, null]]} -- an outer iterable containing
+ * two inner lists of three elements each, all in the original order.
+ *
+ * <p>Iterators returned by the returned iterable do not support the {@link
+ * Iterator#remove()} method.
+ *
+ * @param iterable the iterable to return a partitioned view of
+ * @param size the desired size of each partition
+ * @return an iterable of unmodifiable lists containing the elements of {@code
+ * iterable} divided into partitions (the final iterable may have
+ * trailing null elements)
+ * @throws IllegalArgumentException if {@code size} is nonpositive
+ */
+ public static <T> Iterable<List<T>> paddedPartition(
+ final Iterable<T> iterable, final int size) {
+ checkNotNull(iterable);
+ checkArgument(size > 0);
+ return new IterableWithToString<List<T>>() {
+ public Iterator<List<T>> iterator() {
+ return Iterators.paddedPartition(iterable.iterator(), size);
+ }
+ };
+ }
+
+ /**
+ * Returns the elements of {@code unfiltered} that satisfy a predicate. The
+ * resulting iterable's iterator does not support {@code remove()}.
+ */
+ public static <T> Iterable<T> filter(
+ final Iterable<T> unfiltered, final Predicate<? super T> predicate) {
+ checkNotNull(unfiltered);
+ checkNotNull(predicate);
+ return new IterableWithToString<T>() {
+ public Iterator<T> iterator() {
+ return Iterators.filter(unfiltered.iterator(), predicate);
+ }
+ };
+ }
+
+ /**
+ * Returns all instances of class {@code type} in {@code unfiltered}. The
+ * returned iterable has elements whose class is {@code type} or a subclass of
+ * {@code type}. The returned iterable's iterator does not support
+ * {@code remove()}.
+ *
+ * @param unfiltered an iterable containing objects of any type
+ * @param type the type of elements desired
+ * @return an unmodifiable iterable containing all elements of the original
+ * iterable that were of the requested type
+ */
+ @GwtIncompatible("Class.isInstance")
+ public static <T> Iterable<T> filter(
+ final Iterable<?> unfiltered, final Class<T> type) {
+ checkNotNull(unfiltered);
+ checkNotNull(type);
+ return new IterableWithToString<T>() {
+ public Iterator<T> iterator() {
+ return Iterators.filter(unfiltered.iterator(), type);
+ }
+ };
+ }
+
+ /**
+ * Returns {@code true} if one or more elements in {@code iterable} satisfy
+ * the predicate.
+ */
+ public static <T> boolean any(
+ Iterable<T> iterable, Predicate<? super T> predicate) {
+ return Iterators.any(iterable.iterator(), predicate);
+ }
+
+ /**
+ * Returns {@code true} if every element in {@code iterable} satisfies the
+ * predicate. If {@code iterable} is empty, {@code true} is returned.
+ */
+ public static <T> boolean all(
+ Iterable<T> iterable, Predicate<? super T> predicate) {
+ return Iterators.all(iterable.iterator(), predicate);
+ }
+
+ /**
+ * Returns the first element in {@code iterable} that satisfies the given
+ * predicate.
+ *
+ * @throws NoSuchElementException if no element in {@code iterable} matches
+ * the given predicate
+ */
+ public static <T> T find(Iterable<T> iterable,
+ Predicate<? super T> predicate) {
+ return Iterators.find(iterable.iterator(), predicate);
+ }
+
+ /**
+ * Returns an iterable that applies {@code function} to each element of {@code
+ * fromIterable}.
+ *
+ * <p>The returned iterable's iterator supports {@code remove()} if the
+ * provided iterator does. After a successful {@code remove()} call,
+ * {@code fromIterable} no longer contains the corresponding element.
+ */
+ public static <F, T> Iterable<T> transform(final Iterable<F> fromIterable,
+ final Function<? super F, ? extends T> function) {
+ checkNotNull(fromIterable);
+ checkNotNull(function);
+ return new IterableWithToString<T>() {
+ public Iterator<T> iterator() {
+ return Iterators.transform(fromIterable.iterator(), function);
+ }
+ };
+ }
+
+ /**
+ * Returns the element at the specified position in an iterable.
+ *
+ * @param position position of the element to return
+ * @return the element at the specified position in {@code iterable}
+ * @throws IndexOutOfBoundsException if {@code position} is negative or
+ * greater than or equal to the size of {@code iterable}
+ */
+ public static <T> T get(Iterable<T> iterable, int position) {
+ checkNotNull(iterable);
+ if (iterable instanceof List) {
+ return ((List<T>) iterable).get(position);
+ }
+
+ if (iterable instanceof Collection) {
+ // Can check both ends
+ Collection<T> collection = (Collection<T>) iterable;
+ Preconditions.checkElementIndex(position, collection.size());
+ } else {
+ // Can only check the lower end
+ if (position < 0) {
+ throw new IndexOutOfBoundsException(
+ "position cannot be negative: " + position);
+ }
+ }
+ return Iterators.get(iterable.iterator(), position);
+ }
+
+ /**
+ * Returns the last element of {@code iterable}.
+ *
+ * @return the last element of {@code iterable}
+ * @throws NoSuchElementException if the iterable has no elements
+ */
+ public static <T> T getLast(Iterable<T> iterable) {
+ if (iterable instanceof List) {
+ List<T> list = (List<T>) iterable;
+ // TODO: Support a concurrent list whose size changes while this method
+ // is running.
+ if (list.isEmpty()) {
+ throw new NoSuchElementException();
+ }
+ return list.get(list.size() - 1);
+ }
+
+ if (iterable instanceof SortedSet) {
+ SortedSet<T> sortedSet = (SortedSet<T>) iterable;
+ return sortedSet.last();
+ }
+
+ return Iterators.getLast(iterable.iterator());
+ }
+
+ // Methods only in Iterables, not in Iterators
+
+ /**
+ * Adapts a list to an iterable with reversed iteration order. It is
+ * especially useful in foreach-style loops: <pre class="code"> {@code
+ *
+ * List<String> mylist = ...
+ * for (String str : Iterables.reverse(mylist)) {
+ * ...
+ * }}</pre>
+ *
+ * There is no corresponding method in {@link Iterators}, since {@link
+ * Iterable#iterator} can simply be invoked on the result of calling this
+ * method.
+ *
+ * @return an iterable with the same elements as the list, in reverse
+ */
+ public static <T> Iterable<T> reverse(final List<T> list) {
+ checkNotNull(list);
+ return new IterableWithToString<T>() {
+ public Iterator<T> iterator() {
+ final ListIterator<T> listIter = list.listIterator(list.size());
+ return new Iterator<T>() {
+ public boolean hasNext() {
+ return listIter.hasPrevious();
+ }
+ public T next() {
+ return listIter.previous();
+ }
+ public void remove() {
+ listIter.remove();
+ }
+ };
+ }
+ };
+ }
+
+ /**
+ * Determines if the given iterable contains no elements.
+ *
+ * <p>There is no precise {@link Iterator} equivalent to this method, since
+ * one can only ask an iterator whether it has any elements <i>remaining</i>
+ * (which one does using {@link Iterator#hasNext}).
+ *
+ * @return {@code true} if the iterable contains no elements
+ */
+ public static <T> boolean isEmpty(Iterable<T> iterable) {
+ return !iterable.iterator().hasNext();
+ }
+
+ /**
+ * Removes the specified element from the specified iterable.
+ *
+ * <p>This method iterates over the iterable, checking each element returned
+ * by the iterator in turn to see if it equals the object {@code o}. If they
+ * are equal, it is removed from the iterable with the iterator's
+ * {@code remove} method. At most one element is removed, even if the iterable
+ * contains multiple members that equal {@code o}.
+ *
+ * <p><b>Warning</b>: Do not use this method for a collection, such as a
+ * {@link HashSet}, that has a fast {@code remove} method.
+ *
+ * @param iterable the iterable from which to remove
+ * @param o an element to remove from the collection
+ * @return {@code true} if the iterable changed as a result
+ * @throws UnsupportedOperationException if the iterator does not support the
+ * {@code remove} method and the iterable contains the object
+ */
+ static boolean remove(Iterable<?> iterable, @Nullable Object o) {
+ Iterator<?> i = iterable.iterator();
+ while (i.hasNext()) {
+ if (Objects.equal(i.next(), o)) {
+ i.remove();
+ return true;
+ }
+ }
+ return false;
+ }
+
+ abstract static class IterableWithToString<E> implements Iterable<E> {
+ @Override public String toString() {
+ return Iterables.toString(this);
+ }
+ }
+}
diff --git a/src/com/google/common/collect/Iterators.java b/src/com/google/common/collect/Iterators.java
new file mode 100644
index 0000000..cd4baef
--- /dev/null
+++ b/src/com/google/common/collect/Iterators.java
@@ -0,0 +1,976 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Objects;
+import com.google.common.base.Preconditions;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+import javax.annotation.Nullable;
+
+/**
+ * This class contains static utility methods that operate on or return objects
+ * of type {@link Iterator}. Except as noted, each method has a corresponding
+ * {@link Iterable}-based method in the {@link Iterables} class.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ */
+@GwtCompatible
+public final class Iterators {
+ private Iterators() {}
+
+ static final UnmodifiableIterator<Object> EMPTY_ITERATOR
+ = new UnmodifiableIterator<Object>() {
+ public boolean hasNext() {
+ return false;
+ }
+ public Object next() {
+ throw new NoSuchElementException();
+ }
+ };
+
+ /**
+ * Returns the empty iterator.
+ *
+ * <p>The {@link Iterable} equivalent of this method is {@link
+ * Collections#emptySet}.
+ */
+ // Casting to any type is safe since there are no actual elements.
+ @SuppressWarnings("unchecked")
+ public static <T> UnmodifiableIterator<T> emptyIterator() {
+ return (UnmodifiableIterator<T>) EMPTY_ITERATOR;
+ }
+
+ private static final Iterator<Object> EMPTY_MODIFIABLE_ITERATOR =
+ new Iterator<Object>() {
+ /*@Override*/ public boolean hasNext() {
+ return false;
+ }
+
+ /*@Override*/ public Object next() {
+ throw new NoSuchElementException();
+ }
+
+ /*@Override*/ public void remove() {
+ throw new IllegalStateException();
+ }
+ };
+
+ /**
+ * Returns the empty {@code Iterator} that throws
+ * {@link IllegalStateException} instead of
+ * {@link UnsupportedOperationException} on a call to
+ * {@link Iterator#remove()}.
+ */
+ // Casting to any type is safe since there are no actual elements.
+ @SuppressWarnings("unchecked")
+ static <T> Iterator<T> emptyModifiableIterator() {
+ return (Iterator<T>) EMPTY_MODIFIABLE_ITERATOR;
+ }
+
+ /** Returns an unmodifiable view of {@code iterator}. */
+ public static <T> UnmodifiableIterator<T> unmodifiableIterator(
+ final Iterator<T> iterator) {
+ checkNotNull(iterator);
+ return new UnmodifiableIterator<T>() {
+ public boolean hasNext() {
+ return iterator.hasNext();
+ }
+ public T next() {
+ return iterator.next();
+ }
+ };
+ }
+
+ /**
+ * Returns the number of elements remaining in {@code iterator}. The iterator
+ * will be left exhausted: its {@code hasNext()} method will return
+ * {@code false}.
+ */
+ public static int size(Iterator<?> iterator) {
+ int count = 0;
+ while (iterator.hasNext()) {
+ iterator.next();
+ count++;
+ }
+ return count;
+ }
+
+ /**
+ * Returns {@code true} if {@code iterator} contains {@code element}.
+ */
+ public static boolean contains(Iterator<?> iterator, @Nullable Object element)
+ {
+ if (element == null) {
+ while (iterator.hasNext()) {
+ if (iterator.next() == null) {
+ return true;
+ }
+ }
+ } else {
+ while (iterator.hasNext()) {
+ if (element.equals(iterator.next())) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Traverses an iterator and removes every element that belongs to the
+ * provided collection. The iterator will be left exhausted: its
+ * {@code hasNext()} method will return {@code false}.
+ *
+ * @param removeFrom the iterator to (potentially) remove elements from
+ * @param elementsToRemove the elements to remove
+ * @return {@code true} if any elements are removed from {@code iterator}
+ */
+ public static boolean removeAll(
+ Iterator<?> removeFrom, Collection<?> elementsToRemove) {
+ checkNotNull(elementsToRemove);
+ boolean modified = false;
+ while (removeFrom.hasNext()) {
+ if (elementsToRemove.contains(removeFrom.next())) {
+ removeFrom.remove();
+ modified = true;
+ }
+ }
+ return modified;
+ }
+
+ /**
+ * Removes every element that satisfies the provided predicate from the
+ * iterator. The iterator will be left exhausted: its {@code hasNext()}
+ * method will return {@code false}.
+ *
+ * @param removeFrom the iterator to (potentially) remove elements from
+ * @param predicate a predicate that determines whether an element should
+ * be removed
+ * @return {@code true} if any elements were removed from the iterator
+ */
+ // TODO: make public post-1.0
+ static <T> boolean removeIf(
+ Iterator<T> removeFrom, Predicate<? super T> predicate) {
+ checkNotNull(predicate);
+ boolean modified = false;
+ while (removeFrom.hasNext()) {
+ if (predicate.apply(removeFrom.next())) {
+ removeFrom.remove();
+ modified = true;
+ }
+ }
+ return modified;
+ }
+
+ /**
+ * Traverses an iterator and removes every element that does not belong to the
+ * provided collection. The iterator will be left exhausted: its
+ * {@code hasNext()} method will return {@code false}.
+ *
+ * @param removeFrom the iterator to (potentially) remove elements from
+ * @param elementsToRetain the elements to retain
+ * @return {@code true} if any elements are removed from {@code iterator}
+ */
+ public static boolean retainAll(
+ Iterator<?> removeFrom, Collection<?> elementsToRetain) {
+ checkNotNull(elementsToRetain);
+ boolean modified = false;
+ while (removeFrom.hasNext()) {
+ if (!elementsToRetain.contains(removeFrom.next())) {
+ removeFrom.remove();
+ modified = true;
+ }
+ }
+ return modified;
+ }
+
+ /**
+ * Determines whether two iterators contain equal elements in the same order.
+ * More specifically, this method returns {@code true} if {@code iterator1}
+ * and {@code iterator2} contain the same number of elements and every element
+ * of {@code iterator1} is equal to the corresponding element of
+ * {@code iterator2}.
+ *
+ * <p>Note that this will modify the supplied iterators, since they will have
+ * been advanced some number of elements forward.
+ */
+ public static boolean elementsEqual(
+ Iterator<?> iterator1, Iterator<?> iterator2) {
+ while (iterator1.hasNext()) {
+ if (!iterator2.hasNext()) {
+ return false;
+ }
+ Object o1 = iterator1.next();
+ Object o2 = iterator2.next();
+ if (!Objects.equal(o1, o2)) {
+ return false;
+ }
+ }
+ return !iterator2.hasNext();
+ }
+
+ /**
+ * Returns a string representation of {@code iterator}, with the format
+ * {@code [e1, e2, ..., en]}. The iterator will be left exhausted: its
+ * {@code hasNext()} method will return {@code false}.
+ */
+ public static String toString(Iterator<?> iterator) {
+ if (!iterator.hasNext()) {
+ return "[]";
+ }
+ StringBuilder builder = new StringBuilder();
+ builder.append('[').append(iterator.next());
+ while (iterator.hasNext()) {
+ builder.append(", ").append(iterator.next());
+ }
+ return builder.append(']').toString();
+ }
+
+ /**
+ * Returns the single element contained in {@code iterator}.
+ *
+ * @throws NoSuchElementException if the iterator is empty
+ * @throws IllegalArgumentException if the iterator contains multiple
+ * elements. The state of the iterator is unspecified.
+ */
+ public static <T> T getOnlyElement(Iterator<T> iterator) {
+ T first = iterator.next();
+ if (!iterator.hasNext()) {
+ return first;
+ }
+
+ StringBuilder sb = new StringBuilder();
+ sb.append("expected one element but was: <" + first);
+ for (int i = 0; i < 4 && iterator.hasNext(); i++) {
+ sb.append(", " + iterator.next());
+ }
+ if (iterator.hasNext()) {
+ sb.append(", ...");
+ }
+ sb.append(">");
+
+ throw new IllegalArgumentException(sb.toString());
+ }
+
+ /**
+ * Returns the single element contained in {@code iterator}, or {@code
+ * defaultValue} if the iterator is empty.
+ *
+ * @throws IllegalArgumentException if the iterator contains multiple
+ * elements. The state of the iterator is unspecified.
+ */
+ public static <T> T getOnlyElement(
+ Iterator<T> iterator, @Nullable T defaultValue) {
+ return iterator.hasNext() ? getOnlyElement(iterator) : defaultValue;
+ }
+
+ /**
+ * Copies an iterator's elements into an array. The iterator will be left
+ * exhausted: its {@code hasNext()} method will return {@code false}.
+ *
+ * @param iterator the iterator to copy
+ * @param type the type of the elements
+ * @return a newly-allocated array into which all the elements of the iterator
+ * have been copied
+ */
+ @GwtIncompatible("Array.newArray")
+ public static <T> T[] toArray(
+ Iterator<? extends T> iterator, Class<T> type) {
+ List<T> list = Lists.newArrayList(iterator);
+ return Iterables.toArray(list, type);
+ }
+
+ /**
+ * Adds all elements in {@code iterator} to {@code collection}. The iterator
+ * will be left exhausted: its {@code hasNext()} method will return
+ * {@code false}.
+ *
+ * @return {@code true} if {@code collection} was modified as a result of this
+ * operation
+ */
+ public static <T> boolean addAll(
+ Collection<T> addTo, Iterator<? extends T> iterator) {
+ checkNotNull(addTo);
+ boolean wasModified = false;
+ while (iterator.hasNext()) {
+ wasModified |= addTo.add(iterator.next());
+ }
+ return wasModified;
+ }
+
+ /**
+ * Returns the number of elements in the specified iterator that equal the
+ * specified object. The iterator will be left exhausted: its
+ * {@code hasNext()} method will return {@code false}.
+ *
+ * @see Collections#frequency
+ */
+ public static int frequency(Iterator<?> iterator, @Nullable Object element) {
+ int result = 0;
+ if (element == null) {
+ while (iterator.hasNext()) {
+ if (iterator.next() == null) {
+ result++;
+ }
+ }
+ } else {
+ while (iterator.hasNext()) {
+ if (element.equals(iterator.next())) {
+ result++;
+ }
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Returns an iterator that cycles indefinitely over the elements of {@code
+ * iterable}.
+ *
+ * <p>The returned iterator supports {@code remove()} if the provided iterator
+ * does. After {@code remove()} is called, subsequent cycles omit the removed
+ * element, which is no longer in {@code iterable}. The iterator's
+ * {@code hasNext()} method returns {@code true} until {@code iterable} is
+ * empty.
+ *
+ * <p><b>Warning:</b> Typical uses of the resulting iterator may produce an
+ * infinite loop. You should use an explicit {@code break} or be certain that
+ * you will eventually remove all the elements.
+ */
+ public static <T> Iterator<T> cycle(final Iterable<T> iterable) {
+ checkNotNull(iterable);
+ return new Iterator<T>() {
+ Iterator<T> iterator = emptyIterator();
+ Iterator<T> removeFrom;
+
+ public boolean hasNext() {
+ if (!iterator.hasNext()) {
+ iterator = iterable.iterator();
+ }
+ return iterator.hasNext();
+ }
+ public T next() {
+ if (!hasNext()) {
+ throw new NoSuchElementException();
+ }
+ removeFrom = iterator;
+ return iterator.next();
+ }
+ public void remove() {
+ checkState(removeFrom != null,
+ "no calls to next() since last call to remove()");
+ removeFrom.remove();
+ removeFrom = null;
+ }
+ };
+ }
+
+ /**
+ * Returns an iterator that cycles indefinitely over the provided elements.
+ *
+ * <p>The returned iterator supports {@code remove()} if the provided iterator
+ * does. After {@code remove()} is called, subsequent cycles omit the removed
+ * element, but {@code elements} does not change. The iterator's
+ * {@code hasNext()} method returns {@code true} until all of the original
+ * elements have been removed.
+ *
+ * <p><b>Warning:</b> Typical uses of the resulting iterator may produce an
+ * infinite loop. You should use an explicit {@code break} or be certain that
+ * you will eventually remove all the elements.
+ */
+ public static <T> Iterator<T> cycle(T... elements) {
+ return cycle(Lists.newArrayList(elements));
+ }
+
+ /**
+ * Combines two iterators into a single iterator. The returned iterator
+ * iterates across the elements in {@code a}, followed by the elements in
+ * {@code b}. The source iterators are not polled until necessary.
+ *
+ * <p>The returned iterator supports {@code remove()} when the corresponding
+ * input iterator supports it.
+ */
+ @SuppressWarnings("unchecked")
+ public static <T> Iterator<T> concat(Iterator<? extends T> a,
+ Iterator<? extends T> b) {
+ checkNotNull(a);
+ checkNotNull(b);
+ return concat(Arrays.asList(a, b).iterator());
+ }
+
+ /**
+ * Combines three iterators into a single iterator. The returned iterator
+ * iterates across the elements in {@code a}, followed by the elements in
+ * {@code b}, followed by the elements in {@code c}. The source iterators
+ * are not polled until necessary.
+ *
+ * <p>The returned iterator supports {@code remove()} when the corresponding
+ * input iterator supports it.
+ */
+ @SuppressWarnings("unchecked")
+ public static <T> Iterator<T> concat(Iterator<? extends T> a,
+ Iterator<? extends T> b, Iterator<? extends T> c) {
+ checkNotNull(a);
+ checkNotNull(b);
+ checkNotNull(c);
+ return concat(Arrays.asList(a, b, c).iterator());
+ }
+
+ /**
+ * Combines four iterators into a single iterator. The returned iterator
+ * iterates across the elements in {@code a}, followed by the elements in
+ * {@code b}, followed by the elements in {@code c}, followed by the elements
+ * in {@code d}. The source iterators are not polled until necessary.
+ *
+ * <p>The returned iterator supports {@code remove()} when the corresponding
+ * input iterator supports it.
+ */
+ @SuppressWarnings("unchecked")
+ public static <T> Iterator<T> concat(Iterator<? extends T> a,
+ Iterator<? extends T> b, Iterator<? extends T> c,
+ Iterator<? extends T> d) {
+ checkNotNull(a);
+ checkNotNull(b);
+ checkNotNull(c);
+ checkNotNull(d);
+ return concat(Arrays.asList(a, b, c, d).iterator());
+ }
+
+ /**
+ * Combines multiple iterators into a single iterator. The returned iterator
+ * iterates across the elements of each iterator in {@code inputs}. The input
+ * iterators are not polled until necessary.
+ *
+ * <p>The returned iterator supports {@code remove()} when the corresponding
+ * input iterator supports it.
+ *
+ * @throws NullPointerException if any of the provided iterators is null
+ */
+ public static <T> Iterator<T> concat(Iterator<? extends T>... inputs) {
+ return concat(ImmutableList.of(inputs).iterator());
+ }
+
+ /**
+ * Combines multiple iterators into a single iterator. The returned iterator
+ * iterates across the elements of each iterator in {@code inputs}. The input
+ * iterators are not polled until necessary.
+ *
+ * <p>The returned iterator supports {@code remove()} when the corresponding
+ * input iterator supports it. The methods of the returned iterator may throw
+ * {@code NullPointerException} if any of the input iterators are null.
+ */
+ public static <T> Iterator<T> concat(
+ final Iterator<? extends Iterator<? extends T>> inputs) {
+ checkNotNull(inputs);
+ return new Iterator<T>() {
+ Iterator<? extends T> current = emptyIterator();
+ Iterator<? extends T> removeFrom;
+
+ public boolean hasNext() {
+ // http://code.google.com/p/google-collections/issues/detail?id=151
+ // current.hasNext() might be relatively expensive, worth minimizing.
+ boolean currentHasNext;
+ while (!(currentHasNext = current.hasNext()) && inputs.hasNext()) {
+ current = inputs.next();
+ }
+ return currentHasNext;
+ }
+ public T next() {
+ if (!hasNext()) {
+ throw new NoSuchElementException();
+ }
+ removeFrom = current;
+ return current.next();
+ }
+ public void remove() {
+ checkState(removeFrom != null,
+ "no calls to next() since last call to remove()");
+ removeFrom.remove();
+ removeFrom = null;
+ }
+ };
+ }
+
+ /**
+ * Divides an iterator into unmodifiable sublists of the given size (the final
+ * list may be smaller). For example, partitioning an iterator containing
+ * {@code [a, b, c, d, e]} with a partition size of 3 yields {@code
+ * [[a, b, c], [d, e]]} -- an outer iterator containing two inner lists of
+ * three and two elements, all in the original order.
+ *
+ * <p>The returned lists implement {@link java.util.RandomAccess}.
+ *
+ * @param iterator the iterator to return a partitioned view of
+ * @param size the desired size of each partition (the last may be smaller)
+ * @return an iterator of immutable lists containing the elements of {@code
+ * iterator} divided into partitions
+ * @throws IllegalArgumentException if {@code size} is nonpositive
+ */
+ public static <T> UnmodifiableIterator<List<T>> partition(
+ Iterator<T> iterator, int size) {
+ return partitionImpl(iterator, size, false);
+ }
+
+ /**
+ * Divides an iterator into unmodifiable sublists of the given size, padding
+ * the final iterator with null values if necessary. For example, partitioning
+ * an iterator containing {@code [a, b, c, d, e]} with a partition size of 3
+ * yields {@code [[a, b, c], [d, e, null]]} -- an outer iterator containing
+ * two inner lists of three elements each, all in the original order.
+ *
+ * <p>The returned lists implement {@link java.util.RandomAccess}.
+ *
+ * @param iterator the iterator to return a partitioned view of
+ * @param size the desired size of each partition
+ * @return an iterator of immutable lists containing the elements of {@code
+ * iterator} divided into partitions (the final iterable may have
+ * trailing null elements)
+ * @throws IllegalArgumentException if {@code size} is nonpositive
+ */
+ public static <T> UnmodifiableIterator<List<T>> paddedPartition(
+ Iterator<T> iterator, int size) {
+ return partitionImpl(iterator, size, true);
+ }
+
+ private static <T> UnmodifiableIterator<List<T>> partitionImpl(
+ final Iterator<T> iterator, final int size, final boolean pad) {
+ checkNotNull(iterator);
+ checkArgument(size > 0);
+ return new UnmodifiableIterator<List<T>>() {
+ public boolean hasNext() {
+ return iterator.hasNext();
+ }
+ public List<T> next() {
+ if (!hasNext()) {
+ throw new NoSuchElementException();
+ }
+ Object[] array = new Object[size];
+ int count = 0;
+ for (; count < size && iterator.hasNext(); count++) {
+ array[count] = iterator.next();
+ }
+
+ @SuppressWarnings("unchecked") // we only put Ts in it
+ List<T> list = Collections.unmodifiableList(
+ (List<T>) Arrays.asList(array));
+ return (pad || count == size) ? list : Platform.subList(list, 0, count);
+ }
+ };
+ }
+
+ /**
+ * Returns the elements of {@code unfiltered} that satisfy a predicate.
+ */
+ public static <T> UnmodifiableIterator<T> filter(
+ final Iterator<T> unfiltered, final Predicate<? super T> predicate) {
+ checkNotNull(unfiltered);
+ checkNotNull(predicate);
+ return new AbstractIterator<T>() {
+ @Override protected T computeNext() {
+ while (unfiltered.hasNext()) {
+ T element = unfiltered.next();
+ if (predicate.apply(element)) {
+ return element;
+ }
+ }
+ return endOfData();
+ }
+ };
+ }
+
+ /**
+ * Returns all instances of class {@code type} in {@code unfiltered}. The
+ * returned iterator has elements whose class is {@code type} or a subclass of
+ * {@code type}.
+ *
+ * @param unfiltered an iterator containing objects of any type
+ * @param type the type of elements desired
+ * @return an unmodifiable iterator containing all elements of the original
+ * iterator that were of the requested type
+ */
+ @SuppressWarnings("unchecked") // can cast to <T> because non-Ts are removed
+ @GwtIncompatible("Class.isInstance")
+ public static <T> UnmodifiableIterator<T> filter(
+ Iterator<?> unfiltered, Class<T> type) {
+ return (UnmodifiableIterator<T>)
+ filter(unfiltered, Predicates.instanceOf(type));
+ }
+
+ /**
+ * Returns {@code true} if one or more elements returned by {@code iterator}
+ * satisfy the given predicate.
+ */
+ public static <T> boolean any(
+ Iterator<T> iterator, Predicate<? super T> predicate) {
+ checkNotNull(predicate);
+ while (iterator.hasNext()) {
+ T element = iterator.next();
+ if (predicate.apply(element)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Returns {@code true} if every element returned by {@code iterator}
+ * satisfies the given predicate. If {@code iterator} is empty, {@code true}
+ * is returned.
+ */
+ public static <T> boolean all(
+ Iterator<T> iterator, Predicate<? super T> predicate) {
+ checkNotNull(predicate);
+ while (iterator.hasNext()) {
+ T element = iterator.next();
+ if (!predicate.apply(element)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Returns the first element in {@code iterator} that satisfies the given
+ * predicate. If a matching element is found, the iterator will be left in a
+ * state such that calling {@code iterator.remove()} will remove the found
+ * item. If no such element is found, the iterator will be left exhausted: its
+ * {@code hasNext()} method will return {@code false}.
+ *
+ * @return the first matching element in {@code iterator}
+ * @throws NoSuchElementException if no element in {@code iterator} matches
+ * the given predicate
+ */
+ public static <T> T find(Iterator<T> iterator, Predicate<? super T> predicate)
+ {
+ return filter(iterator, predicate).next();
+ }
+
+ /**
+ * Returns an iterator that applies {@code function} to each element of {@code
+ * fromIterator}.
+ *
+ * <p>The returned iterator supports {@code remove()} if the provided iterator
+ * does. After a successful {@code remove()} call, {@code fromIterator} no
+ * longer contains the corresponding element.
+ */
+ public static <F, T> Iterator<T> transform(final Iterator<F> fromIterator,
+ final Function<? super F, ? extends T> function) {
+ checkNotNull(fromIterator);
+ checkNotNull(function);
+ return new Iterator<T>() {
+ public boolean hasNext() {
+ return fromIterator.hasNext();
+ }
+ public T next() {
+ F from = fromIterator.next();
+ return function.apply(from);
+ }
+ public void remove() {
+ fromIterator.remove();
+ }
+ };
+ }
+
+ /**
+ * Advances {@code iterator} {@code position + 1} times, returning the element
+ * at the {@code position}th position.
+ *
+ * @param position position of the element to return
+ * @return the element at the specified position in {@code iterator}
+ * @throws IndexOutOfBoundsException if {@code position} is negative or
+ * greater than or equal to the number of elements remaining in
+ * {@code iterator}
+ */
+ public static <T> T get(Iterator<T> iterator, int position) {
+ if (position < 0) {
+ throw new IndexOutOfBoundsException("position (" + position
+ + ") must not be negative");
+ }
+
+ int skipped = 0;
+ while (iterator.hasNext()) {
+ T t = iterator.next();
+ if (skipped++ == position) {
+ return t;
+ }
+ }
+
+ throw new IndexOutOfBoundsException("position (" + position
+ + ") must be less than the number of elements that remained ("
+ + skipped + ")");
+ }
+
+ /**
+ * Advances {@code iterator} to the end, returning the last element.
+ *
+ * @return the last element of {@code iterator}
+ * @throws NoSuchElementException if the iterator has no remaining elements
+ */
+ public static <T> T getLast(Iterator<T> iterator) {
+ while (true) {
+ T current = iterator.next();
+ if (!iterator.hasNext()) {
+ return current;
+ }
+ }
+ }
+
+ // Methods only in Iterators, not in Iterables
+
+ /**
+ * Returns an iterator containing the elements of {@code array} in order. The
+ * returned iterator is a view of the array; subsequent changes to the array
+ * will be reflected in the iterator.
+ *
+ * <p><b>Note:</b> It is often preferable to represent your data using a
+ * collection type, for example using {@link Arrays#asList(Object[])}, making
+ * this method unnecessary.
+ *
+ * <p>The {@code Iterable} equivalent of this method is either {@link
+ * Arrays#asList(Object[])} or {@link ImmutableList#of(Object[])}}.
+ */
+ public static <T> UnmodifiableIterator<T> forArray(final T... array) {
+ // optimized. benchmarks at nearly 2x of the straightforward impl
+ return new UnmodifiableIterator<T>() {
+ final int length = array.length;
+ int i = 0;
+ public boolean hasNext() {
+ return i < length;
+ }
+ public T next() {
+ try {
+ // 'return array[i++];' almost works
+ T t = array[i];
+ i++;
+ return t;
+ } catch (ArrayIndexOutOfBoundsException e) {
+ throw new NoSuchElementException();
+ }
+ }
+ };
+ }
+
+ /**
+ * Returns an iterator containing the elements in the specified range of
+ * {@code array} in order. The returned iterator is a view of the array;
+ * subsequent changes to the array will be reflected in the iterator.
+ *
+ * <p>The {@code Iterable} equivalent of this method is {@code
+ * Arrays.asList(array).subList(offset, offset + length)}.
+ *
+ * @param array array to read elements out of
+ * @param offset index of first array element to retrieve
+ * @param length number of elements in iteration
+ *
+ * @throws IndexOutOfBoundsException if {@code offset} is negative,
+ * {@code length} is negative, or {@code offset + length > array.length}
+ */
+ static <T> UnmodifiableIterator<T> forArray(
+ final T[] array, final int offset, int length) {
+ checkArgument(length >= 0);
+ final int end = offset + length;
+
+ // Technically we should give a slightly more descriptive error on overflow
+ Preconditions.checkPositionIndexes(offset, end, array.length);
+
+ // If length == 0 is a common enough case, we could return emptyIterator().
+
+ return new UnmodifiableIterator<T>() {
+ int i = offset;
+ public boolean hasNext() {
+ return i < end;
+ }
+ public T next() {
+ if (!hasNext()) {
+ throw new NoSuchElementException();
+ }
+ return array[i++];
+ }
+ };
+ }
+
+ /**
+ * Returns an iterator containing only {@code value}.
+ *
+ * <p>The {@link Iterable} equivalent of this method is {@link
+ * Collections#singleton}.
+ */
+ public static <T> UnmodifiableIterator<T> singletonIterator(
+ @Nullable final T value) {
+ return new UnmodifiableIterator<T>() {
+ boolean done;
+ public boolean hasNext() {
+ return !done;
+ }
+ public T next() {
+ if (done) {
+ throw new NoSuchElementException();
+ }
+ done = true;
+ return value;
+ }
+ };
+ }
+
+ /**
+ * Adapts an {@code Enumeration} to the {@code Iterator} interface.
+ *
+ * <p>This method has no equivalent in {@link Iterables} because viewing an
+ * {@code Enumeration} as an {@code Iterable} is impossible. However, the
+ * contents can be <i>copied</i> into a collection using {@link
+ * Collections#list}.
+ */
+ public static <T> UnmodifiableIterator<T> forEnumeration(
+ final Enumeration<T> enumeration) {
+ checkNotNull(enumeration);
+ return new UnmodifiableIterator<T>() {
+ public boolean hasNext() {
+ return enumeration.hasMoreElements();
+ }
+ public T next() {
+ return enumeration.nextElement();
+ }
+ };
+ }
+
+ /**
+ * Adapts an {@code Iterator} to the {@code Enumeration} interface.
+ *
+ * <p>The {@code Iterable} equivalent of this method is either {@link
+ * Collections#enumeration} (if you have a {@link Collection}), or
+ * {@code Iterators.asEnumeration(collection.iterator())}.
+ */
+ public static <T> Enumeration<T> asEnumeration(final Iterator<T> iterator) {
+ checkNotNull(iterator);
+ return new Enumeration<T>() {
+ public boolean hasMoreElements() {
+ return iterator.hasNext();
+ }
+ public T nextElement() {
+ return iterator.next();
+ }
+ };
+ }
+
+ /**
+ * Implementation of PeekingIterator that avoids peeking unless necessary.
+ */
+ private static class PeekingImpl<E> implements PeekingIterator<E> {
+
+ private final Iterator<? extends E> iterator;
+ private boolean hasPeeked;
+ private E peekedElement;
+
+ public PeekingImpl(Iterator<? extends E> iterator) {
+ this.iterator = checkNotNull(iterator);
+ }
+
+ public boolean hasNext() {
+ return hasPeeked || iterator.hasNext();
+ }
+
+ public E next() {
+ if (!hasPeeked) {
+ return iterator.next();
+ }
+ E result = peekedElement;
+ hasPeeked = false;
+ peekedElement = null;
+ return result;
+ }
+
+ public void remove() {
+ checkState(!hasPeeked, "Can't remove after you've peeked at next");
+ iterator.remove();
+ }
+
+ public E peek() {
+ if (!hasPeeked) {
+ peekedElement = iterator.next();
+ hasPeeked = true;
+ }
+ return peekedElement;
+ }
+ }
+
+ /**
+ * Returns a {@code PeekingIterator} backed by the given iterator.
+ *
+ * <p>Calls to the {@code peek} method with no intervening calls to {@code
+ * next} do not affect the iteration, and hence return the same object each
+ * time. A subsequent call to {@code next} is guaranteed to return the same
+ * object again. For example: <pre> {@code
+ *
+ * PeekingIterator<String> peekingIterator =
+ * Iterators.peekingIterator(Iterators.forArray("a", "b"));
+ * String a1 = peekingIterator.peek(); // returns "a"
+ * String a2 = peekingIterator.peek(); // also returns "a"
+ * String a3 = peekingIterator.next(); // also returns "a"}</pre>
+ *
+ * Any structural changes to the underlying iteration (aside from those
+ * performed by the iterator's own {@link PeekingIterator#remove()} method)
+ * will leave the iterator in an undefined state.
+ *
+ * <p>The returned iterator does not support removal after peeking, as
+ * explained by {@link PeekingIterator#remove()}.
+ *
+ * <p>Note: If the given iterator is already a {@code PeekingIterator},
+ * it <i>might</i> be returned to the caller, although this is neither
+ * guaranteed to occur nor required to be consistent. For example, this
+ * method <i>might</i> choose to pass through recognized implementations of
+ * {@code PeekingIterator} when the behavior of the implementation is
+ * known to meet the contract guaranteed by this method.
+ *
+ * <p>There is no {@link Iterable} equivalent to this method, so use this
+ * method to wrap each individual iterator as it is generated.
+ *
+ * @param iterator the backing iterator. The {@link PeekingIterator} assumes
+ * ownership of this iterator, so users should cease making direct calls
+ * to it after calling this method.
+ * @return a peeking iterator backed by that iterator. Apart from the
+ * additional {@link PeekingIterator#peek()} method, this iterator behaves
+ * exactly the same as {@code iterator}.
+ */
+ public static <T> PeekingIterator<T> peekingIterator(
+ Iterator<? extends T> iterator) {
+ if (iterator instanceof PeekingImpl) {
+ // Safe to cast <? extends T> to <T> because PeekingImpl only uses T
+ // covariantly (and cannot be subclassed to add non-covariant uses).
+ @SuppressWarnings("unchecked")
+ PeekingImpl<T> peeking = (PeekingImpl<T>) iterator;
+ return peeking;
+ }
+ return new PeekingImpl<T>(iterator);
+ }
+}
diff --git a/src/com/google/common/collect/LinkedHashMultimap.java b/src/com/google/common/collect/LinkedHashMultimap.java
new file mode 100644
index 0000000..d21ce9b
--- /dev/null
+++ b/src/com/google/common/collect/LinkedHashMultimap.java
@@ -0,0 +1,381 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Preconditions;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * Implementation of {@code Multimap} that does not allow duplicate key-value
+ * entries and that returns collections whose iterators follow the ordering in
+ * which the data was added to the multimap.
+ *
+ * <p>The collections returned by {@code keySet}, {@code keys}, and {@code
+ * asMap} iterate through the keys in the order they were first added to the
+ * multimap. Similarly, {@code get}, {@code removeAll}, and {@code
+ * replaceValues} return collections that iterate through the values in the
+ * order they were added. The collections generated by {@code entries} and
+ * {@code values} iterate across the key-value mappings in the order they were
+ * added to the multimap.
+ *
+ * <p>The iteration ordering of the collections generated by {@code keySet},
+ * {@code keys}, and {@code asMap} has a few subtleties. As long as the set of
+ * keys remains unchanged, adding or removing mappings does not affect the key
+ * iteration order. However, if you remove all values associated with a key and
+ * then add the key back to the multimap, that key will come last in the key
+ * iteration order.
+ *
+ * <p>The multimap does not store duplicate key-value pairs. Adding a new
+ * key-value pair equal to an existing key-value pair has no effect.
+ *
+ * <p>Keys and values may be null. All optional multimap methods are supported,
+ * and all returned views are modifiable.
+ *
+ * <p>This class is not threadsafe when any concurrent operations update the
+ * multimap. Concurrent read operations will work correctly. To allow concurrent
+ * update operations, wrap your multimap with a call to {@link
+ * Multimaps#synchronizedSetMultimap}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(serializable = true)
+public final class LinkedHashMultimap<K, V> extends AbstractSetMultimap<K, V> {
+ private static final int DEFAULT_VALUES_PER_KEY = 8;
+
+ @VisibleForTesting
+ transient int expectedValuesPerKey = DEFAULT_VALUES_PER_KEY;
+
+ /**
+ * Map entries with an iteration order corresponding to the order in which the
+ * key-value pairs were added to the multimap.
+ */
+ // package-private for GWT deserialization
+ transient Collection<Map.Entry<K, V>> linkedEntries;
+
+ /**
+ * Creates a new, empty {@code LinkedHashMultimap} with the default initial
+ * capacities.
+ */
+ public static <K, V> LinkedHashMultimap<K, V> create() {
+ return new LinkedHashMultimap<K, V>();
+ }
+
+ /**
+ * Constructs an empty {@code LinkedHashMultimap} with enough capacity to hold
+ * the specified numbers of keys and values without rehashing.
+ *
+ * @param expectedKeys the expected number of distinct keys
+ * @param expectedValuesPerKey the expected average number of values per key
+ * @throws IllegalArgumentException if {@code expectedKeys} or {@code
+ * expectedValuesPerKey} is negative
+ */
+ public static <K, V> LinkedHashMultimap<K, V> create(
+ int expectedKeys, int expectedValuesPerKey) {
+ return new LinkedHashMultimap<K, V>(expectedKeys, expectedValuesPerKey);
+ }
+
+ /**
+ * Constructs a {@code LinkedHashMultimap} with the same mappings as the
+ * specified multimap. If a key-value mapping appears multiple times in the
+ * input multimap, it only appears once in the constructed multimap. The new
+ * multimap has the same {@link Multimap#entries()} iteration order as the
+ * input multimap, except for excluding duplicate mappings.
+ *
+ * @param multimap the multimap whose contents are copied to this multimap
+ */
+ public static <K, V> LinkedHashMultimap<K, V> create(
+ Multimap<? extends K, ? extends V> multimap) {
+ return new LinkedHashMultimap<K, V>(multimap);
+ }
+
+ private LinkedHashMultimap() {
+ super(new LinkedHashMap<K, Collection<V>>());
+ linkedEntries = Sets.newLinkedHashSet();
+ }
+
+ private LinkedHashMultimap(int expectedKeys, int expectedValuesPerKey) {
+ super(new LinkedHashMap<K, Collection<V>>(expectedKeys));
+ Preconditions.checkArgument(expectedValuesPerKey >= 0);
+ this.expectedValuesPerKey = expectedValuesPerKey;
+ linkedEntries = new LinkedHashSet<Map.Entry<K, V>>(
+ expectedKeys * expectedValuesPerKey);
+ }
+
+ private LinkedHashMultimap(Multimap<? extends K, ? extends V> multimap) {
+ super(new LinkedHashMap<K, Collection<V>>(
+ Maps.capacity(multimap.keySet().size())));
+ linkedEntries
+ = new LinkedHashSet<Map.Entry<K, V>>(Maps.capacity(multimap.size()));
+ putAll(multimap);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>Creates an empty {@code LinkedHashSet} for a collection of values for
+ * one key.
+ *
+ * @return a new {@code LinkedHashSet} containing a collection of values for
+ * one key
+ */
+ @Override Set<V> createCollection() {
+ return new LinkedHashSet<V>(Maps.capacity(expectedValuesPerKey));
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>Creates a decorated {@code LinkedHashSet} that also keeps track of the
+ * order in which key-value pairs are added to the multimap.
+ *
+ * @param key key to associate with values in the collection
+ * @return a new decorated {@code LinkedHashSet} containing a collection of
+ * values for one key
+ */
+ @Override Collection<V> createCollection(@Nullable K key) {
+ return new SetDecorator(key, createCollection());
+ }
+
+ private class SetDecorator extends ForwardingSet<V> {
+ final Set<V> delegate;
+ final K key;
+
+ SetDecorator(@Nullable K key, Set<V> delegate) {
+ this.delegate = delegate;
+ this.key = key;
+ }
+
+ @Override protected Set<V> delegate() {
+ return delegate;
+ }
+
+ <E> Map.Entry<K, E> createEntry(@Nullable E value) {
+ return Maps.immutableEntry(key, value);
+ }
+
+ <E> Collection<Map.Entry<K, E>> createEntries(Collection<E> values) {
+ // converts a collection of values into a list of key/value map entries
+ Collection<Map.Entry<K, E>> entries
+ = Lists.newArrayListWithExpectedSize(values.size());
+ for (E value : values) {
+ entries.add(createEntry(value));
+ }
+ return entries;
+ }
+
+ @Override public boolean add(@Nullable V value) {
+ boolean changed = delegate.add(value);
+ if (changed) {
+ linkedEntries.add(createEntry(value));
+ }
+ return changed;
+ }
+
+ @Override public boolean addAll(Collection<? extends V> values) {
+ boolean changed = delegate.addAll(values);
+ if (changed) {
+ linkedEntries.addAll(createEntries(delegate()));
+ }
+ return changed;
+ }
+
+ @Override public void clear() {
+ linkedEntries.removeAll(createEntries(delegate()));
+ delegate.clear();
+ }
+
+ @Override public Iterator<V> iterator() {
+ final Iterator<V> delegateIterator = delegate.iterator();
+ return new Iterator<V>() {
+ V value;
+
+ public boolean hasNext() {
+ return delegateIterator.hasNext();
+ }
+ public V next() {
+ value = delegateIterator.next();
+ return value;
+ }
+ public void remove() {
+ delegateIterator.remove();
+ linkedEntries.remove(createEntry(value));
+ }
+ };
+ }
+
+ @Override public boolean remove(@Nullable Object value) {
+ boolean changed = delegate.remove(value);
+ if (changed) {
+ /*
+ * linkedEntries.remove() will return false when this method is called
+ * by entries().iterator().remove()
+ */
+ linkedEntries.remove(createEntry(value));
+ }
+ return changed;
+ }
+
+ @Override public boolean removeAll(Collection<?> values) {
+ boolean changed = delegate.removeAll(values);
+ if (changed) {
+ linkedEntries.removeAll(createEntries(values));
+ }
+ return changed;
+ }
+
+ @Override public boolean retainAll(Collection<?> values) {
+ /*
+ * Calling linkedEntries.retainAll() would incorrectly remove values
+ * with other keys.
+ */
+ boolean changed = false;
+ Iterator<V> iterator = delegate.iterator();
+ while (iterator.hasNext()) {
+ V value = iterator.next();
+ if (!values.contains(value)) {
+ iterator.remove();
+ linkedEntries.remove(Maps.immutableEntry(key, value));
+ changed = true;
+ }
+ }
+ return changed;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>Generates an iterator across map entries that follows the ordering in
+ * which the key-value pairs were added to the multimap.
+ *
+ * @return a key-value iterator with the correct ordering
+ */
+ @Override Iterator<Map.Entry<K, V>> createEntryIterator() {
+ final Iterator<Map.Entry<K, V>> delegateIterator = linkedEntries.iterator();
+
+ return new Iterator<Map.Entry<K, V>>() {
+ Map.Entry<K, V> entry;
+
+ public boolean hasNext() {
+ return delegateIterator.hasNext();
+ }
+
+ public Map.Entry<K, V> next() {
+ entry = delegateIterator.next();
+ return entry;
+ }
+
+ public void remove() {
+ // Remove from iterator first to keep iterator valid.
+ delegateIterator.remove();
+ LinkedHashMultimap.this.remove(entry.getKey(), entry.getValue());
+ }
+ };
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>If {@code values} is not empty and the multimap already contains a
+ * mapping for {@code key}, the {@code keySet()} ordering is unchanged.
+ * However, the provided values always come last in the {@link #entries()} and
+ * {@link #values()} iteration orderings.
+ */
+ @Override public Set<V> replaceValues(
+ @Nullable K key, Iterable<? extends V> values) {
+ return super.replaceValues(key, values);
+ }
+
+ /**
+ * Returns a set of all key-value pairs. Changes to the returned set will
+ * update the underlying multimap, and vice versa. The entries set does not
+ * support the {@code add} or {@code addAll} operations.
+ *
+ * <p>The iterator generated by the returned set traverses the entries in the
+ * order they were added to the multimap.
+ *
+ * <p>Each entry is an immutable snapshot of a key-value mapping in the
+ * multimap, taken at the time the entry is returned by a method call to the
+ * collection or its iterator.
+ */
+ @Override public Set<Map.Entry<K, V>> entries() {
+ return super.entries();
+ }
+
+ /**
+ * Returns a collection of all values in the multimap. Changes to the returned
+ * collection will update the underlying multimap, and vice versa.
+ *
+ * <p>The iterator generated by the returned collection traverses the values
+ * in the order they were added to the multimap.
+ */
+ @Override public Collection<V> values() {
+ return super.values();
+ }
+
+ // Unfortunately, the entries() ordering does not determine the key ordering;
+ // see the example in the LinkedListMultimap class Javadoc.
+
+ /**
+ * @serialData the number of distinct keys, and then for each distinct key:
+ * the first key, the number of values for that key, and the key's values,
+ * followed by successive keys and values from the entries() ordering
+ */
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ stream.defaultWriteObject();
+ stream.writeInt(expectedValuesPerKey);
+ Serialization.writeMultimap(this, stream);
+ for (Map.Entry<K, V> entry : linkedEntries) {
+ stream.writeObject(entry.getKey());
+ stream.writeObject(entry.getValue());
+ }
+ }
+
+ private void readObject(ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+ expectedValuesPerKey = stream.readInt();
+ int distinctKeys = Serialization.readCount(stream);
+ setMap(new LinkedHashMap<K, Collection<V>>(Maps.capacity(distinctKeys)));
+ linkedEntries = new LinkedHashSet<Map.Entry<K, V>>(
+ distinctKeys * expectedValuesPerKey);
+ Serialization.populateMultimap(this, stream, distinctKeys);
+ linkedEntries.clear(); // will clear and repopulate entries
+ for (int i = 0; i < size(); i++) {
+ @SuppressWarnings("unchecked") // reading data stored by writeObject
+ K key = (K) stream.readObject();
+ @SuppressWarnings("unchecked") // reading data stored by writeObject
+ V value = (V) stream.readObject();
+ linkedEntries.add(Maps.immutableEntry(key, value));
+ }
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/LinkedHashMultiset.java b/src/com/google/common/collect/LinkedHashMultiset.java
new file mode 100644
index 0000000..54e4517
--- /dev/null
+++ b/src/com/google/common/collect/LinkedHashMultiset.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.LinkedHashMap;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * A {@code Multiset} implementation with predictable iteration order. Its
+ * iterator orders elements according to when the first occurrence of the
+ * element was added. When the multiset contains multiple instances of an
+ * element, those instances are consecutive in the iteration order. If all
+ * occurrences of an element are removed, after which that element is added to
+ * the multiset, the element will appear at the end of the iteration.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ */
+@GwtCompatible(serializable = true)
+@SuppressWarnings("serial") // we're overriding default serialization
+public final class LinkedHashMultiset<E> extends AbstractMapBasedMultiset<E> {
+
+ /**
+ * Creates a new, empty {@code LinkedHashMultiset} using the default initial
+ * capacity.
+ */
+ public static <E> LinkedHashMultiset<E> create() {
+ return new LinkedHashMultiset<E>();
+ }
+
+ /**
+ * Creates a new, empty {@code LinkedHashMultiset} with the specified expected
+ * number of distinct elements.
+ *
+ * @param distinctElements the expected number of distinct elements
+ * @throws IllegalArgumentException if {@code distinctElements} is negative
+ */
+ public static <E> LinkedHashMultiset<E> create(int distinctElements) {
+ return new LinkedHashMultiset<E>(distinctElements);
+ }
+
+ /**
+ * Creates a new {@code LinkedHashMultiset} containing the specified elements.
+ *
+ * @param elements the elements that the multiset should contain
+ */
+ public static <E> LinkedHashMultiset<E> create(
+ Iterable<? extends E> elements) {
+ LinkedHashMultiset<E> multiset =
+ create(Multisets.inferDistinctElements(elements));
+ Iterables.addAll(multiset, elements);
+ return multiset;
+ }
+
+ private LinkedHashMultiset() {
+ super(new LinkedHashMap<E, AtomicInteger>());
+ }
+
+ private LinkedHashMultiset(int distinctElements) {
+ // Could use newLinkedHashMapWithExpectedSize() if it existed
+ super(new LinkedHashMap<E, AtomicInteger>(Maps.capacity(distinctElements)));
+ }
+
+ /**
+ * @serialData the number of distinct elements, the first element, its count,
+ * the second element, its count, and so on
+ */
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ stream.defaultWriteObject();
+ Serialization.writeMultiset(this, stream);
+ }
+
+ private void readObject(ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+ int distinctElements = Serialization.readCount(stream);
+ setBackingMap(new LinkedHashMap<E, AtomicInteger>(
+ Maps.capacity(distinctElements)));
+ Serialization.populateMultiset(this, stream, distinctElements);
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/LinkedListMultimap.java b/src/com/google/common/collect/LinkedListMultimap.java
new file mode 100644
index 0000000..2a63e1c
--- /dev/null
+++ b/src/com/google/common/collect/LinkedListMultimap.java
@@ -0,0 +1,951 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Objects;
+import com.google.common.base.Preconditions;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.collect.Multisets.setCountImpl;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.util.AbstractCollection;
+import java.util.AbstractMap;
+import java.util.AbstractSequentialList;
+import java.util.AbstractSet;
+import java.util.Collection;
+import static java.util.Collections.unmodifiableList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * An implementation of {@code ListMultimap} that supports deterministic
+ * iteration order for both keys and values. The iteration order is preserved
+ * across non-distinct key values. For example, for the following multimap
+ * definition: <pre> {@code
+ *
+ * Multimap<K, V> multimap = LinkedListMultimap.create();
+ * multimap.put(key1, foo);
+ * multimap.put(key2, bar);
+ * multimap.put(key1, baz);}</pre>
+ *
+ * ... the iteration order for {@link #keys()} is {@code [key1, key2, key1]},
+ * and similarly for {@link #entries()}. Unlike {@link LinkedHashMultimap}, the
+ * iteration order is kept consistent between keys, entries and values. For
+ * example, calling: <pre> {@code
+ *
+ * map.remove(key1, foo);}</pre>
+ *
+ * changes the entries iteration order to {@code [key2=bar, key1=baz]} and the
+ * key iteration order to {@code [key2, key1]}. The {@link #entries()} iterator
+ * returns mutable map entries, and {@link #replaceValues} attempts to preserve
+ * iteration order as much as possible.
+ *
+ * <p>The collections returned by {@link #keySet} and {@link #asMap} iterate
+ * through the keys in the order they were first added to the multimap.
+ * Similarly, {@link #get}, {@link #removeAll}, and {@link #replaceValues}
+ * return collections that iterate through the values in the order they were
+ * added. The collections generated by {@link #entries}, {@link #keys}, and
+ * {@link #values} iterate across the key-value mappings in the order they were
+ * added to the multimap.
+ *
+ * <p>Keys and values may be null. All optional multimap methods are supported,
+ * and all returned views are modifiable.
+ *
+ * <p>The methods {@link #get}, {@link #keySet}, {@link #keys}, {@link #values},
+ * {@link #entries}, and {@link #asMap} return collections that are views of the
+ * multimap. If the multimap is modified while an iteration over any of those
+ * collections is in progress, except through the iterator's own {@code remove}
+ * operation, the results of the iteration are undefined.
+ *
+ * <p>This class is not threadsafe when any concurrent operations update the
+ * multimap. Concurrent read operations will work correctly. To allow concurrent
+ * update operations, wrap your multimap with a call to {@link
+ * Multimaps#synchronizedListMultimap}.
+ *
+ * @author Mike Bostock
+ */
+@GwtCompatible(serializable = true)
+public final class LinkedListMultimap<K, V>
+ implements ListMultimap<K, V>, Serializable {
+ /*
+ * Order is maintained using a linked list containing all key-value pairs. In
+ * addition, a series of disjoint linked lists of "siblings", each containing
+ * the values for a specific key, is used to implement {@link
+ * ValueForKeyIterator} in constant time.
+ */
+
+ private static final class Node<K, V> {
+ final K key;
+ V value;
+ Node<K, V> next; // the next node (with any key)
+ Node<K, V> previous; // the previous node (with any key)
+ Node<K, V> nextSibling; // the next node with the same key
+ Node<K, V> previousSibling; // the previous node with the same key
+
+ Node(@Nullable K key, @Nullable V value) {
+ this.key = key;
+ this.value = value;
+ }
+
+ @Override public String toString() {
+ return key + "=" + value;
+ }
+ }
+
+ private transient Node<K, V> head; // the head for all keys
+ private transient Node<K, V> tail; // the tail for all keys
+ private transient Multiset<K> keyCount; // the number of values for each key
+ private transient Map<K, Node<K, V>> keyToKeyHead; // the head for a given key
+ private transient Map<K, Node<K, V>> keyToKeyTail; // the tail for a given key
+
+ /**
+ * Creates a new, empty {@code LinkedListMultimap} with the default initial
+ * capacity.
+ */
+ public static <K, V> LinkedListMultimap<K, V> create() {
+ return new LinkedListMultimap<K, V>();
+ }
+
+ /**
+ * Constructs an empty {@code LinkedListMultimap} with enough capacity to hold
+ * the specified number of keys without rehashing.
+ *
+ * @param expectedKeys the expected number of distinct keys
+ * @throws IllegalArgumentException if {@code expectedKeys} is negative
+ */
+ public static <K, V> LinkedListMultimap<K, V> create(int expectedKeys) {
+ return new LinkedListMultimap<K, V>(expectedKeys);
+ }
+
+ /**
+ * Constructs a {@code LinkedListMultimap} with the same mappings as the
+ * specified {@code Multimap}. The new multimap has the same
+ * {@link Multimap#entries()} iteration order as the input multimap.
+ *
+ * @param multimap the multimap whose contents are copied to this multimap
+ */
+ public static <K, V> LinkedListMultimap<K, V> create(
+ Multimap<? extends K, ? extends V> multimap) {
+ return new LinkedListMultimap<K, V>(multimap);
+ }
+
+ private LinkedListMultimap() {
+ keyCount = LinkedHashMultiset.create();
+ keyToKeyHead = Maps.newHashMap();
+ keyToKeyTail = Maps.newHashMap();
+ }
+
+ private LinkedListMultimap(int expectedKeys) {
+ keyCount = LinkedHashMultiset.create(expectedKeys);
+ keyToKeyHead = Maps.newHashMapWithExpectedSize(expectedKeys);
+ keyToKeyTail = Maps.newHashMapWithExpectedSize(expectedKeys);
+ }
+
+ private LinkedListMultimap(Multimap<? extends K, ? extends V> multimap) {
+ this(multimap.keySet().size());
+ putAll(multimap);
+ }
+
+ /**
+ * Adds a new node for the specified key-value pair before the specified
+ * {@code nextSibling} element, or at the end of the list if {@code
+ * nextSibling} is null. Note: if {@code nextSibling} is specified, it MUST be
+ * for an node for the same {@code key}!
+ */
+ private Node<K, V> addNode(
+ @Nullable K key, @Nullable V value, @Nullable Node<K, V> nextSibling) {
+ Node<K, V> node = new Node<K, V>(key, value);
+ if (head == null) { // empty list
+ head = tail = node;
+ keyToKeyHead.put(key, node);
+ keyToKeyTail.put(key, node);
+ } else if (nextSibling == null) { // non-empty list, add to tail
+ tail.next = node;
+ node.previous = tail;
+ Node<K, V> keyTail = keyToKeyTail.get(key);
+ if (keyTail == null) { // first for this key
+ keyToKeyHead.put(key, node);
+ } else {
+ keyTail.nextSibling = node;
+ node.previousSibling = keyTail;
+ }
+ keyToKeyTail.put(key, node);
+ tail = node;
+ } else { // non-empty list, insert before nextSibling
+ node.previous = nextSibling.previous;
+ node.previousSibling = nextSibling.previousSibling;
+ node.next = nextSibling;
+ node.nextSibling = nextSibling;
+ if (nextSibling.previousSibling == null) { // nextSibling was key head
+ keyToKeyHead.put(key, node);
+ } else {
+ nextSibling.previousSibling.nextSibling = node;
+ }
+ if (nextSibling.previous == null) { // nextSibling was head
+ head = node;
+ } else {
+ nextSibling.previous.next = node;
+ }
+ nextSibling.previous = node;
+ nextSibling.previousSibling = node;
+ }
+ keyCount.add(key);
+ return node;
+ }
+
+ /**
+ * Removes the specified node from the linked list. This method is only
+ * intended to be used from the {@code Iterator} classes. See also {@link
+ * LinkedListMultimap#removeAllNodes(Object)}.
+ */
+ private void removeNode(Node<K, V> node) {
+ if (node.previous != null) {
+ node.previous.next = node.next;
+ } else { // node was head
+ head = node.next;
+ }
+ if (node.next != null) {
+ node.next.previous = node.previous;
+ } else { // node was tail
+ tail = node.previous;
+ }
+ if (node.previousSibling != null) {
+ node.previousSibling.nextSibling = node.nextSibling;
+ } else if (node.nextSibling != null) { // node was key head
+ keyToKeyHead.put(node.key, node.nextSibling);
+ } else {
+ keyToKeyHead.remove(node.key); // don't leak a key-null entry
+ }
+ if (node.nextSibling != null) {
+ node.nextSibling.previousSibling = node.previousSibling;
+ } else if (node.previousSibling != null) { // node was key tail
+ keyToKeyTail.put(node.key, node.previousSibling);
+ } else {
+ keyToKeyTail.remove(node.key); // don't leak a key-null entry
+ }
+ keyCount.remove(node.key);
+ }
+
+ /** Removes all nodes for the specified key. */
+ private void removeAllNodes(@Nullable Object key) {
+ for (Iterator<V> i = new ValueForKeyIterator(key); i.hasNext();) {
+ i.next();
+ i.remove();
+ }
+ }
+
+ /** Helper method for verifying that an iterator element is present. */
+ private static void checkElement(@Nullable Object node) {
+ if (node == null) {
+ throw new NoSuchElementException();
+ }
+ }
+
+ /** An {@code Iterator} over all nodes. */
+ private class NodeIterator implements Iterator<Node<K, V>> {
+ Node<K, V> next = head;
+ Node<K, V> current;
+
+ public boolean hasNext() {
+ return next != null;
+ }
+ public Node<K, V> next() {
+ checkElement(next);
+ current = next;
+ next = next.next;
+ return current;
+ }
+ public void remove() {
+ checkState(current != null);
+ removeNode(current);
+ current = null;
+ }
+ }
+
+ /** An {@code Iterator} over distinct keys in key head order. */
+ private class DistinctKeyIterator implements Iterator<K> {
+ final Set<K> seenKeys = new HashSet<K>(Maps.capacity(keySet().size()));
+ Node<K, V> next = head;
+ Node<K, V> current;
+
+ public boolean hasNext() {
+ return next != null;
+ }
+ public K next() {
+ checkElement(next);
+ current = next;
+ seenKeys.add(current.key);
+ do { // skip ahead to next unseen key
+ next = next.next;
+ } while ((next != null) && !seenKeys.add(next.key));
+ return current.key;
+ }
+ public void remove() {
+ checkState(current != null);
+ removeAllNodes(current.key);
+ current = null;
+ }
+ }
+
+ /** A {@code ListIterator} over values for a specified key. */
+ private class ValueForKeyIterator implements ListIterator<V> {
+ final Object key;
+ int nextIndex;
+ Node<K, V> next;
+ Node<K, V> current;
+ Node<K, V> previous;
+
+ /** Constructs a new iterator over all values for the specified key. */
+ ValueForKeyIterator(@Nullable Object key) {
+ this.key = key;
+ next = keyToKeyHead.get(key);
+ }
+
+ /**
+ * Constructs a new iterator over all values for the specified key starting
+ * at the specified index. This constructor is optimized so that it starts
+ * at either the head or the tail, depending on which is closer to the
+ * specified index. This allows adds to the tail to be done in constant
+ * time.
+ *
+ * @throws IndexOutOfBoundsException if index is invalid
+ */
+ public ValueForKeyIterator(@Nullable Object key, int index) {
+ int size = keyCount.count(key);
+ Preconditions.checkPositionIndex(index, size);
+ if (index >= (size / 2)) {
+ previous = keyToKeyTail.get(key);
+ nextIndex = size;
+ while (index++ < size) {
+ previous();
+ }
+ } else {
+ next = keyToKeyHead.get(key);
+ while (index-- > 0) {
+ next();
+ }
+ }
+ this.key = key;
+ current = null;
+ }
+
+ public boolean hasNext() {
+ return next != null;
+ }
+
+ public V next() {
+ checkElement(next);
+ previous = current = next;
+ next = next.nextSibling;
+ nextIndex++;
+ return current.value;
+ }
+
+ public boolean hasPrevious() {
+ return previous != null;
+ }
+
+ public V previous() {
+ checkElement(previous);
+ next = current = previous;
+ previous = previous.previousSibling;
+ nextIndex--;
+ return current.value;
+ }
+
+ public int nextIndex() {
+ return nextIndex;
+ }
+
+ public int previousIndex() {
+ return nextIndex - 1;
+ }
+
+ public void remove() {
+ checkState(current != null);
+ if (current != next) { // removing next element
+ previous = current.previousSibling;
+ nextIndex--;
+ } else {
+ next = current.nextSibling;
+ }
+ removeNode(current);
+ current = null;
+ }
+
+ public void set(V value) {
+ checkState(current != null);
+ current.value = value;
+ }
+
+ @SuppressWarnings("unchecked")
+ public void add(V value) {
+ previous = addNode((K) key, value, next);
+ nextIndex++;
+ current = null;
+ }
+ }
+
+ // Query Operations
+
+ public int size() {
+ return keyCount.size();
+ }
+
+ public boolean isEmpty() {
+ return head == null;
+ }
+
+ public boolean containsKey(@Nullable Object key) {
+ return keyToKeyHead.containsKey(key);
+ }
+
+ public boolean containsValue(@Nullable Object value) {
+ for (Iterator<Node<K, V>> i = new NodeIterator(); i.hasNext();) {
+ if (Objects.equal(i.next().value, value)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean containsEntry(@Nullable Object key, @Nullable Object value) {
+ for (Iterator<V> i = new ValueForKeyIterator(key); i.hasNext();) {
+ if (Objects.equal(i.next(), value)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ // Modification Operations
+
+ /**
+ * Stores a key-value pair in the multimap.
+ *
+ * @param key key to store in the multimap
+ * @param value value to store in the multimap
+ * @return {@code true} always
+ */
+ public boolean put(@Nullable K key, @Nullable V value) {
+ addNode(key, value, null);
+ return true;
+ }
+
+ public boolean remove(@Nullable Object key, @Nullable Object value) {
+ Iterator<V> values = new ValueForKeyIterator(key);
+ while (values.hasNext()) {
+ if (Objects.equal(values.next(), value)) {
+ values.remove();
+ return true;
+ }
+ }
+ return false;
+ }
+
+ // Bulk Operations
+
+ public boolean putAll(@Nullable K key, Iterable<? extends V> values) {
+ boolean changed = false;
+ for (V value : values) {
+ changed |= put(key, value);
+ }
+ return changed;
+ }
+
+ public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
+ boolean changed = false;
+ for (Entry<? extends K, ? extends V> entry : multimap.entries()) {
+ changed |= put(entry.getKey(), entry.getValue());
+ }
+ return changed;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>If any entries for the specified {@code key} already exist in the
+ * multimap, their values are changed in-place without affecting the iteration
+ * order.
+ *
+ * <p>The returned list is immutable and implements
+ * {@link java.util.RandomAccess}.
+ */
+ public List<V> replaceValues(@Nullable K key, Iterable<? extends V> values) {
+ List<V> oldValues = getCopy(key);
+ ListIterator<V> keyValues = new ValueForKeyIterator(key);
+ Iterator<? extends V> newValues = values.iterator();
+
+ // Replace existing values, if any.
+ while (keyValues.hasNext() && newValues.hasNext()) {
+ keyValues.next();
+ keyValues.set(newValues.next());
+ }
+
+ // Remove remaining old values, if any.
+ while (keyValues.hasNext()) {
+ keyValues.next();
+ keyValues.remove();
+ }
+
+ // Add remaining new values, if any.
+ while (newValues.hasNext()) {
+ keyValues.add(newValues.next());
+ }
+
+ return oldValues;
+ }
+
+ private List<V> getCopy(@Nullable Object key) {
+ return unmodifiableList(Lists.newArrayList(new ValueForKeyIterator(key)));
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The returned list is immutable and implements
+ * {@link java.util.RandomAccess}.
+ */
+ public List<V> removeAll(@Nullable Object key) {
+ List<V> oldValues = getCopy(key);
+ removeAllNodes(key);
+ return oldValues;
+ }
+
+ public void clear() {
+ head = null;
+ tail = null;
+ keyCount.clear();
+ keyToKeyHead.clear();
+ keyToKeyTail.clear();
+ }
+
+ // Views
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>If the multimap is modified while an iteration over the list is in
+ * progress (except through the iterator's own {@code add}, {@code set} or
+ * {@code remove} operations) the results of the iteration are undefined.
+ *
+ * <p>The returned list is not serializable and does not have random access.
+ */
+ public List<V> get(final @Nullable K key) {
+ return new AbstractSequentialList<V>() {
+ @Override public int size() {
+ return keyCount.count(key);
+ }
+ @Override public ListIterator<V> listIterator(int index) {
+ return new ValueForKeyIterator(key, index);
+ }
+ @Override public boolean removeAll(Collection<?> c) {
+ return Iterators.removeAll(iterator(), c);
+ }
+ @Override public boolean retainAll(Collection<?> c) {
+ return Iterators.retainAll(iterator(), c);
+ }
+ };
+ }
+
+ private transient Set<K> keySet;
+
+ public Set<K> keySet() {
+ Set<K> result = keySet;
+ if (result == null) {
+ keySet = result = new AbstractSet<K>() {
+ @Override public int size() {
+ return keyCount.elementSet().size();
+ }
+ @Override public Iterator<K> iterator() {
+ return new DistinctKeyIterator();
+ }
+ @Override public boolean contains(Object key) { // for performance
+ return keyCount.contains(key);
+ }
+ };
+ }
+ return result;
+ }
+
+ private transient Multiset<K> keys;
+
+ public Multiset<K> keys() {
+ Multiset<K> result = keys;
+ if (result == null) {
+ keys = result = new MultisetView();
+ }
+ return result;
+ }
+
+ private class MultisetView extends AbstractCollection<K>
+ implements Multiset<K> {
+
+ @Override public int size() {
+ return keyCount.size();
+ }
+
+ @Override public Iterator<K> iterator() {
+ final Iterator<Node<K, V>> nodes = new NodeIterator();
+ return new Iterator<K>() {
+ public boolean hasNext() {
+ return nodes.hasNext();
+ }
+ public K next() {
+ return nodes.next().key;
+ }
+ public void remove() {
+ nodes.remove();
+ }
+ };
+ }
+
+ public int count(@Nullable Object key) {
+ return keyCount.count(key);
+ }
+
+ public int add(@Nullable K key, int occurrences) {
+ throw new UnsupportedOperationException();
+ }
+
+ public int remove(@Nullable Object key, int occurrences) {
+ checkArgument(occurrences >= 0);
+ int oldCount = count(key);
+ Iterator<V> values = new ValueForKeyIterator(key);
+ while ((occurrences-- > 0) && values.hasNext()) {
+ values.next();
+ values.remove();
+ }
+ return oldCount;
+ }
+
+ public int setCount(K element, int count) {
+ return setCountImpl(this, element, count);
+ }
+
+ public boolean setCount(K element, int oldCount, int newCount) {
+ return setCountImpl(this, element, oldCount, newCount);
+ }
+
+ @Override public boolean removeAll(Collection<?> c) {
+ return Iterators.removeAll(iterator(), c);
+ }
+
+ @Override public boolean retainAll(Collection<?> c) {
+ return Iterators.retainAll(iterator(), c);
+ }
+
+ public Set<K> elementSet() {
+ return keySet();
+ }
+
+ public Set<Entry<K>> entrySet() {
+ // TODO: lazy init?
+ return new AbstractSet<Entry<K>>() {
+ @Override public int size() {
+ return keyCount.elementSet().size();
+ }
+
+ @Override public Iterator<Entry<K>> iterator() {
+ final Iterator<K> keyIterator = new DistinctKeyIterator();
+ return new Iterator<Entry<K>>() {
+ public boolean hasNext() {
+ return keyIterator.hasNext();
+ }
+ public Entry<K> next() {
+ final K key = keyIterator.next();
+ return new Multisets.AbstractEntry<K>() {
+ public K getElement() {
+ return key;
+ }
+ public int getCount() {
+ return keyCount.count(key);
+ }
+ };
+ }
+ public void remove() {
+ keyIterator.remove();
+ }
+ };
+ }
+ };
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ return keyCount.equals(object);
+ }
+
+ @Override public int hashCode() {
+ return keyCount.hashCode();
+ }
+
+ @Override public String toString() {
+ return keyCount.toString(); // XXX observe order?
+ }
+ }
+
+ private transient Collection<V> valuesCollection;
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The iterator generated by the returned collection traverses the values
+ * in the order they were added to the multimap.
+ */
+ public Collection<V> values() {
+ Collection<V> result = valuesCollection;
+ if (result == null) {
+ valuesCollection = result = new AbstractCollection<V>() {
+ @Override public int size() {
+ return keyCount.size();
+ }
+ @Override public Iterator<V> iterator() {
+ final Iterator<Node<K, V>> nodes = new NodeIterator();
+ return new Iterator<V>() {
+ public boolean hasNext() {
+ return nodes.hasNext();
+ }
+ public V next() {
+ return nodes.next().value;
+ }
+ public void remove() {
+ nodes.remove();
+ }
+ };
+ }
+ };
+ }
+ return result;
+ }
+
+ private transient Collection<Entry<K, V>> entries;
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The iterator generated by the returned collection traverses the entries
+ * in the order they were added to the multimap.
+ *
+ * <p>An entry's {@link Entry#getKey} method always returns the same key,
+ * regardless of what happens subsequently. As long as the corresponding
+ * key-value mapping is not removed from the multimap, {@link Entry#getValue}
+ * returns the value from the multimap, which may change over time, and {@link
+ * Entry#setValue} modifies that value. Removing the mapping from the
+ * multimap does not alter the value returned by {@code getValue()}, though a
+ * subsequent {@code setValue()} call won't update the multimap but will lead
+ * to a revised value being returned by {@code getValue()}.
+ */
+ public Collection<Entry<K, V>> entries() {
+ Collection<Entry<K, V>> result = entries;
+ if (result == null) {
+ entries = result = new AbstractCollection<Entry<K, V>>() {
+ @Override public int size() {
+ return keyCount.size();
+ }
+
+ @Override public Iterator<Entry<K, V>> iterator() {
+ final Iterator<Node<K, V>> nodes = new NodeIterator();
+ return new Iterator<Entry<K, V>>() {
+ public boolean hasNext() {
+ return nodes.hasNext();
+ }
+
+ public Entry<K, V> next() {
+ final Node<K, V> node = nodes.next();
+ return new AbstractMapEntry<K, V>() {
+ @Override public K getKey() {
+ return node.key;
+ }
+ @Override public V getValue() {
+ return node.value;
+ }
+ @Override public V setValue(V value) {
+ V oldValue = node.value;
+ node.value = value;
+ return oldValue;
+ }
+ };
+ }
+
+ public void remove() {
+ nodes.remove();
+ }
+ };
+ }
+ };
+ }
+ return result;
+ }
+
+ private class AsMapEntries extends AbstractSet<Entry<K, Collection<V>>> {
+
+ // TODO: Override contains() and remove() for better performance.
+
+ @Override public int size() {
+ return keyCount.elementSet().size();
+ }
+
+ @Override public Iterator<Entry<K, Collection<V>>> iterator() {
+ final Iterator<K> keyIterator = new DistinctKeyIterator();
+ return new Iterator<Entry<K, Collection<V>>>() {
+ public boolean hasNext() {
+ return keyIterator.hasNext();
+ }
+
+ public Entry<K, Collection<V>> next() {
+ final K key = keyIterator.next();
+ return new AbstractMapEntry<K, Collection<V>>() {
+ @Override public K getKey() {
+ return key;
+ }
+
+ @Override public Collection<V> getValue() {
+ return LinkedListMultimap.this.get(key);
+ }
+ };
+ }
+
+ public void remove() {
+ keyIterator.remove();
+ }
+ };
+ }
+ }
+
+ private transient Map<K, Collection<V>> map;
+
+ public Map<K, Collection<V>> asMap() {
+ Map<K, Collection<V>> result = map;
+ if (result == null) {
+ map = result = new AbstractMap<K, Collection<V>>() {
+ Set<Entry<K, Collection<V>>> entrySet;
+
+ @Override public Set<Entry<K, Collection<V>>> entrySet() {
+ Set<Entry<K, Collection<V>>> result = entrySet;
+ if (result == null) {
+ entrySet = result = new AsMapEntries();
+ }
+ return result;
+ }
+
+ // The following methods are included for performance.
+
+ @Override public boolean containsKey(@Nullable Object key) {
+ return LinkedListMultimap.this.containsKey(key);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override public Collection<V> get(@Nullable Object key) {
+ Collection<V> collection = LinkedListMultimap.this.get((K) key);
+ return collection.isEmpty() ? null : collection;
+ }
+
+ @Override public Collection<V> remove(@Nullable Object key) {
+ Collection<V> collection = removeAll(key);
+ return collection.isEmpty() ? null : collection;
+ }
+ };
+ }
+
+ return result;
+ }
+
+ // Comparison and hashing
+
+ /**
+ * Compares the specified object to this multimap for equality.
+ *
+ * <p>Two {@code ListMultimap} instances are equal if, for each key, they
+ * contain the same values in the same order. If the value orderings disagree,
+ * the multimaps will not be considered equal.
+ */
+ @Override public boolean equals(@Nullable Object other) {
+ if (other == this) {
+ return true;
+ }
+ if (other instanceof Multimap) {
+ Multimap<?, ?> that = (Multimap<?, ?>) other;
+ return this.asMap().equals(that.asMap());
+ }
+ return false;
+ }
+
+ /**
+ * Returns the hash code for this multimap.
+ *
+ * <p>The hash code of a multimap is defined as the hash code of the map view,
+ * as returned by {@link Multimap#asMap}.
+ */
+ @Override public int hashCode() {
+ return asMap().hashCode();
+ }
+
+ /**
+ * Returns a string representation of the multimap, generated by calling
+ * {@code toString} on the map returned by {@link Multimap#asMap}.
+ *
+ * @return a string representation of the multimap
+ */
+ @Override public String toString() {
+ return asMap().toString();
+ }
+
+ /**
+ * @serialData the number of distinct keys, and then for each distinct key:
+ * the first key, the number of values for that key, and the key's values,
+ * followed by successive keys and values from the entries() ordering
+ */
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ stream.defaultWriteObject();
+ stream.writeInt(size());
+ for (Entry<K, V> entry : entries()) {
+ stream.writeObject(entry.getKey());
+ stream.writeObject(entry.getValue());
+ }
+ }
+
+ private void readObject(ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+ keyCount = LinkedHashMultiset.create();
+ keyToKeyHead = Maps.newHashMap();
+ keyToKeyTail = Maps.newHashMap();
+ int size = stream.readInt();
+ for (int i = 0; i < size; i++) {
+ @SuppressWarnings("unchecked") // reading data stored by writeObject
+ K key = (K) stream.readObject();
+ @SuppressWarnings("unchecked") // reading data stored by writeObject
+ V value = (V) stream.readObject();
+ put(key, value);
+ }
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/ListMultimap.java b/src/com/google/common/collect/ListMultimap.java
new file mode 100644
index 0000000..d55a697
--- /dev/null
+++ b/src/com/google/common/collect/ListMultimap.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * A {@code Multimap} that can hold duplicate key-value pairs and that maintains
+ * the insertion ordering of values for a given key.
+ *
+ * <p>The {@link #get}, {@link #removeAll}, and {@link #replaceValues} methods
+ * each return a {@link List} of values. Though the method signature doesn't say
+ * so explicitly, the map returned by {@link #asMap} has {@code List} values.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+public interface ListMultimap<K, V> extends Multimap<K, V> {
+ /**
+ * {@inheritDoc}
+ *
+ * <p>Because the values for a given key may have duplicates and follow the
+ * insertion ordering, this method returns a {@link List}, instead of the
+ * {@link java.util.Collection} specified in the {@link Multimap} interface.
+ */
+ List<V> get(@Nullable K key);
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>Because the values for a given key may have duplicates and follow the
+ * insertion ordering, this method returns a {@link List}, instead of the
+ * {@link java.util.Collection} specified in the {@link Multimap} interface.
+ */
+ List<V> removeAll(@Nullable Object key);
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>Because the values for a given key may have duplicates and follow the
+ * insertion ordering, this method returns a {@link List}, instead of the
+ * {@link java.util.Collection} specified in the {@link Multimap} interface.
+ */
+ List<V> replaceValues(K key, Iterable<? extends V> values);
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>Though the method signature doesn't say so explicitly, the returned map
+ * has {@link List} values.
+ */
+ Map<K, Collection<V>> asMap();
+
+ /**
+ * Compares the specified object to this multimap for equality.
+ *
+ * <p>Two {@code ListMultimap} instances are equal if, for each key, they
+ * contain the same values in the same order. If the value orderings disagree,
+ * the multimaps will not be considered equal.
+ */
+ boolean equals(@Nullable Object obj);
+}
diff --git a/src/com/google/common/collect/Lists.java b/src/com/google/common/collect/Lists.java
new file mode 100644
index 0000000..868e750
--- /dev/null
+++ b/src/com/google/common/collect/Lists.java
@@ -0,0 +1,503 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Function;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkElementIndex;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.io.Serializable;
+import java.util.AbstractList;
+import java.util.AbstractSequentialList;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.RandomAccess;
+
+import javax.annotation.Nullable;
+
+/**
+ * Static utility methods pertaining to {@link List} instances. Also see this
+ * class's counterparts {@link Sets} and {@link Maps}.
+ *
+ * @author Kevin Bourrillion
+ * @author Mike Bostock
+ */
+@GwtCompatible
+public final class Lists {
+ private Lists() {}
+
+ // ArrayList
+
+ /**
+ * Creates a <i>mutable</i>, empty {@code ArrayList} instance.
+ *
+ * <p><b>Note:</b> if mutability is not required, use {@link
+ * ImmutableList#of()} instead.
+ *
+ * @return a new, empty {@code ArrayList}
+ */
+ @GwtCompatible(serializable = true)
+ public static <E> ArrayList<E> newArrayList() {
+ return new ArrayList<E>();
+ }
+
+ /**
+ * Creates a <i>mutable</i> {@code ArrayList} instance containing the given
+ * elements.
+ *
+ * <p><b>Note:</b> if mutability is not required and the elements are
+ * non-null, use {@link ImmutableList#of(Object[])} instead.
+ *
+ * @param elements the elements that the list should contain, in order
+ * @return a new {@code ArrayList} containing those elements
+ */
+ @GwtCompatible(serializable = true)
+ public static <E> ArrayList<E> newArrayList(E... elements) {
+ checkNotNull(elements); // for GWT
+ // Avoid integer overflow when a large array is passed in
+ int capacity = computeArrayListCapacity(elements.length);
+ ArrayList<E> list = new ArrayList<E>(capacity);
+ Collections.addAll(list, elements);
+ return list;
+ }
+
+ @VisibleForTesting static int computeArrayListCapacity(int arraySize) {
+ checkArgument(arraySize >= 0);
+
+ // TODO: Figure out the right behavior, and document it
+ return (int) Math.min(5L + arraySize + (arraySize / 10), Integer.MAX_VALUE);
+ }
+
+ /**
+ * Creates a <i>mutable</i> {@code ArrayList} instance containing the given
+ * elements.
+ *
+ * <p><b>Note:</b> if mutability is not required and the elements are
+ * non-null, use {@link ImmutableList#copyOf(Iterator)} instead.
+ *
+ * @param elements the elements that the list should contain, in order
+ * @return a new {@code ArrayList} containing those elements
+ */
+ @GwtCompatible(serializable = true)
+ public static <E> ArrayList<E> newArrayList(Iterable<? extends E> elements) {
+ checkNotNull(elements); // for GWT
+ // Let ArrayList's sizing logic work, if possible
+ if (elements instanceof Collection) {
+ @SuppressWarnings("unchecked")
+ Collection<? extends E> collection = (Collection<? extends E>) elements;
+ return new ArrayList<E>(collection);
+ } else {
+ return newArrayList(elements.iterator());
+ }
+ }
+
+ /**
+ * Creates a <i>mutable</i> {@code ArrayList} instance containing the given
+ * elements.
+ *
+ * <p><b>Note:</b> if mutability is not required and the elements are
+ * non-null, use {@link ImmutableList#copyOf(Iterator)} instead.
+ *
+ * @param elements the elements that the list should contain, in order
+ * @return a new {@code ArrayList} containing those elements
+ */
+ @GwtCompatible(serializable = true)
+ public static <E> ArrayList<E> newArrayList(Iterator<? extends E> elements) {
+ checkNotNull(elements); // for GWT
+ ArrayList<E> list = newArrayList();
+ while (elements.hasNext()) {
+ list.add(elements.next());
+ }
+ return list;
+ }
+
+ /**
+ * Creates an {@code ArrayList} instance backed by an array of the
+ * <i>exact</i> size specified; equivalent to
+ * {@link ArrayList#ArrayList(int)}.
+ *
+ * <p><b>Note:</b> if you know the exact size your list will be, consider
+ * using a fixed-size list ({@link Arrays#asList(Object[])}) or an {@link
+ * ImmutableList} instead of a growable {@link ArrayList}.
+ *
+ * <p><b>Note:</b> If you have only an <i>estimate</i> of the eventual size of
+ * the list, consider padding this estimate by a suitable amount, or simply
+ * use {@link #newArrayListWithExpectedSize(int)} instead.
+ *
+ * @param initialArraySize the exact size of the initial backing array for
+ * the returned array list ({@code ArrayList} documentation calls this
+ * value the "capacity")
+ * @return a new, empty {@code ArrayList} which is guaranteed not to resize
+ * itself unless its size reaches {@code initialArraySize + 1}
+ * @throws IllegalArgumentException if {@code initialArraySize} is negative
+ */
+ @GwtCompatible(serializable = true)
+ public static <E> ArrayList<E> newArrayListWithCapacity(
+ int initialArraySize) {
+ return new ArrayList<E>(initialArraySize);
+ }
+
+ /**
+ * Creates an {@code ArrayList} instance sized appropriately to hold an
+ * <i>estimated</i> number of elements without resizing. A small amount of
+ * padding is added in case the estimate is low.
+ *
+ * <p><b>Note:</b> If you know the <i>exact</i> number of elements the list
+ * will hold, or prefer to calculate your own amount of padding, refer to
+ * {@link #newArrayListWithCapacity(int)}.
+ *
+ * @param estimatedSize an estimate of the eventual {@link List#size()} of
+ * the new list
+ * @return a new, empty {@code ArrayList}, sized appropriately to hold the
+ * estimated number of elements
+ * @throws IllegalArgumentException if {@code estimatedSize} is negative
+ */
+ @GwtCompatible(serializable = true)
+ public static <E> ArrayList<E> newArrayListWithExpectedSize(
+ int estimatedSize) {
+ return new ArrayList<E>(computeArrayListCapacity(estimatedSize));
+ }
+
+ // LinkedList
+
+ /**
+ * Creates an empty {@code LinkedList} instance.
+ *
+ * <p><b>Note:</b> if you need an immutable empty {@link List}, use
+ * {@link Collections#emptyList} instead.
+ *
+ * @return a new, empty {@code LinkedList}
+ */
+ @GwtCompatible(serializable = true)
+ public static <E> LinkedList<E> newLinkedList() {
+ return new LinkedList<E>();
+ }
+
+ /**
+ * Creates a {@code LinkedList} instance containing the given elements.
+ *
+ * @param elements the elements that the list should contain, in order
+ * @return a new {@code LinkedList} containing those elements
+ */
+ @GwtCompatible(serializable = true)
+ public static <E> LinkedList<E> newLinkedList(
+ Iterable<? extends E> elements) {
+ LinkedList<E> list = newLinkedList();
+ for (E element : elements) {
+ list.add(element);
+ }
+ return list;
+ }
+
+ /**
+ * Returns an unmodifiable list containing the specified first element and
+ * backed by the specified array of additional elements. Changes to the {@code
+ * rest} array will be reflected in the returned list. Unlike {@link
+ * Arrays#asList}, the returned list is unmodifiable.
+ *
+ * <p>This is useful when a varargs method needs to use a signature such as
+ * {@code (Foo firstFoo, Foo... moreFoos)}, in order to avoid overload
+ * ambiguity or to enforce a minimum argument count.
+ *
+ * <p>The returned list is serializable and implements {@link RandomAccess}.
+ *
+ * @param first the first element
+ * @param rest an array of additional elements, possibly empty
+ * @return an unmodifiable list containing the specified elements
+ */
+ public static <E> List<E> asList(@Nullable E first, E[] rest) {
+ return new OnePlusArrayList<E>(first, rest);
+ }
+
+ /** @see Lists#asList(Object, Object[]) */
+ private static class OnePlusArrayList<E> extends AbstractList<E>
+ implements Serializable, RandomAccess {
+ final E first;
+ final E[] rest;
+
+ OnePlusArrayList(@Nullable E first, E[] rest) {
+ this.first = first;
+ this.rest = checkNotNull(rest);
+ }
+ @Override public int size() {
+ return rest.length + 1;
+ }
+ @Override public E get(int index) {
+ // check explicitly so the IOOBE will have the right message
+ checkElementIndex(index, size());
+ return (index == 0) ? first : rest[index - 1];
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Returns an unmodifiable list containing the specified first and second
+ * element, and backed by the specified array of additional elements. Changes
+ * to the {@code rest} array will be reflected in the returned list. Unlike
+ * {@link Arrays#asList}, the returned list is unmodifiable.
+ *
+ * <p>This is useful when a varargs method needs to use a signature such as
+ * {@code (Foo firstFoo, Foo secondFoo, Foo... moreFoos)}, in order to avoid
+ * overload ambiguity or to enforce a minimum argument count.
+ *
+ * <p>The returned list is serializable and implements {@link RandomAccess}.
+ *
+ * @param first the first element
+ * @param second the second element
+ * @param rest an array of additional elements, possibly empty
+ * @return an unmodifiable list containing the specified elements
+ */
+ public static <E> List<E> asList(
+ @Nullable E first, @Nullable E second, E[] rest) {
+ return new TwoPlusArrayList<E>(first, second, rest);
+ }
+
+ /** @see Lists#asList(Object, Object, Object[]) */
+ private static class TwoPlusArrayList<E> extends AbstractList<E>
+ implements Serializable, RandomAccess {
+ final E first;
+ final E second;
+ final E[] rest;
+
+ TwoPlusArrayList(@Nullable E first, @Nullable E second, E[] rest) {
+ this.first = first;
+ this.second = second;
+ this.rest = checkNotNull(rest);
+ }
+ @Override public int size() {
+ return rest.length + 2;
+ }
+ @Override public E get(int index) {
+ switch (index) {
+ case 0:
+ return first;
+ case 1:
+ return second;
+ default:
+ // check explicitly so the IOOBE will have the right message
+ checkElementIndex(index, size());
+ return rest[index - 2];
+ }
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Returns a list that applies {@code function} to each element of {@code
+ * fromList}. The returned list is a transformed view of {@code fromList};
+ * changes to {@code fromList} will be reflected in the returned list and vice
+ * versa.
+ *
+ * <p>Since functions are not reversible, the transform is one-way and new
+ * items cannot be stored in the returned list. The {@code add},
+ * {@code addAll} and {@code set} methods are unsupported in the returned
+ * list.
+ *
+ * <p>The function is applied lazily, invoked when needed. This is necessary
+ * for the returned list to be a view, but it means that the function will be
+ * applied many times for bulk operations like {@link List#contains} and
+ * {@link List#hashCode}. For this to perform well, {@code function} should be
+ * fast. To avoid lazy evaluation when the returned list doesn't need to be a
+ * view, copy the returned list into a new list of your choosing.
+ *
+ * <p>If {@code fromList} implements {@link RandomAccess}, so will the
+ * returned list. The returned list always implements {@link Serializable},
+ * but serialization will succeed only when {@code fromList} and
+ * {@code function} are serializable. The returned list is threadsafe if the
+ * supplied list and function are.
+ */
+ public static <F, T> List<T> transform(
+ List<F> fromList, Function<? super F, ? extends T> function) {
+ return (fromList instanceof RandomAccess)
+ ? new TransformingRandomAccessList<F, T>(fromList, function)
+ : new TransformingSequentialList<F, T>(fromList, function);
+ }
+
+ /**
+ * Implementation of a sequential transforming list.
+ *
+ * @see Lists#transform
+ */
+ private static class TransformingSequentialList<F, T>
+ extends AbstractSequentialList<T> implements Serializable {
+ final List<F> fromList;
+ final Function<? super F, ? extends T> function;
+
+ TransformingSequentialList(
+ List<F> fromList, Function<? super F, ? extends T> function) {
+ this.fromList = checkNotNull(fromList);
+ this.function = checkNotNull(function);
+ }
+ /**
+ * The default implementation inherited is based on iteration and removal of
+ * each element which can be overkill. That's why we forward this call
+ * directly to the backing list.
+ */
+ @Override public void clear() {
+ fromList.clear();
+ }
+ @Override public int size() {
+ return fromList.size();
+ }
+ @Override public ListIterator<T> listIterator(final int index) {
+ final ListIterator<F> delegate = fromList.listIterator(index);
+ return new ListIterator<T>() {
+ public void add(T e) {
+ throw new UnsupportedOperationException();
+ }
+
+ public boolean hasNext() {
+ return delegate.hasNext();
+ }
+
+ public boolean hasPrevious() {
+ return delegate.hasPrevious();
+ }
+
+ public T next() {
+ return function.apply(delegate.next());
+ }
+
+ public int nextIndex() {
+ return delegate.nextIndex();
+ }
+
+ public T previous() {
+ return function.apply(delegate.previous());
+ }
+
+ public int previousIndex() {
+ return delegate.previousIndex();
+ }
+
+ public void remove() {
+ delegate.remove();
+ }
+
+ public void set(T e) {
+ throw new UnsupportedOperationException("not supported");
+ }
+ };
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Implementation of a transforming random access list. We try to make as many
+ * of these methods pass-through to the source list as possible so that the
+ * performance characteristics of the source list and transformed list are
+ * similar.
+ *
+ * @see Lists#transform
+ */
+ private static class TransformingRandomAccessList<F, T>
+ extends AbstractList<T> implements RandomAccess, Serializable {
+ final List<F> fromList;
+ final Function<? super F, ? extends T> function;
+
+ TransformingRandomAccessList(
+ List<F> fromList, Function<? super F, ? extends T> function) {
+ this.fromList = checkNotNull(fromList);
+ this.function = checkNotNull(function);
+ }
+ @Override public void clear() {
+ fromList.clear();
+ }
+ @Override public T get(int index) {
+ return function.apply(fromList.get(index));
+ }
+ @Override public boolean isEmpty() {
+ return fromList.isEmpty();
+ }
+ @Override public T remove(int index) {
+ return function.apply(fromList.remove(index));
+ }
+ @Override public int size() {
+ return fromList.size();
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Returns consecutive {@linkplain List#subList(int, int) sublists} of a list,
+ * each of the same size (the final list may be smaller). For example,
+ * partitioning a list containing {@code [a, b, c, d, e]} with a partition
+ * size of 3 yields {@code [[a, b, c], [d, e]]} -- an outer list containing
+ * two inner lists of three and two elements, all in the original order.
+ *
+ * <p>The outer list is unmodifiable, but reflects the latest state of the
+ * source list. The inner lists are sublist views of the original list,
+ * produced on demand using {@link List#subList(int, int)}, and are subject
+ * to all the usual caveats about modification as explained in that API.
+ *
+ * @param list the list to return consecutive sublists of
+ * @param size the desired size of each sublist (the last may be
+ * smaller)
+ * @return a list of consecutive sublists
+ * @throws IllegalArgumentException if {@code partitionSize} is nonpositive
+ */
+ public static <T> List<List<T>> partition(List<T> list, int size) {
+ checkNotNull(list);
+ checkArgument(size > 0);
+ return (list instanceof RandomAccess)
+ ? new RandomAccessPartition<T>(list, size)
+ : new Partition<T>(list, size);
+ }
+
+ private static class Partition<T> extends AbstractList<List<T>> {
+ final List<T> list;
+ final int size;
+
+ Partition(List<T> list, int size) {
+ this.list = list;
+ this.size = size;
+ }
+
+ @Override public List<T> get(int index) {
+ int listSize = size();
+ checkElementIndex(index, listSize);
+ int start = index * size;
+ int end = Math.min(start + size, list.size());
+ return Platform.subList(list, start, end);
+ }
+
+ @Override public int size() {
+ return (list.size() + size - 1) / size;
+ }
+
+ @Override public boolean isEmpty() {
+ return list.isEmpty();
+ }
+ }
+
+ private static class RandomAccessPartition<T> extends Partition<T>
+ implements RandomAccess {
+ RandomAccessPartition(List<T> list, int size) {
+ super(list, size);
+ }
+ }
+}
diff --git a/src/com/google/common/collect/MapConstraint.java b/src/com/google/common/collect/MapConstraint.java
new file mode 100644
index 0000000..edf2513
--- /dev/null
+++ b/src/com/google/common/collect/MapConstraint.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import javax.annotation.Nullable;
+
+@GwtCompatible
+interface MapConstraint<K, V> {
+ /**
+ * Throws a suitable {@code RuntimeException} if the specified key or value is
+ * illegal. Typically this is either a {@link NullPointerException}, an
+ * {@link IllegalArgumentException}, or a {@link ClassCastException}, though
+ * an application-specific exception class may be used if appropriate.
+ */
+ void checkKeyValue(@Nullable K key, @Nullable V value);
+
+ /**
+ * Returns a brief human readable description of this constraint, such as
+ * "Not null".
+ */
+ String toString();
+}
diff --git a/src/com/google/common/collect/MapDifference.java b/src/com/google/common/collect/MapDifference.java
new file mode 100644
index 0000000..fdcd006
--- /dev/null
+++ b/src/com/google/common/collect/MapDifference.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * An object representing the differences between two maps.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+public interface MapDifference<K, V> {
+ /**
+ * Returns {@code true} if there are no differences between the two maps;
+ * that is, if the maps are equal.
+ */
+ boolean areEqual();
+
+ /**
+ * Returns an unmodifiable map containing the entries from the left map whose
+ * keys are not present in the right map.
+ */
+ Map<K, V> entriesOnlyOnLeft();
+
+ /**
+ * Returns an unmodifiable map containing the entries from the right map whose
+ * keys are not present in the left map.
+ */
+ Map<K, V> entriesOnlyOnRight();
+
+ /**
+ * Returns an unmodifiable map containing the entries that appear in both
+ * maps; that is, the intersection of the two maps.
+ */
+ Map<K, V> entriesInCommon();
+
+ /**
+ * Returns an unmodifiable map describing keys that appear in both maps, but
+ * with different values.
+ */
+ Map<K, ValueDifference<V>> entriesDiffering();
+
+ /**
+ * Compares the specified object with this instance for equality. Returns
+ * {@code true} if the given object is also a {@code MapDifference} and the
+ * values returned by the {@link #entriesOnlyOnLeft()}, {@link
+ * #entriesOnlyOnRight()}, {@link #entriesInCommon()} and {@link
+ * #entriesDiffering()} of the two instances are equal.
+ */
+ boolean equals(@Nullable Object object);
+
+ /**
+ * Returns the hash code for this instance. This is defined as the hash code
+ * of <pre> {@code
+ *
+ * Arrays.asList(entriesOnlyOnLeft(), entriesOnlyOnRight(),
+ * entriesInCommon(), entriesDiffering())}</pre>
+ */
+ int hashCode();
+
+ /**
+ * A difference between the mappings from two maps with the same key. The
+ * {@code leftValue()} and {@code rightValue} are not equal, and one but not
+ * both of them may be null.
+ */
+ interface ValueDifference<V> {
+ /**
+ * Returns the value from the left map (possibly null).
+ */
+ V leftValue();
+
+ /**
+ * Returns the value from the right map (possibly null).
+ */
+ V rightValue();
+
+ /**
+ * Two instances are considered equal if their {@link #leftValue()}
+ * values are equal and their {@link #rightValue()} values are also equal.
+ */
+ @Override boolean equals(@Nullable Object other);
+
+ /**
+ * The hash code equals the value
+ * {@code Arrays.asList(leftValue(), rightValue()).hashCode()}.
+ */
+ @Override int hashCode();
+ }
+
+}
diff --git a/src/com/google/common/collect/MapMaker.java b/src/com/google/common/collect/MapMaker.java
new file mode 100644
index 0000000..5844646
--- /dev/null
+++ b/src/com/google/common/collect/MapMaker.java
@@ -0,0 +1,1118 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.FinalizableReferenceQueue;
+import com.google.common.base.FinalizableSoftReference;
+import com.google.common.base.FinalizableWeakReference;
+import com.google.common.base.Function;
+import com.google.common.collect.CustomConcurrentHashMap.ComputingStrategy;
+import com.google.common.collect.CustomConcurrentHashMap.Internals;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.lang.ref.SoftReference;
+import java.lang.ref.WeakReference;
+import java.lang.reflect.Field;
+import java.util.Map;
+import java.util.TimerTask;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * A {@link ConcurrentMap} builder, providing any combination of these
+ * features: {@linkplain SoftReference soft} or {@linkplain WeakReference
+ * weak} keys, soft or weak values, timed expiration, and on-demand
+ * computation of values. Usage example: <pre> {@code
+ *
+ * ConcurrentMap<Key, Graph> graphs = new MapMaker()
+ * .concurrencyLevel(32)
+ * .softKeys()
+ * .weakValues()
+ * .expiration(30, TimeUnit.MINUTES)
+ * .makeComputingMap(
+ * new Function<Key, Graph>() {
+ * public Graph apply(Key key) {
+ * return createExpensiveGraph(key);
+ * }
+ * });}</pre>
+ *
+ * These features are all optional; {@code new MapMaker().makeMap()}
+ * returns a valid concurrent map that behaves exactly like a
+ * {@link ConcurrentHashMap}.
+ *
+ * The returned map is implemented as a hash table with similar performance
+ * characteristics to {@link ConcurrentHashMap}. It supports all optional
+ * operations of the {@code ConcurrentMap} interface. It does not permit
+ * null keys or values. It is serializable; however, serializing a map that
+ * uses soft or weak references can give unpredictable results.
+ *
+ * <p><b>Note:</b> by default, the returned map uses equality comparisons
+ * (the {@link Object#equals(Object) equals} method) to determine equality
+ * for keys or values. However, if {@link #weakKeys()} or {@link
+ * #softKeys()} was specified, the map uses identity ({@code ==})
+ * comparisons instead for keys. Likewise, if {@link #weakValues()} or
+ * {@link #softValues()} was specified, the map uses identity comparisons
+ * for values.
+ *
+ * <p>The returned map has <i>weakly consistent iteration</i>: an iterator
+ * over one of the map's view collections may reflect some, all or none of
+ * the changes made to the map after the iterator was created.
+ *
+ * <p>An entry whose key or value is reclaimed by the garbage collector
+ * immediately disappears from the map. (If the default settings of strong
+ * keys and strong values are used, this will never happen.) The client can
+ * never observe a partially-reclaimed entry. Any {@link java.util.Map.Entry}
+ * instance retrieved from the map's {@linkplain Map#entrySet() entry set}
+ * is snapshot of that entry's state at the time of retrieval.
+ *
+ * <p>{@code new MapMaker().weakKeys().makeMap()} can almost always be
+ * used as a drop-in replacement for {@link java.util.WeakHashMap}, adding
+ * concurrency, asynchronous cleanup, identity-based equality for keys, and
+ * great flexibility.
+ *
+ * @author Bob Lee
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(emulated = true)
+public final class MapMaker {
+ private Strength keyStrength = Strength.STRONG;
+ private Strength valueStrength = Strength.STRONG;
+ private long expirationNanos = 0;
+ private boolean useCustomMap;
+ private final CustomConcurrentHashMap.Builder builder
+ = new CustomConcurrentHashMap.Builder();
+
+ /**
+ * Constructs a new {@code MapMaker} instance with default settings,
+ * including strong keys, strong values, and no automatic expiration.
+ */
+ public MapMaker() {}
+
+ /**
+ * Sets a custom initial capacity (defaults to 16). Resizing this or
+ * any other kind of hash table is a relatively slow operation, so,
+ * when possible, it is a good idea to provide estimates of expected
+ * table sizes.
+ *
+ * @throws IllegalArgumentException if {@code initialCapacity} is
+ * negative
+ * @throws IllegalStateException if an initial capacity was already set
+ */
+ public MapMaker initialCapacity(int initialCapacity) {
+ builder.initialCapacity(initialCapacity);
+ return this;
+ }
+
+ /**
+ * Guides the allowed concurrency among update operations. Used as a
+ * hint for internal sizing. The table is internally partitioned to try
+ * to permit the indicated number of concurrent updates without
+ * contention. Because placement in hash tables is essentially random,
+ * the actual concurrency will vary. Ideally, you should choose a value
+ * to accommodate as many threads as will ever concurrently modify the
+ * table. Using a significantly higher value than you need can waste
+ * space and time, and a significantly lower value can lead to thread
+ * contention. But overestimates and underestimates within an order of
+ * magnitude do not usually have much noticeable impact. A value of one
+ * is appropriate when it is known that only one thread will modify and
+ * all others will only read. Defaults to 16.
+ *
+ * @throws IllegalArgumentException if {@code concurrencyLevel} is
+ * nonpositive
+ * @throws IllegalStateException if a concurrency level was already set
+ */
+ @GwtIncompatible("java.util.concurrent.ConcurrentHashMap concurrencyLevel")
+ public MapMaker concurrencyLevel(int concurrencyLevel) {
+ builder.concurrencyLevel(concurrencyLevel);
+ return this;
+ }
+
+ /**
+ * Specifies that each key (not value) stored in the map should be
+ * wrapped in a {@link WeakReference} (by default, strong references
+ * are used).
+ *
+ * <p><b>Note:</b> the map will use identity ({@code ==}) comparison
+ * to determine equality of weak keys, which may not behave as you expect.
+ * For example, storing a key in the map and then attempting a lookup
+ * using a different but {@link Object#equals(Object) equals}-equivalent
+ * key will always fail.
+ *
+ * @throws IllegalStateException if the key strength was already set
+ * @see WeakReference
+ */
+ @GwtIncompatible("java.lang.ref.WeakReference")
+ public MapMaker weakKeys() {
+ return setKeyStrength(Strength.WEAK);
+ }
+
+ /**
+ * Specifies that each key (not value) stored in the map should be
+ * wrapped in a {@link SoftReference} (by default, strong references
+ * are used).
+ *
+ * <p><b>Note:</b> the map will use identity ({@code ==}) comparison
+ * to determine equality of soft keys, which may not behave as you expect.
+ * For example, storing a key in the map and then attempting a lookup
+ * using a different but {@link Object#equals(Object) equals}-equivalent
+ * key will always fail.
+ *
+ * @throws IllegalStateException if the key strength was already set
+ * @see SoftReference
+ */
+ @GwtIncompatible("java.lang.ref.SoftReference")
+ public MapMaker softKeys() {
+ return setKeyStrength(Strength.SOFT);
+ }
+
+ private MapMaker setKeyStrength(Strength strength) {
+ if (keyStrength != Strength.STRONG) {
+ throw new IllegalStateException("Key strength was already set to "
+ + keyStrength + ".");
+ }
+ keyStrength = strength;
+ useCustomMap = true;
+ return this;
+ }
+
+ /**
+ * Specifies that each value (not key) stored in the map should be
+ * wrapped in a {@link WeakReference} (by default, strong references
+ * are used).
+ *
+ * <p>Weak values will be garbage collected once they are weakly
+ * reachable. This makes them a poor candidate for caching; consider
+ * {@link #softValues()} instead.
+ *
+ * <p><b>Note:</b> the map will use identity ({@code ==}) comparison
+ * to determine equality of weak values. This will notably impact
+ * the behavior of {@link Map#containsValue(Object) containsValue},
+ * {@link ConcurrentMap#remove(Object, Object) remove(Object, Object)},
+ * and {@link ConcurrentMap#replace(Object, Object, Object) replace(K, V, V)}.
+ *
+ * @throws IllegalStateException if the key strength was already set
+ * @see WeakReference
+ */
+ @GwtIncompatible("java.lang.ref.WeakReference")
+ public MapMaker weakValues() {
+ return setValueStrength(Strength.WEAK);
+ }
+
+ /**
+ * Specifies that each value (not key) stored in the map should be
+ * wrapped in a {@link SoftReference} (by default, strong references
+ * are used).
+ *
+ * <p>Soft values will be garbage collected in response to memory
+ * demand, and in a least-recently-used manner. This makes them a
+ * good candidate for caching.
+ *
+ * <p><b>Note:</b> the map will use identity ({@code ==}) comparison
+ * to determine equality of soft values. This will notably impact
+ * the behavior of {@link Map#containsValue(Object) containsValue},
+ * {@link ConcurrentMap#remove(Object, Object) remove(Object, Object)},
+ * and {@link ConcurrentMap#replace(Object, Object, Object) replace(K, V, V)}.
+ *
+ * @throws IllegalStateException if the value strength was already set
+ * @see SoftReference
+ */
+ @GwtIncompatible("java.lang.ref.SoftReference")
+ public MapMaker softValues() {
+ return setValueStrength(Strength.SOFT);
+ }
+
+ private MapMaker setValueStrength(Strength strength) {
+ if (valueStrength != Strength.STRONG) {
+ throw new IllegalStateException("Value strength was already set to "
+ + valueStrength + ".");
+ }
+ valueStrength = strength;
+ useCustomMap = true;
+ return this;
+ }
+
+ /**
+ * Specifies that each entry should be automatically removed from the
+ * map once a fixed duration has passed since the entry's creation.
+ *
+ * @param duration the length of time after an entry is created that it
+ * should be automatically removed
+ * @param unit the unit that {@code duration} is expressed in
+ * @throws IllegalArgumentException if {@code duration} is not positive
+ * @throws IllegalStateException if the expiration time was already set
+ */
+ public MapMaker expiration(long duration, TimeUnit unit) {
+ if (expirationNanos != 0) {
+ throw new IllegalStateException("expiration time of "
+ + expirationNanos + " ns was already set");
+ }
+ if (duration <= 0) {
+ throw new IllegalArgumentException("invalid duration: " + duration);
+ }
+ this.expirationNanos = unit.toNanos(duration);
+ useCustomMap = true;
+ return this;
+ }
+
+ /**
+ * Builds the final map, without on-demand computation of values. This method
+ * does not alter the state of this {@code MapMaker} instance, so it can be
+ * invoked again to create multiple independent maps.
+ *
+ * @param <K> the type of keys to be stored in the returned map
+ * @param <V> the type of values to be stored in the returned map
+ * @return a concurrent map having the requested features
+ */
+ public <K, V> ConcurrentMap<K, V> makeMap() {
+ return useCustomMap
+ ? new StrategyImpl<K, V>(this).map
+ : new ConcurrentHashMap<K, V>(builder.getInitialCapacity(),
+ 0.75f, builder.getConcurrencyLevel());
+ }
+
+ /**
+ * Builds a map that supports atomic, on-demand computation of values. {@link
+ * Map#get} either returns an already-computed value for the given key,
+ * atomically computes it using the supplied function, or, if another thread
+ * is currently computing the value for this key, simply waits for that thread
+ * to finish and returns its computed value. Note that the function may be
+ * executed concurrently by multiple threads, but only for distinct keys.
+ *
+ * <p>If an entry's value has not finished computing yet, query methods
+ * besides {@code get} return immediately as if an entry doesn't exist. In
+ * other words, an entry isn't externally visible until the value's
+ * computation completes.
+ *
+ * <p>{@link Map#get} on the returned map will never return {@code null}. It
+ * may throw:
+ *
+ * <ul>
+ * <li>{@link NullPointerException} if the key is null or the computing
+ * function returns null
+ * <li>{@link ComputationException} if an exception was thrown by the
+ * computing function. If that exception is already of type {@link
+ * ComputationException}, it is propagated directly; otherwise it is
+ * wrapped.
+ * </ul>
+ *
+ * <p><b>Note:</b> Callers of {@code get} <i>must</i> ensure that the key
+ * argument is of type {@code K}. The {@code get} method accepts {@code
+ * Object}, so the key type is not checked at compile time. Passing an object
+ * of a type other than {@code K} can result in that object being unsafely
+ * passed to the computing function as type {@code K}, and unsafely stored in
+ * the map.
+ *
+ * <p>If {@link Map#put} is called before a computation completes, other
+ * threads waiting on the computation will wake up and return the stored
+ * value. When the computation completes, its new result will overwrite the
+ * value that was put in the map manually.
+ *
+ * <p>This method does not alter the state of this {@code MapMaker} instance,
+ * so it can be invoked again to create multiple independent maps.
+ */
+ public <K, V> ConcurrentMap<K, V> makeComputingMap(
+ Function<? super K, ? extends V> computingFunction) {
+ return new StrategyImpl<K, V>(this, computingFunction).map;
+ }
+
+ // Remainder of this file is private implementation details
+
+ private enum Strength {
+ WEAK {
+ @Override boolean equal(Object a, Object b) {
+ return a == b;
+ }
+ @Override int hash(Object o) {
+ return System.identityHashCode(o);
+ }
+ @Override <K, V> ValueReference<K, V> referenceValue(
+ ReferenceEntry<K, V> entry, V value) {
+ return new WeakValueReference<K, V>(value, entry);
+ }
+ @Override <K, V> ReferenceEntry<K, V> newEntry(
+ Internals<K, V, ReferenceEntry<K, V>> internals, K key,
+ int hash, ReferenceEntry<K, V> next) {
+ return (next == null)
+ ? new WeakEntry<K, V>(internals, key, hash)
+ : new LinkedWeakEntry<K, V>(internals, key, hash, next);
+ }
+ @Override <K, V> ReferenceEntry<K, V> copyEntry(
+ K key, ReferenceEntry<K, V> original,
+ ReferenceEntry<K, V> newNext) {
+ WeakEntry<K, V> from = (WeakEntry<K, V>) original;
+ return (newNext == null)
+ ? new WeakEntry<K, V>(from.internals, key, from.hash)
+ : new LinkedWeakEntry<K, V>(
+ from.internals, key, from.hash, newNext);
+ }
+ },
+
+ SOFT {
+ @Override boolean equal(Object a, Object b) {
+ return a == b;
+ }
+ @Override int hash(Object o) {
+ return System.identityHashCode(o);
+ }
+ @Override <K, V> ValueReference<K, V> referenceValue(
+ ReferenceEntry<K, V> entry, V value) {
+ return new SoftValueReference<K, V>(value, entry);
+ }
+ @Override <K, V> ReferenceEntry<K, V> newEntry(
+ Internals<K, V, ReferenceEntry<K, V>> internals, K key,
+ int hash, ReferenceEntry<K, V> next) {
+ return (next == null)
+ ? new SoftEntry<K, V>(internals, key, hash)
+ : new LinkedSoftEntry<K, V>(internals, key, hash, next);
+ }
+ @Override <K, V> ReferenceEntry<K, V> copyEntry(
+ K key, ReferenceEntry<K, V> original,
+ ReferenceEntry<K, V> newNext) {
+ SoftEntry<K, V> from = (SoftEntry<K, V>) original;
+ return (newNext == null)
+ ? new SoftEntry<K, V>(from.internals, key, from.hash)
+ : new LinkedSoftEntry<K, V>(
+ from.internals, key, from.hash, newNext);
+ }
+ },
+
+ STRONG {
+ @Override boolean equal(Object a, Object b) {
+ return a.equals(b);
+ }
+ @Override int hash(Object o) {
+ return o.hashCode();
+ }
+ @Override <K, V> ValueReference<K, V> referenceValue(
+ ReferenceEntry<K, V> entry, V value) {
+ return new StrongValueReference<K, V>(value);
+ }
+ @Override <K, V> ReferenceEntry<K, V> newEntry(
+ Internals<K, V, ReferenceEntry<K, V>> internals, K key,
+ int hash, ReferenceEntry<K, V> next) {
+ return (next == null)
+ ? new StrongEntry<K, V>(internals, key, hash)
+ : new LinkedStrongEntry<K, V>(
+ internals, key, hash, next);
+ }
+ @Override <K, V> ReferenceEntry<K, V> copyEntry(
+ K key, ReferenceEntry<K, V> original,
+ ReferenceEntry<K, V> newNext) {
+ StrongEntry<K, V> from = (StrongEntry<K, V>) original;
+ return (newNext == null)
+ ? new StrongEntry<K, V>(from.internals, key, from.hash)
+ : new LinkedStrongEntry<K, V>(
+ from.internals, key, from.hash, newNext);
+ }
+ };
+
+ /**
+ * Determines if two keys or values are equal according to this
+ * strength strategy.
+ */
+ abstract boolean equal(Object a, Object b);
+
+ /**
+ * Hashes a key according to this strategy.
+ */
+ abstract int hash(Object o);
+
+ /**
+ * Creates a reference for the given value according to this value
+ * strength.
+ */
+ abstract <K, V> ValueReference<K, V> referenceValue(
+ ReferenceEntry<K, V> entry, V value);
+
+ /**
+ * Creates a new entry based on the current key strength.
+ */
+ abstract <K, V> ReferenceEntry<K, V> newEntry(
+ Internals<K, V, ReferenceEntry<K, V>> internals, K key,
+ int hash, ReferenceEntry<K, V> next);
+
+ /**
+ * Creates a new entry and copies the value and other state from an
+ * existing entry.
+ */
+ abstract <K, V> ReferenceEntry<K, V> copyEntry(K key,
+ ReferenceEntry<K, V> original, ReferenceEntry<K, V> newNext);
+ }
+
+ private static class StrategyImpl<K, V> implements Serializable,
+ ComputingStrategy<K, V, ReferenceEntry<K, V>> {
+ final Strength keyStrength;
+ final Strength valueStrength;
+ final ConcurrentMap<K, V> map;
+ final long expirationNanos;
+ Internals<K, V, ReferenceEntry<K, V>> internals;
+
+ StrategyImpl(MapMaker maker) {
+ this.keyStrength = maker.keyStrength;
+ this.valueStrength = maker.valueStrength;
+ this.expirationNanos = maker.expirationNanos;
+
+ map = maker.builder.buildMap(this);
+ }
+
+ StrategyImpl(
+ MapMaker maker, Function<? super K, ? extends V> computer) {
+ this.keyStrength = maker.keyStrength;
+ this.valueStrength = maker.valueStrength;
+ this.expirationNanos = maker.expirationNanos;
+
+ map = maker.builder.buildComputingMap(this, computer);
+ }
+
+ public void setValue(ReferenceEntry<K, V> entry, V value) {
+ setValueReference(
+ entry, valueStrength.referenceValue(entry, value));
+ if (expirationNanos > 0) {
+ scheduleRemoval(entry.getKey(), value);
+ }
+ }
+
+ void scheduleRemoval(K key, V value) {
+ /*
+ * TODO: Keep weak reference to map, too. Build a priority
+ * queue out of the entries themselves instead of creating a
+ * task per entry. Then, we could have one recurring task per
+ * map (which would clean the entire map and then reschedule
+ * itself depending upon when the next expiration comes). We
+ * also want to avoid removing an entry prematurely if the
+ * entry was set to the same value again.
+ */
+ final WeakReference<K> keyReference = new WeakReference<K>(key);
+ final WeakReference<V> valueReference = new WeakReference<V>(value);
+ ExpirationTimer.instance.schedule(
+ new TimerTask() {
+ @Override public void run() {
+ K key = keyReference.get();
+ if (key != null) {
+ // Remove if the value is still the same.
+ map.remove(key, valueReference.get());
+ }
+ }
+ }, TimeUnit.NANOSECONDS.toMillis(expirationNanos));
+ }
+
+ public boolean equalKeys(K a, Object b) {
+ return keyStrength.equal(a, b);
+ }
+
+ public boolean equalValues(V a, Object b) {
+ return valueStrength.equal(a, b);
+ }
+
+ public int hashKey(Object key) {
+ return keyStrength.hash(key);
+ }
+
+ public K getKey(ReferenceEntry<K, V> entry) {
+ return entry.getKey();
+ }
+
+ public int getHash(ReferenceEntry<K, V> entry) {
+ return entry.getHash();
+ }
+
+ public ReferenceEntry<K, V> newEntry(
+ K key, int hash, ReferenceEntry<K, V> next) {
+ return keyStrength.newEntry(internals, key, hash, next);
+ }
+
+ public ReferenceEntry<K, V> copyEntry(K key,
+ ReferenceEntry<K, V> original, ReferenceEntry<K, V> newNext) {
+ ValueReference<K, V> valueReference = original.getValueReference();
+ if (valueReference == COMPUTING) {
+ ReferenceEntry<K, V> newEntry
+ = newEntry(key, original.getHash(), newNext);
+ newEntry.setValueReference(
+ new FutureValueReference(original, newEntry));
+ return newEntry;
+ } else {
+ ReferenceEntry<K, V> newEntry
+ = newEntry(key, original.getHash(), newNext);
+ newEntry.setValueReference(valueReference.copyFor(newEntry));
+ return newEntry;
+ }
+ }
+
+ /**
+ * Waits for a computation to complete. Returns the result of the
+ * computation or null if none was available.
+ */
+ public V waitForValue(ReferenceEntry<K, V> entry)
+ throws InterruptedException {
+ ValueReference<K, V> valueReference = entry.getValueReference();
+ if (valueReference == COMPUTING) {
+ synchronized (entry) {
+ while ((valueReference = entry.getValueReference())
+ == COMPUTING) {
+ entry.wait();
+ }
+ }
+ }
+ return valueReference.waitForValue();
+ }
+
+ /**
+ * Used by CustomConcurrentHashMap to retrieve values. Returns null
+ * instead of blocking or throwing an exception.
+ */
+ public V getValue(ReferenceEntry<K, V> entry) {
+ ValueReference<K, V> valueReference = entry.getValueReference();
+ return valueReference.get();
+ }
+
+ public V compute(K key, final ReferenceEntry<K, V> entry,
+ Function<? super K, ? extends V> computer) {
+ V value;
+ try {
+ value = computer.apply(key);
+ } catch (ComputationException e) {
+ // if computer has thrown a computation exception, propagate rather
+ // than wrap
+ setValueReference(entry,
+ new ComputationExceptionReference<K, V>(e.getCause()));
+ throw e;
+ } catch (Throwable t) {
+ setValueReference(
+ entry, new ComputationExceptionReference<K, V>(t));
+ throw new ComputationException(t);
+ }
+
+ if (value == null) {
+ String message
+ = computer + " returned null for key " + key + ".";
+ setValueReference(
+ entry, new NullOutputExceptionReference<K, V>(message));
+ throw new NullOutputException(message);
+ } else {
+ setValue(entry, value);
+ }
+ return value;
+ }
+
+ /**
+ * Sets the value reference on an entry and notifies waiting
+ * threads.
+ */
+ void setValueReference(ReferenceEntry<K, V> entry,
+ ValueReference<K, V> valueReference) {
+ boolean notifyOthers = (entry.getValueReference() == COMPUTING);
+ entry.setValueReference(valueReference);
+ if (notifyOthers) {
+ synchronized (entry) {
+ entry.notifyAll();
+ }
+ }
+ }
+
+ /**
+ * Points to an old entry where a value is being computed. Used to
+ * support non-blocking copying of entries during table expansion,
+ * removals, etc.
+ */
+ private class FutureValueReference implements ValueReference<K, V> {
+ final ReferenceEntry<K, V> original;
+ final ReferenceEntry<K, V> newEntry;
+
+ FutureValueReference(
+ ReferenceEntry<K, V> original, ReferenceEntry<K, V> newEntry) {
+ this.original = original;
+ this.newEntry = newEntry;
+ }
+
+ public V get() {
+ boolean success = false;
+ try {
+ V value = original.getValueReference().get();
+ success = true;
+ return value;
+ } finally {
+ if (!success) {
+ removeEntry();
+ }
+ }
+ }
+
+ public ValueReference<K, V> copyFor(ReferenceEntry<K, V> entry) {
+ return new FutureValueReference(original, entry);
+ }
+
+ public V waitForValue() throws InterruptedException {
+ boolean success = false;
+ try {
+ // assert that key != null
+ V value = StrategyImpl.this.waitForValue(original);
+ success = true;
+ return value;
+ } finally {
+ if (!success) {
+ removeEntry();
+ }
+ }
+ }
+
+ /**
+ * Removes the entry in the event of an exception. Ideally,
+ * we'd clean up as soon as the computation completes, but we
+ * can't do that without keeping a reference to this entry from
+ * the original.
+ */
+ void removeEntry() {
+ internals.removeEntry(newEntry);
+ }
+ }
+
+ public ReferenceEntry<K, V> getNext(
+ ReferenceEntry<K, V> entry) {
+ return entry.getNext();
+ }
+
+ public void setInternals(
+ Internals<K, V, ReferenceEntry<K, V>> internals) {
+ this.internals = internals;
+ }
+
+ private static final long serialVersionUID = 0;
+
+ private void writeObject(ObjectOutputStream out)
+ throws IOException {
+ // Custom serialization code ensures that the key and value
+ // strengths are written before the map. We'll need them to
+ // deserialize the map entries.
+ out.writeObject(keyStrength);
+ out.writeObject(valueStrength);
+ out.writeLong(expirationNanos);
+
+ // TODO: It is possible for the strategy to try to use the map
+ // or internals during deserialization, for example, if an
+ // entry gets reclaimed. We could detect this case and queue up
+ // removals to be flushed after we deserialize the map.
+ out.writeObject(internals);
+ out.writeObject(map);
+ }
+
+ /**
+ * Fields used during deserialization. We use a nested class so we
+ * don't load them until we need them. We need to use reflection to
+ * set final fields outside of the constructor.
+ */
+ private static class Fields {
+ static final Field keyStrength = findField("keyStrength");
+ static final Field valueStrength = findField("valueStrength");
+ static final Field expirationNanos = findField("expirationNanos");
+ static final Field internals = findField("internals");
+ static final Field map = findField("map");
+
+ static Field findField(String name) {
+ try {
+ Field f = StrategyImpl.class.getDeclaredField(name);
+ f.setAccessible(true);
+ return f;
+ } catch (NoSuchFieldException e) {
+ throw new AssertionError(e);
+ }
+ }
+ }
+
+ private void readObject(ObjectInputStream in)
+ throws IOException, ClassNotFoundException {
+ try {
+ Fields.keyStrength.set(this, in.readObject());
+ Fields.valueStrength.set(this, in.readObject());
+ Fields.expirationNanos.set(this, in.readLong());
+ Fields.internals.set(this, in.readObject());
+ Fields.map.set(this, in.readObject());
+ } catch (IllegalAccessException e) {
+ throw new AssertionError(e);
+ }
+ }
+ }
+
+ /** A reference to a value. */
+ private interface ValueReference<K, V> {
+ /**
+ * Gets the value. Does not block or throw exceptions.
+ */
+ V get();
+
+ /** Creates a copy of this reference for the given entry. */
+ ValueReference<K, V> copyFor(ReferenceEntry<K, V> entry);
+
+ /**
+ * Waits for a value that may still be computing. Unlike get(),
+ * this method can block (in the case of FutureValueReference) or
+ * throw an exception.
+ */
+ V waitForValue() throws InterruptedException;
+ }
+
+ private static final ValueReference<Object, Object> COMPUTING
+ = new ValueReference<Object, Object>() {
+ public Object get() {
+ return null;
+ }
+ public ValueReference<Object, Object> copyFor(
+ ReferenceEntry<Object, Object> entry) {
+ throw new AssertionError();
+ }
+ public Object waitForValue() {
+ throw new AssertionError();
+ }
+ };
+
+ /**
+ * Singleton placeholder that indicates a value is being computed.
+ */
+ @SuppressWarnings("unchecked")
+ // Safe because impl never uses a parameter or returns any non-null value
+ private static <K, V> ValueReference<K, V> computing() {
+ return (ValueReference<K, V>) COMPUTING;
+ }
+
+ /** Used to provide null output exceptions to other threads. */
+ private static class NullOutputExceptionReference<K, V>
+ implements ValueReference<K, V> {
+ final String message;
+ NullOutputExceptionReference(String message) {
+ this.message = message;
+ }
+ public V get() {
+ return null;
+ }
+ public ValueReference<K, V> copyFor(
+ ReferenceEntry<K, V> entry) {
+ return this;
+ }
+ public V waitForValue() {
+ throw new NullOutputException(message);
+ }
+ }
+
+ /** Used to provide computation exceptions to other threads. */
+ private static class ComputationExceptionReference<K, V>
+ implements ValueReference<K, V> {
+ final Throwable t;
+ ComputationExceptionReference(Throwable t) {
+ this.t = t;
+ }
+ public V get() {
+ return null;
+ }
+ public ValueReference<K, V> copyFor(
+ ReferenceEntry<K, V> entry) {
+ return this;
+ }
+ public V waitForValue() {
+ throw new AsynchronousComputationException(t);
+ }
+ }
+
+ /** Wrapper class ensures that queue isn't created until it's used. */
+ private static class QueueHolder {
+ static final FinalizableReferenceQueue queue
+ = new FinalizableReferenceQueue();
+ }
+
+ /**
+ * An entry in a reference map.
+ */
+ private interface ReferenceEntry<K, V> {
+ /**
+ * Gets the value reference from this entry.
+ */
+ ValueReference<K, V> getValueReference();
+
+ /**
+ * Sets the value reference for this entry.
+ *
+ * @param valueReference
+ */
+ void setValueReference(ValueReference<K, V> valueReference);
+
+ /**
+ * Removes this entry from the map if its value reference hasn't
+ * changed. Used to clean up after values. The value reference can
+ * just call this method on the entry so it doesn't have to keep
+ * its own reference to the map.
+ */
+ void valueReclaimed();
+
+ /** Gets the next entry in the chain. */
+ ReferenceEntry<K, V> getNext();
+
+ /** Gets the entry's hash. */
+ int getHash();
+
+ /** Gets the key for this entry. */
+ public K getKey();
+ }
+
+ /**
+ * Used for strongly-referenced keys.
+ */
+ private static class StrongEntry<K, V> implements ReferenceEntry<K, V> {
+ final K key;
+
+ StrongEntry(Internals<K, V, ReferenceEntry<K, V>> internals, K key,
+ int hash) {
+ this.internals = internals;
+ this.key = key;
+ this.hash = hash;
+ }
+
+ public K getKey() {
+ return this.key;
+ }
+
+ // The code below is exactly the same for each entry type.
+
+ final Internals<K, V, ReferenceEntry<K, V>> internals;
+ final int hash;
+ volatile ValueReference<K, V> valueReference = computing();
+
+ public ValueReference<K, V> getValueReference() {
+ return valueReference;
+ }
+ public void setValueReference(
+ ValueReference<K, V> valueReference) {
+ this.valueReference = valueReference;
+ }
+ public void valueReclaimed() {
+ internals.removeEntry(this, null);
+ }
+ public ReferenceEntry<K, V> getNext() {
+ return null;
+ }
+ public int getHash() {
+ return hash;
+ }
+ }
+
+ private static class LinkedStrongEntry<K, V> extends StrongEntry<K, V> {
+
+ LinkedStrongEntry(Internals<K, V, ReferenceEntry<K, V>> internals,
+ K key, int hash, ReferenceEntry<K, V> next) {
+ super(internals, key, hash);
+ this.next = next;
+ }
+
+ final ReferenceEntry<K, V> next;
+
+ @Override public ReferenceEntry<K, V> getNext() {
+ return next;
+ }
+ }
+
+ /**
+ * Used for softly-referenced keys.
+ */
+ private static class SoftEntry<K, V> extends FinalizableSoftReference<K>
+ implements ReferenceEntry<K, V> {
+ SoftEntry(Internals<K, V, ReferenceEntry<K, V>> internals, K key,
+ int hash) {
+ super(key, QueueHolder.queue);
+ this.internals = internals;
+ this.hash = hash;
+ }
+
+ public K getKey() {
+ return get();
+ }
+
+ public void finalizeReferent() {
+ internals.removeEntry(this);
+ }
+
+ // The code below is exactly the same for each entry type.
+
+ final Internals<K, V, ReferenceEntry<K, V>> internals;
+ final int hash;
+ volatile ValueReference<K, V> valueReference = computing();
+
+ public ValueReference<K, V> getValueReference() {
+ return valueReference;
+ }
+ public void setValueReference(
+ ValueReference<K, V> valueReference) {
+ this.valueReference = valueReference;
+ }
+ public void valueReclaimed() {
+ internals.removeEntry(this, null);
+ }
+ public ReferenceEntry<K, V> getNext() {
+ return null;
+ }
+ public int getHash() {
+ return hash;
+ }
+ }
+
+ private static class LinkedSoftEntry<K, V> extends SoftEntry<K, V> {
+ LinkedSoftEntry(Internals<K, V, ReferenceEntry<K, V>> internals,
+ K key, int hash, ReferenceEntry<K, V> next) {
+ super(internals, key, hash);
+ this.next = next;
+ }
+
+ final ReferenceEntry<K, V> next;
+
+ @Override public ReferenceEntry<K, V> getNext() {
+ return next;
+ }
+ }
+
+ /**
+ * Used for weakly-referenced keys.
+ */
+ private static class WeakEntry<K, V> extends FinalizableWeakReference<K>
+ implements ReferenceEntry<K, V> {
+ WeakEntry(Internals<K, V, ReferenceEntry<K, V>> internals, K key,
+ int hash) {
+ super(key, QueueHolder.queue);
+ this.internals = internals;
+ this.hash = hash;
+ }
+
+ public K getKey() {
+ return get();
+ }
+
+ public void finalizeReferent() {
+ internals.removeEntry(this);
+ }
+
+ // The code below is exactly the same for each entry type.
+
+ final Internals<K, V, ReferenceEntry<K, V>> internals;
+ final int hash;
+ volatile ValueReference<K, V> valueReference = computing();
+
+ public ValueReference<K, V> getValueReference() {
+ return valueReference;
+ }
+ public void setValueReference(
+ ValueReference<K, V> valueReference) {
+ this.valueReference = valueReference;
+ }
+ public void valueReclaimed() {
+ internals.removeEntry(this, null);
+ }
+ public ReferenceEntry<K, V> getNext() {
+ return null;
+ }
+ public int getHash() {
+ return hash;
+ }
+ }
+
+ private static class LinkedWeakEntry<K, V> extends WeakEntry<K, V> {
+ LinkedWeakEntry(Internals<K, V, ReferenceEntry<K, V>> internals,
+ K key, int hash, ReferenceEntry<K, V> next) {
+ super(internals, key, hash);
+ this.next = next;
+ }
+
+ final ReferenceEntry<K, V> next;
+
+ @Override public ReferenceEntry<K, V> getNext() {
+ return next;
+ }
+ }
+
+ /** References a weak value. */
+ private static class WeakValueReference<K, V>
+ extends FinalizableWeakReference<V>
+ implements ValueReference<K, V> {
+ final ReferenceEntry<K, V> entry;
+
+ WeakValueReference(V referent, ReferenceEntry<K, V> entry) {
+ super(referent, QueueHolder.queue);
+ this.entry = entry;
+ }
+
+ public void finalizeReferent() {
+ entry.valueReclaimed();
+ }
+
+ public ValueReference<K, V> copyFor(
+ ReferenceEntry<K, V> entry) {
+ return new WeakValueReference<K, V>(get(), entry);
+ }
+
+ public V waitForValue() {
+ return get();
+ }
+ }
+
+ /** References a soft value. */
+ private static class SoftValueReference<K, V>
+ extends FinalizableSoftReference<V>
+ implements ValueReference<K, V> {
+ final ReferenceEntry<K, V> entry;
+
+ SoftValueReference(V referent, ReferenceEntry<K, V> entry) {
+ super(referent, QueueHolder.queue);
+ this.entry = entry;
+ }
+
+ public void finalizeReferent() {
+ entry.valueReclaimed();
+ }
+
+ public ValueReference<K, V> copyFor(
+ ReferenceEntry<K, V> entry) {
+ return new SoftValueReference<K, V>(get(), entry);
+ }
+
+ public V waitForValue() {
+ return get();
+ }
+ }
+
+ /** References a strong value. */
+ private static class StrongValueReference<K, V>
+ implements ValueReference<K, V> {
+ final V referent;
+
+ StrongValueReference(V referent) {
+ this.referent = referent;
+ }
+
+ public V get() {
+ return referent;
+ }
+
+ public ValueReference<K, V> copyFor(
+ ReferenceEntry<K, V> entry) {
+ return this;
+ }
+
+ public V waitForValue() {
+ return get();
+ }
+ }
+}
diff --git a/src/com/google/common/collect/Maps.java b/src/com/google/common/collect/Maps.java
new file mode 100644
index 0000000..7e14a84
--- /dev/null
+++ b/src/com/google/common/collect/Maps.java
@@ -0,0 +1,1334 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Joiner.MapJoiner;
+import com.google.common.base.Objects;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+
+import java.io.Serializable;
+import java.util.AbstractCollection;
+import java.util.AbstractMap;
+import java.util.AbstractSet;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.EnumMap;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.IdentityHashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Properties;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+import javax.annotation.Nullable;
+
+/**
+ * Static utility methods pertaining to {@link Map} instances. Also see this
+ * class's counterparts {@link Lists} and {@link Sets}.
+ *
+ * @author Kevin Bourrillion
+ * @author Mike Bostock
+ * @author Isaac Shum
+ */
+@GwtCompatible
+public final class Maps {
+ private Maps() {}
+
+ /**
+ * Creates a <i>mutable</i>, empty {@code HashMap} instance.
+ *
+ * <p><b>Note:</b> if mutability is not required, use {@link
+ * ImmutableMap#of()} instead.
+ *
+ * <p><b>Note:</b> if {@code K} is an {@code enum} type, use {@link
+ * #newEnumMap} instead.
+ *
+ * @return a new, empty {@code HashMap}
+ */
+ public static <K, V> HashMap<K, V> newHashMap() {
+ return new HashMap<K, V>();
+ }
+
+ /**
+ * Creates a {@code HashMap} instance with enough capacity to hold the
+ * specified number of elements without rehashing.
+ *
+ * @param expectedSize the expected size
+ * @return a new, empty {@code HashMap} with enough
+ * capacity to hold {@code expectedSize} elements without rehashing
+ * @throws IllegalArgumentException if {@code expectedSize} is negative
+ */
+ public static <K, V> HashMap<K, V> newHashMapWithExpectedSize(
+ int expectedSize) {
+ /*
+ * The HashMap is constructed with an initialCapacity that's greater than
+ * expectedSize. The larger value is necessary because HashMap resizes
+ * its internal array if the map size exceeds loadFactor * initialCapacity.
+ */
+ return new HashMap<K, V>(capacity(expectedSize));
+ }
+
+ /**
+ * Returns an appropriate value for the "capacity" (in reality, "minimum
+ * table size") parameter of a {@link HashMap} constructor, such that the
+ * resulting table will be between 25% and 50% full when it contains
+ * {@code expectedSize} entries.
+ *
+ * @throws IllegalArgumentException if {@code expectedSize} is negative
+ */
+ static int capacity(int expectedSize) {
+ checkArgument(expectedSize >= 0);
+ return Math.max(expectedSize * 2, 16);
+ }
+
+ /**
+ * Creates a <i>mutable</i> {@code HashMap} instance with the same mappings as
+ * the specified map.
+ *
+ * <p><b>Note:</b> if mutability is not required, use {@link
+ * ImmutableMap#copyOf(Map)} instead.
+ *
+ * <p><b>Note:</b> if {@code K} is an {@link Enum} type, use {@link
+ * #newEnumMap} instead.
+ *
+ * @param map the mappings to be placed in the new map
+ * @return a new {@code HashMap} initialized with the mappings from
+ * {@code map}
+ */
+ public static <K, V> HashMap<K, V> newHashMap(
+ Map<? extends K, ? extends V> map) {
+ return new HashMap<K, V>(map);
+ }
+
+ /**
+ * Creates a <i>mutable</i>, empty, insertion-ordered {@code LinkedHashMap}
+ * instance.
+ *
+ * <p><b>Note:</b> if mutability is not required, use {@link
+ * ImmutableMap#of()} instead.
+ *
+ * @return a new, empty {@code LinkedHashMap}
+ */
+ public static <K, V> LinkedHashMap<K, V> newLinkedHashMap() {
+ return new LinkedHashMap<K, V>();
+ }
+
+ /**
+ * Creates a <i>mutable</i>, insertion-ordered {@code LinkedHashMap} instance
+ * with the same mappings as the specified map.
+ *
+ * <p><b>Note:</b> if mutability is not required, use {@link
+ * ImmutableMap#copyOf(Map)} instead.
+ *
+ * @param map the mappings to be placed in the new map
+ * @return a new, {@code LinkedHashMap} initialized with the
+ * mappings from {@code map}
+ */
+ public static <K, V> LinkedHashMap<K, V>
+ newLinkedHashMap(Map<? extends K, ? extends V> map) {
+ return new LinkedHashMap<K, V>(map);
+ }
+
+ /**
+ * Creates a <i>mutable</i>, empty {@code TreeMap} instance using the natural
+ * ordering of its elements.
+ *
+ * <p><b>Note:</b> if mutability is not required, use {@link
+ * ImmutableSortedMap#of()} instead.
+ *
+ * @return a new, empty {@code TreeMap}
+ */
+ @SuppressWarnings("unchecked") // eclipse doesn't like the raw Comparable
+ public static <K extends Comparable, V> TreeMap<K, V> newTreeMap() {
+ return new TreeMap<K, V>();
+ }
+
+ /**
+ * Creates a <i>mutable</i> {@code TreeMap} instance with the same mappings as
+ * the specified map and using the same ordering as the specified map.
+ *
+ * <p><b>Note:</b> if mutability is not required, use {@link
+ * ImmutableSortedMap#copyOfSorted(SortedMap)} instead.
+ *
+ * @param map the sorted map whose mappings are to be placed in the new map
+ * and whose comparator is to be used to sort the new map
+ * @return a new {@code TreeMap} initialized with the mappings from {@code
+ * map} and using the comparator of {@code map}
+ */
+ public static <K, V> TreeMap<K, V> newTreeMap(SortedMap<K, ? extends V> map) {
+ return new TreeMap<K, V>(map);
+ }
+
+ /**
+ * Creates a <i>mutable</i>, empty {@code TreeMap} instance using the given
+ * comparator.
+ *
+ * <p><b>Note:</b> if mutability is not required, use {@code
+ * ImmutableSortedMap.orderedBy(comparator).build()} instead.
+ *
+ * @param comparator the comparator to sort the keys with
+ * @return a new, empty {@code TreeMap}
+ */
+ public static <C, K extends C, V> TreeMap<K, V> newTreeMap(
+ @Nullable Comparator<C> comparator) {
+ // Ideally, the extra type parameter "C" shouldn't be necessary. It is a
+ // work-around of a compiler type inference quirk that prevents the
+ // following code from being compiled:
+ // Comparator<Class<?>> comparator = null;
+ // Map<Class<? extends Throwable>, String> map = newTreeMap(comparator);
+ return new TreeMap<K, V>(comparator);
+ }
+
+ /**
+ * Creates an {@code EnumMap} instance.
+ *
+ * @param type the key type for this map
+ * @return a new, empty {@code EnumMap}
+ */
+ public static <K extends Enum<K>, V> EnumMap<K, V> newEnumMap(Class<K> type) {
+ return new EnumMap<K, V>(checkNotNull(type));
+ }
+
+ /**
+ * Creates an {@code EnumMap} with the same mappings as the specified map.
+ *
+ * @param map the map from which to initialize this {@code EnumMap}
+ * @return a new {@code EnumMap} initialized with the mappings from {@code
+ * map}
+ * @throws IllegalArgumentException if {@code m} is not an {@code EnumMap}
+ * instance and contains no mappings
+ */
+ public static <K extends Enum<K>, V> EnumMap<K, V> newEnumMap(
+ Map<K, ? extends V> map) {
+ return new EnumMap<K, V>(map);
+ }
+
+ /**
+ * Creates an {@code IdentityHashMap} instance.
+ *
+ * @return a new, empty {@code IdentityHashMap}
+ */
+ public static <K, V> IdentityHashMap<K, V> newIdentityHashMap() {
+ return new IdentityHashMap<K, V>();
+ }
+
+ /**
+ * Returns a synchronized (thread-safe) bimap backed by the specified bimap.
+ * In order to guarantee serial access, it is critical that <b>all</b> access
+ * to the backing bimap is accomplished through the returned bimap.
+ *
+ * <p>It is imperative that the user manually synchronize on the returned map
+ * when accessing any of its collection views: <pre> {@code
+ *
+ * BiMap<Long, String> map = Maps.synchronizedBiMap(
+ * HashBiMap.<Long, String>create());
+ * ...
+ * Set<Long> set = map.keySet(); // Needn't be in synchronized block
+ * ...
+ * synchronized (map) { // Synchronizing on map, not set!
+ * Iterator<Long> it = set.iterator(); // Must be in synchronized block
+ * while (it.hasNext()) {
+ * foo(it.next());
+ * }
+ * }}</pre>
+ *
+ * Failure to follow this advice may result in non-deterministic behavior.
+ *
+ * <p>The returned bimap will be serializable if the specified bimap is
+ * serializable.
+ *
+ * @param bimap the bimap to be wrapped in a synchronized view
+ * @return a sychronized view of the specified bimap
+ */
+ public static <K, V> BiMap<K, V> synchronizedBiMap(BiMap<K, V> bimap) {
+ return Synchronized.biMap(bimap, null);
+ }
+
+ /**
+ * Computes the difference between two maps. This difference is an immutable
+ * snapshot of the state of the maps at the time this method is called. It
+ * will never change, even if the maps change at a later time.
+ *
+ * <p>Since this method uses {@code HashMap} instances internally, the keys of
+ * the supplied maps must be well-behaved with respect to
+ * {@link Object#equals} and {@link Object#hashCode}.
+ *
+ * <p><b>Note:</b>If you only need to know whether two maps have the same
+ * mappings, call {@code left.equals(right)} instead of this method.
+ *
+ * @param left the map to treat as the "left" map for purposes of comparison
+ * @param right the map to treat as the "right" map for purposes of comparison
+ * @return the difference between the two maps
+ */
+ public static <K, V> MapDifference<K, V> difference(
+ Map<? extends K, ? extends V> left, Map<? extends K, ? extends V> right) {
+ Map<K, V> onlyOnLeft = newHashMap();
+ Map<K, V> onlyOnRight = new HashMap<K, V>(right); // will whittle it down
+ Map<K, V> onBoth = newHashMap();
+ Map<K, MapDifference.ValueDifference<V>> differences = newHashMap();
+ boolean eq = true;
+
+ for (Entry<? extends K, ? extends V> entry : left.entrySet()) {
+ K leftKey = entry.getKey();
+ V leftValue = entry.getValue();
+ if (right.containsKey(leftKey)) {
+ V rightValue = onlyOnRight.remove(leftKey);
+ if (Objects.equal(leftValue, rightValue)) {
+ onBoth.put(leftKey, leftValue);
+ } else {
+ eq = false;
+ differences.put(leftKey, new ValueDifferenceImpl<V>(
+ leftValue, rightValue));
+ }
+ } else {
+ eq = false;
+ onlyOnLeft.put(leftKey, leftValue);
+ }
+ }
+
+ boolean areEqual = eq && onlyOnRight.isEmpty();
+ return new MapDifferenceImpl<K, V>(
+ areEqual, onlyOnLeft, onlyOnRight, onBoth, differences);
+ }
+
+ private static class MapDifferenceImpl<K, V>
+ implements MapDifference<K, V> {
+ final boolean areEqual;
+ final Map<K, V> onlyOnLeft;
+ final Map<K, V> onlyOnRight;
+ final Map<K, V> onBoth;
+ final Map<K, ValueDifference<V>> differences;
+
+ MapDifferenceImpl(boolean areEqual, Map<K, V> onlyOnLeft,
+ Map<K, V> onlyOnRight, Map<K, V> onBoth,
+ Map<K, ValueDifference<V>> differences) {
+ this.areEqual = areEqual;
+ this.onlyOnLeft = Collections.unmodifiableMap(onlyOnLeft);
+ this.onlyOnRight = Collections.unmodifiableMap(onlyOnRight);
+ this.onBoth = Collections.unmodifiableMap(onBoth);
+ this.differences = Collections.unmodifiableMap(differences);
+ }
+
+ public boolean areEqual() {
+ return areEqual;
+ }
+
+ public Map<K, V> entriesOnlyOnLeft() {
+ return onlyOnLeft;
+ }
+
+ public Map<K, V> entriesOnlyOnRight() {
+ return onlyOnRight;
+ }
+
+ public Map<K, V> entriesInCommon() {
+ return onBoth;
+ }
+
+ public Map<K, ValueDifference<V>> entriesDiffering() {
+ return differences;
+ }
+
+ @Override public boolean equals(Object object) {
+ if (object == this) {
+ return true;
+ }
+ if (object instanceof MapDifference) {
+ MapDifference<?, ?> other = (MapDifference<?, ?>) object;
+ return entriesOnlyOnLeft().equals(other.entriesOnlyOnLeft())
+ && entriesOnlyOnRight().equals(other.entriesOnlyOnRight())
+ && entriesInCommon().equals(other.entriesInCommon())
+ && entriesDiffering().equals(other.entriesDiffering());
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ return Objects.hashCode(entriesOnlyOnLeft(), entriesOnlyOnRight(),
+ entriesInCommon(), entriesDiffering());
+ }
+
+ @Override public String toString() {
+ if (areEqual) {
+ return "equal";
+ }
+
+ StringBuilder result = new StringBuilder("not equal");
+ if (!onlyOnLeft.isEmpty()) {
+ result.append(": only on left=").append(onlyOnLeft);
+ }
+ if (!onlyOnRight.isEmpty()) {
+ result.append(": only on right=").append(onlyOnRight);
+ }
+ if (!differences.isEmpty()) {
+ result.append(": value differences=").append(differences);
+ }
+ return result.toString();
+ }
+ }
+
+ static class ValueDifferenceImpl<V>
+ implements MapDifference.ValueDifference<V> {
+
+ private final V left;
+ private final V right;
+
+ ValueDifferenceImpl(@Nullable V left, @Nullable V right) {
+ this.left = left;
+ this.right = right;
+ }
+
+ public V leftValue() {
+ return left;
+ }
+
+ public V rightValue() {
+ return right;
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ if (object instanceof MapDifference.ValueDifference<?>) {
+ MapDifference.ValueDifference<?> that =
+ (MapDifference.ValueDifference<?>) object;
+ return Objects.equal(this.left, that.leftValue())
+ && Objects.equal(this.right, that.rightValue());
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ return Objects.hashCode(left, right);
+ }
+
+ @Override public String toString() {
+ return "(" + left + ", " + right + ")";
+ }
+ }
+
+ /**
+ * Returns an immutable map for which the {@link Map#values} are the given
+ * elements in the given order, and each key is the product of invoking a
+ * supplied function on its corresponding value.
+ *
+ * @param values the values to use when constructing the {@code Map}
+ * @param keyFunction the function used to produce the key for each value
+ * @return a map mapping the result of evaluating the function {@code
+ * keyFunction} on each value in the input collection to that value
+ * @throws IllegalArgumentException if {@code keyFunction} produces the same
+ * key for more than one value in the input collection
+ * @throws NullPointerException if any elements of {@code values} is null, or
+ * if {@code keyFunction} produces {@code null} for any value
+ */
+ // TODO: consider returning a bimap, whose inverse view does lookups by
+ // invoking the function.
+ public static <K, V> ImmutableMap<K, V> uniqueIndex(
+ Iterable<V> values, Function<? super V, K> keyFunction) {
+ checkNotNull(keyFunction);
+ ImmutableMap.Builder<K, V> builder = ImmutableMap.builder();
+ for (V value : values) {
+ builder.put(keyFunction.apply(value), value);
+ }
+ return builder.build();
+ }
+
+ /**
+ * Creates an {@code ImmutableMap<String, String>} from a {@code Properties}
+ * instance. Properties normally derive from {@code Map<Object, Object>}, but
+ * they typically contain strings, which is awkward. This method lets you get
+ * a plain-old-{@code Map} out of a {@code Properties}.
+ *
+ * @param properties a {@code Properties} object to be converted
+ * @return an immutable map containing all the entries in
+ * {@code properties}
+ * @throws ClassCastException if any key in {@code Properties} is not a
+ * {@code String}
+ * @throws NullPointerException if any key or value in {@code Properties} is
+ * null.
+ */
+ public static ImmutableMap<String, String>
+ fromProperties(Properties properties) {
+ ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
+
+ for (Enumeration<?> e = properties.propertyNames(); e.hasMoreElements();) {
+ String key = (String) e.nextElement();
+ builder.put(key, properties.getProperty(key));
+ }
+
+ return builder.build();
+ }
+
+ /**
+ * Returns an immutable map entry with the specified key and value. The {@link
+ * Entry#setValue} operation throws an {@link UnsupportedOperationException}.
+ *
+ * <p>The returned entry is serializable.
+ *
+ * @param key the key to be associated with the returned entry
+ * @param value the value to be associated with the returned entry
+ */
+ public static <K, V> Entry<K, V> immutableEntry(
+ @Nullable final K key, @Nullable final V value) {
+ return new ImmutableEntry<K, V>(key, value);
+ }
+
+ /**
+ * Returns an unmodifiable view of the specified set of entries. The {@link
+ * Entry#setValue} operation throws an {@link UnsupportedOperationException},
+ * as do any operations that would modify the returned set.
+ *
+ * @param entrySet the entries for which to return an unmodifiable view
+ * @return an unmodifiable view of the entries
+ */
+ static <K, V> Set<Entry<K, V>> unmodifiableEntrySet(
+ final Set<Entry<K, V>> entrySet) {
+ return new UnmodifiableEntrySet<K, V>(Collections.unmodifiableSet(
+ entrySet));
+ }
+
+ /**
+ * Returns an unmodifiable view of the specified map entry. The {@link
+ * Entry#setValue} operation throws an {@link UnsupportedOperationException}.
+ * This also has the side-effect of redefining {@code equals} to comply with
+ * the Entry contract, to avoid a possible nefarious implementation of
+ * equals.
+ *
+ * @param entry the entry for which to return an unmodifiable view
+ * @return an unmodifiable view of the entry
+ */
+ private static <K, V> Entry<K, V> unmodifiableEntry(final Entry<K, V> entry) {
+ checkNotNull(entry);
+ return new AbstractMapEntry<K, V>() {
+ @Override public K getKey() {
+ return entry.getKey();
+ }
+ @Override public V getValue() {
+ return entry.getValue();
+ }
+ };
+ }
+
+ /** @see Multimaps#unmodifiableEntries */
+ static class UnmodifiableEntries<K, V>
+ extends ForwardingCollection<Entry<K, V>> {
+ private final Collection<Entry<K, V>> entries;
+
+ UnmodifiableEntries(Collection<Entry<K, V>> entries) {
+ this.entries = entries;
+ }
+
+ @Override protected Collection<Entry<K, V>> delegate() {
+ return entries;
+ }
+
+ @Override public Iterator<Entry<K, V>> iterator() {
+ final Iterator<Entry<K, V>> delegate = super.iterator();
+ return new ForwardingIterator<Entry<K, V>>() {
+ @Override public Entry<K, V> next() {
+ return unmodifiableEntry(super.next());
+ }
+ @Override protected Iterator<Entry<K, V>> delegate() {
+ return delegate;
+ }
+ };
+ }
+
+ // See java.util.Collections.UnmodifiableEntrySet for details on attacks.
+
+ @Override public Object[] toArray() {
+ return ObjectArrays.toArrayImpl(this);
+ }
+
+ @Override public <T> T[] toArray(T[] array) {
+ return ObjectArrays.toArrayImpl(this, array);
+ }
+
+ @Override public boolean contains(Object o) {
+ return containsEntryImpl(delegate(), o);
+ }
+
+ @Override public boolean containsAll(Collection<?> c) {
+ return Collections2.containsAll(this, c);
+ }
+ }
+
+ /** @see Maps#unmodifiableEntrySet(Set) */
+ static class UnmodifiableEntrySet<K, V>
+ extends UnmodifiableEntries<K, V>
+ implements Set<Entry<K, V>> {
+ UnmodifiableEntrySet(Set<Entry<K, V>> entries) {
+ super(entries);
+ }
+
+ // See java.util.Collections.UnmodifiableEntrySet for details on attacks.
+
+ @Override public boolean equals(@Nullable Object object) {
+ return Collections2.setEquals(this, object);
+ }
+
+ @Override public int hashCode() {
+ return Sets.hashCodeImpl(this);
+ }
+ }
+
+ /**
+ * Returns an unmodifiable view of the specified bimap. This method allows
+ * modules to provide users with "read-only" access to internal bimaps. Query
+ * operations on the returned bimap "read through" to the specified bimap, and
+ * attemps to modify the returned map, whether direct or via its collection
+ * views, result in an {@code UnsupportedOperationException}.
+ *
+ * <p>The returned bimap will be serializable if the specified bimap is
+ * serializable.
+ *
+ * @param bimap the bimap for which an unmodifiable view is to be returned
+ * @return an unmodifiable view of the specified bimap
+ */
+ public static <K, V> BiMap<K, V> unmodifiableBiMap(
+ BiMap<? extends K, ? extends V> bimap) {
+ return new UnmodifiableBiMap<K, V>(bimap, null);
+ }
+
+ /** @see Maps#unmodifiableBiMap(BiMap) */
+ private static class UnmodifiableBiMap<K, V>
+ extends ForwardingMap<K, V> implements BiMap<K, V>, Serializable {
+
+ final Map<K, V> unmodifiableMap;
+ final BiMap<? extends K, ? extends V> delegate;
+ transient BiMap<V, K> inverse;
+ transient Set<V> values;
+
+ UnmodifiableBiMap(BiMap<? extends K, ? extends V> delegate,
+ @Nullable BiMap<V, K> inverse) {
+ unmodifiableMap = Collections.<K, V>unmodifiableMap(delegate);
+ this.delegate = delegate;
+ this.inverse = inverse;
+ }
+
+ @Override protected Map<K, V> delegate() {
+ return unmodifiableMap;
+ }
+
+ public V forcePut(K key, V value) {
+ throw new UnsupportedOperationException();
+ }
+
+ public BiMap<V, K> inverse() {
+ BiMap<V, K> result = inverse;
+ return (result == null)
+ ? inverse = new UnmodifiableBiMap<V, K>(delegate.inverse(), this)
+ : result;
+ }
+
+ @Override public Set<V> values() {
+ Set<V> result = values;
+ return (result == null)
+ ? values = Collections.<V>unmodifiableSet(delegate.values())
+ : result;
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Implements {@code Collection.contains} safely for forwarding collections of
+ * map entries. If {@code o} is an instance of {@code Map.Entry}, it is
+ * wrapped using {@link #unmodifiableEntry} to protect against a possible
+ * nefarious equals method.
+ *
+ * <p>Note that {@code c} is the backing (delegate) collection, rather than
+ * the forwarding collection.
+ *
+ * @param c the delegate (unwrapped) collection of map entries
+ * @param o the object that might be contained in {@code c}
+ * @return {@code true} if {@code c} contains {@code o}
+ */
+ static <K, V> boolean containsEntryImpl(Collection<Entry<K, V>> c, Object o) {
+ if (!(o instanceof Entry)) {
+ return false;
+ }
+ return c.contains(unmodifiableEntry((Entry<?, ?>) o));
+ }
+
+ /**
+ * Implements {@code Collection.remove} safely for forwarding collections of
+ * map entries. If {@code o} is an instance of {@code Map.Entry}, it is
+ * wrapped using {@link #unmodifiableEntry} to protect against a possible
+ * nefarious equals method.
+ *
+ * <p>Note that {@code c} is backing (delegate) collection, rather than the
+ * forwarding collection.
+ *
+ * @param c the delegate (unwrapped) collection of map entries
+ * @param o the object to remove from {@code c}
+ * @return {@code true} if {@code c} was changed
+ */
+ static <K, V> boolean removeEntryImpl(Collection<Entry<K, V>> c, Object o) {
+ if (!(o instanceof Entry)) {
+ return false;
+ }
+ return c.remove(unmodifiableEntry((Entry<?, ?>) o));
+ }
+
+ /**
+ * Returns a view of a map where each value is transformed by a function. All
+ * other properties of the map, such as iteration order, are left intact. For
+ * example, the code:
+ * <pre> {@code
+ *
+ * Map<String, Integer> map = ImmutableMap.of("a", 4, "b", 9);
+ * Function<Integer, Double> sqrt = new Function<Integer, Double>() {
+ * public Double apply(Integer in) {
+ * return Math.sqrt((int) in);
+ * }
+ * };
+ * Map<String, Double> transformed = Maps.transformValues(sqrt, map);
+ * System.out.println(transformed);}</pre>
+ *
+ * ... prints {@code {a=2.0, b=3.0}}.
+ *
+ * <p>Changes in the underlying map are reflected in this view. Conversely,
+ * this view supports removal operations, and these are reflected in the
+ * underlying map.
+ *
+ * <p>It's acceptable for the underlying map to contain null keys, and even
+ * null values provided that the function is capable of accepting null input.
+ * The transformed map might contain null values, if the function sometimes
+ * gives a null result.
+ *
+ * <p>The returned map is not thread-safe or serializable, even if the
+ * underlying map is.
+ *
+ * <p>The function is applied lazily, invoked when needed. This is necessary
+ * for the returned map to be a view, but it means that the function will be
+ * applied many times for bulk operations like {@link Map#containsValue} and
+ * {@code Map.toString()}. For this to perform well, {@code function} should
+ * be fast. To avoid lazy evaluation when the returned map doesn't need to be
+ * a view, copy the returned map into a new map of your choosing.
+ */
+ public static <K, V1, V2> Map<K, V2> transformValues(
+ Map<K, V1> fromMap, Function<? super V1, V2> function) {
+ return new TransformedValuesMap<K, V1, V2>(fromMap, function);
+ }
+
+ private static class TransformedValuesMap<K, V1, V2>
+ extends AbstractMap<K, V2> {
+ final Map<K, V1> fromMap;
+ final Function<? super V1, V2> function;
+
+ TransformedValuesMap(Map<K, V1> fromMap, Function<? super V1, V2> function)
+ {
+ this.fromMap = checkNotNull(fromMap);
+ this.function = checkNotNull(function);
+ }
+
+ @Override public int size() {
+ return fromMap.size();
+ }
+
+ @Override public boolean containsKey(Object key) {
+ return fromMap.containsKey(key);
+ }
+
+ @Override public V2 get(Object key) {
+ V1 value = fromMap.get(key);
+ return (value != null || fromMap.containsKey(key))
+ ? function.apply(value) : null;
+ }
+
+ @Override public V2 remove(Object key) {
+ return fromMap.containsKey(key)
+ ? function.apply(fromMap.remove(key))
+ : null;
+ }
+
+ @Override public void clear() {
+ fromMap.clear();
+ }
+
+ EntrySet entrySet;
+
+ @Override public Set<Entry<K, V2>> entrySet() {
+ EntrySet result = entrySet;
+ if (result == null) {
+ entrySet = result = new EntrySet();
+ }
+ return result;
+ }
+
+ class EntrySet extends AbstractSet<Entry<K, V2>> {
+ @Override public int size() {
+ return TransformedValuesMap.this.size();
+ }
+
+ @Override public Iterator<Entry<K, V2>> iterator() {
+ final Iterator<Entry<K, V1>> mapIterator
+ = fromMap.entrySet().iterator();
+
+ return new Iterator<Entry<K, V2>>() {
+ public boolean hasNext() {
+ return mapIterator.hasNext();
+ }
+
+ public Entry<K, V2> next() {
+ final Entry<K, V1> entry = mapIterator.next();
+ return new AbstractMapEntry<K, V2>() {
+ @Override public K getKey() {
+ return entry.getKey();
+ }
+ @Override public V2 getValue() {
+ return function.apply(entry.getValue());
+ }
+ };
+ }
+
+ public void remove() {
+ mapIterator.remove();
+ }
+ };
+ }
+
+ @Override public void clear() {
+ fromMap.clear();
+ }
+
+ @Override public boolean contains(Object o) {
+ if (!(o instanceof Entry)) {
+ return false;
+ }
+ Entry<?, ?> entry = (Entry<?, ?>) o;
+ Object entryKey = entry.getKey();
+ Object entryValue = entry.getValue();
+ V2 mapValue = TransformedValuesMap.this.get(entryKey);
+ if (mapValue != null) {
+ return mapValue.equals(entryValue);
+ }
+ return entryValue == null && containsKey(entryKey);
+ }
+
+ @Override public boolean remove(Object o) {
+ if (contains(o)) {
+ Entry<?, ?> entry = (Entry<?, ?>) o;
+ Object key = entry.getKey();
+ fromMap.remove(key);
+ return true;
+ }
+ return false;
+ }
+ }
+ }
+
+ /**
+ * Returns a map containing the mappings in {@code unfiltered} whose keys
+ * satisfy a predicate. The returned map is a live view of {@code unfiltered};
+ * changes to one affect the other.
+ *
+ * <p>The resulting map's {@code keySet()}, {@code entrySet()}, and {@code
+ * values()} views have iterators that don't support {@code remove()}, but all
+ * other methods are supported by the map and its views. The map's {@code
+ * put()} and {@code putAll()} methods throw an {@link
+ * IllegalArgumentException} if a key that doesn't satisfy the predicate is
+ * provided.
+ *
+ * <p>When methods such as {@code removeAll()} and {@code clear()} are called
+ * on the filtered map or its views, only mappings whose keys satisfy the
+ * filter will be removed from the underlying map.
+ *
+ * <p>The returned map isn't threadsafe or serializable, even if {@code
+ * unfiltered} is.
+ *
+ * <p>Many of the filtered map's methods, such as {@code size()},
+ * iterate across every key/value mapping in the underlying map and determine
+ * which satisfy the filter. When a live view is <i>not</i> needed, it may be
+ * faster to copy the filtered map and use the copy.
+ */
+ public static <K, V> Map<K, V> filterKeys(
+ Map<K, V> unfiltered, final Predicate<? super K> keyPredicate) {
+ checkNotNull(keyPredicate);
+ Predicate<Entry<K, V>> entryPredicate = new Predicate<Entry<K, V>>() {
+ public boolean apply(Entry<K, V> input) {
+ return keyPredicate.apply(input.getKey());
+ }
+ };
+ return (unfiltered instanceof AbstractFilteredMap)
+ ? filterFiltered((AbstractFilteredMap<K, V>) unfiltered, entryPredicate)
+ : new FilteredKeyMap<K, V>(
+ checkNotNull(unfiltered), keyPredicate, entryPredicate);
+ }
+
+ /**
+ * Returns a map containing the mappings in {@code unfiltered} whose values
+ * satisfy a predicate. The returned map is a live view of {@code unfiltered};
+ * changes to one affect the other.
+ *
+ * <p>The resulting map's {@code keySet()}, {@code entrySet()}, and {@code
+ * values()} views have iterators that don't support {@code remove()}, but all
+ * other methods are supported by the map and its views. The {@link Map#put},
+ * {@link Map#putAll}, and {@link Entry#setValue} methods throw an {@link
+ * IllegalArgumentException} if a value that doesn't satisfy the predicate is
+ * provided.
+ *
+ * <p>When methods such as {@code removeAll()} and {@code clear()} are called
+ * on the filtered map or its views, only mappings whose values satisfy the
+ * filter will be removed from the underlying map.
+ *
+ * <p>The returned map isn't threadsafe or serializable, even if {@code
+ * unfiltered} is.
+ *
+ * <p>Many of the filtered map's methods, such as {@code size()},
+ * iterate across every key/value mapping in the underlying map and determine
+ * which satisfy the filter. When a live view is <i>not</i> needed, it may be
+ * faster to copy the filtered map and use the copy.
+ */
+ public static <K, V> Map<K, V> filterValues(
+ Map<K, V> unfiltered, final Predicate<? super V> valuePredicate) {
+ checkNotNull(valuePredicate);
+ Predicate<Entry<K, V>> entryPredicate = new Predicate<Entry<K, V>>() {
+ public boolean apply(Entry<K, V> input) {
+ return valuePredicate.apply(input.getValue());
+ }
+ };
+ return filterEntries(unfiltered, entryPredicate);
+ }
+
+ /**
+ * Returns a map containing the mappings in {@code unfiltered} that satisfy a
+ * predicate. The returned map is a live view of {@code unfiltered}; changes
+ * to one affect the other.
+ *
+ * <p>The resulting map's {@code keySet()}, {@code entrySet()}, and {@code
+ * values()} views have iterators that don't support {@code remove()}, but all
+ * other methods are supported by the map and its views. The map's {@code
+ * put()} and {@code putAll()} methods throw an {@link
+ * IllegalArgumentException} if a key/value pair that doesn't satisfy the
+ * predicate is provided. Similarly, the map's entries have a {@link
+ * Entry#setValue} method that throws an {@link IllegalArgumentException} when
+ * the existing key and the provided value don't satisfy the predicate.
+ *
+ * <p>When methods such as {@code removeAll()} and {@code clear()} are called
+ * on the filtered map or its views, only mappings that satisfy the filter
+ * will be removed from the underlying map.
+ *
+ * <p>The returned map isn't threadsafe or serializable, even if {@code
+ * unfiltered} is.
+ *
+ * <p>Many of the filtered map's methods, such as {@code size()},
+ * iterate across every key/value mapping in the underlying map and determine
+ * which satisfy the filter. When a live view is <i>not</i> needed, it may be
+ * faster to copy the filtered map and use the copy.
+ */
+ public static <K, V> Map<K, V> filterEntries(
+ Map<K, V> unfiltered, Predicate<? super Entry<K, V>> entryPredicate) {
+ checkNotNull(entryPredicate);
+ return (unfiltered instanceof AbstractFilteredMap)
+ ? filterFiltered((AbstractFilteredMap<K, V>) unfiltered, entryPredicate)
+ : new FilteredEntryMap<K, V>(checkNotNull(unfiltered), entryPredicate);
+ }
+
+ /**
+ * Support {@code clear()}, {@code removeAll()}, and {@code retainAll()} when
+ * filtering a filtered map.
+ */
+ private static <K, V> Map<K, V> filterFiltered(
+ AbstractFilteredMap<K, V> map,
+ Predicate<? super Entry<K, V>> entryPredicate) {
+ Predicate<Entry<K, V>> predicate
+ = Predicates.and(map.predicate, entryPredicate);
+ return new FilteredEntryMap<K, V>(map.unfiltered, predicate);
+ }
+
+ private static abstract class AbstractFilteredMap<K, V>
+ extends AbstractMap<K, V> {
+
+ final Map<K, V> unfiltered;
+ final Predicate<? super Entry<K, V>> predicate;
+
+ AbstractFilteredMap(Map<K, V> unfiltered,
+ Predicate<? super Entry<K, V>> predicate) {
+ this.unfiltered = unfiltered;
+ this.predicate = predicate;
+ }
+
+ boolean apply(Object key, V value) {
+ // This method is called only when the key is in the map, implying that
+ // key is a K.
+ @SuppressWarnings("unchecked")
+ K k = (K) key;
+ return predicate.apply(Maps.immutableEntry(k, value));
+ }
+
+ @Override public V put(K key, V value) {
+ checkArgument(apply(key, value));
+ return unfiltered.put(key, value);
+ }
+
+ @Override public void putAll(Map<? extends K, ? extends V> map) {
+ for (Entry<? extends K, ? extends V> entry : map.entrySet()) {
+ checkArgument(apply(entry.getKey(), entry.getValue()));
+ }
+ unfiltered.putAll(map);
+ }
+
+ @Override public boolean containsKey(Object key) {
+ return unfiltered.containsKey(key) && apply(key, unfiltered.get(key));
+ }
+
+ @Override public V get(Object key) {
+ V value = unfiltered.get(key);
+ return ((value != null) && apply(key, value)) ? value : null;
+ }
+
+ @Override public boolean isEmpty() {
+ return entrySet().isEmpty();
+ }
+
+ @Override public V remove(Object key) {
+ return containsKey(key) ? unfiltered.remove(key) : null;
+ }
+
+ Collection<V> values;
+
+ @Override public Collection<V> values() {
+ Collection<V> result = values;
+ return (result == null) ? values = new Values() : result;
+ }
+
+ class Values extends AbstractCollection<V> {
+ @Override public Iterator<V> iterator() {
+ final Iterator<Entry<K, V>> entryIterator = entrySet().iterator();
+ return new UnmodifiableIterator<V>() {
+ public boolean hasNext() {
+ return entryIterator.hasNext();
+ }
+ public V next() {
+ return entryIterator.next().getValue();
+ }
+ };
+ }
+
+ @Override public int size() {
+ return entrySet().size();
+ }
+
+ @Override public void clear() {
+ entrySet().clear();
+ }
+
+ @Override public boolean isEmpty() {
+ return entrySet().isEmpty();
+ }
+
+ @Override public boolean remove(Object o) {
+ Iterator<Entry<K, V>> iterator = unfiltered.entrySet().iterator();
+ while (iterator.hasNext()) {
+ Entry<K, V> entry = iterator.next();
+ if (Objects.equal(o, entry.getValue()) && predicate.apply(entry)) {
+ iterator.remove();
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override public boolean removeAll(Collection<?> collection) {
+ checkNotNull(collection);
+ boolean changed = false;
+ Iterator<Entry<K, V>> iterator = unfiltered.entrySet().iterator();
+ while (iterator.hasNext()) {
+ Entry<K, V> entry = iterator.next();
+ if (collection.contains(entry.getValue()) && predicate.apply(entry)) {
+ iterator.remove();
+ changed = true;
+ }
+ }
+ return changed;
+ }
+
+ @Override public boolean retainAll(Collection<?> collection) {
+ checkNotNull(collection);
+ boolean changed = false;
+ Iterator<Entry<K, V>> iterator = unfiltered.entrySet().iterator();
+ while (iterator.hasNext()) {
+ Entry<K, V> entry = iterator.next();
+ if (!collection.contains(entry.getValue())
+ && predicate.apply(entry)) {
+ iterator.remove();
+ changed = true;
+ }
+ }
+ return changed;
+ }
+
+ @Override public Object[] toArray() {
+ // creating an ArrayList so filtering happens once
+ return Lists.newArrayList(iterator()).toArray();
+ }
+
+ @Override public <T> T[] toArray(T[] array) {
+ return Lists.newArrayList(iterator()).toArray(array);
+ }
+ }
+ }
+
+ private static class FilteredKeyMap<K, V> extends AbstractFilteredMap<K, V> {
+ Predicate<? super K> keyPredicate;
+
+ FilteredKeyMap(Map<K, V> unfiltered, Predicate<? super K> keyPredicate,
+ Predicate<Entry<K, V>> entryPredicate) {
+ super(unfiltered, entryPredicate);
+ this.keyPredicate = keyPredicate;
+ }
+
+ Set<Entry<K, V>> entrySet;
+
+ @Override public Set<Entry<K, V>> entrySet() {
+ Set<Entry<K, V>> result = entrySet;
+ return (result == null)
+ ? entrySet = Sets.filter(unfiltered.entrySet(), predicate)
+ : result;
+ }
+
+ Set<K> keySet;
+
+ @Override public Set<K> keySet() {
+ Set<K> result = keySet;
+ return (result == null)
+ ? keySet = Sets.filter(unfiltered.keySet(), keyPredicate)
+ : result;
+ }
+
+ // The cast is called only when the key is in the unfiltered map, implying
+ // that key is a K.
+ @SuppressWarnings("unchecked")
+ @Override public boolean containsKey(Object key) {
+ return unfiltered.containsKey(key) && keyPredicate.apply((K) key);
+ }
+ }
+
+ private static class FilteredEntryMap<K, V>
+ extends AbstractFilteredMap<K, V> {
+ /**
+ * Entries in this set satisfy the predicate, but they don't validate the
+ * input to {@code Entry.setValue()}.
+ */
+ final Set<Entry<K, V>> filteredEntrySet;
+
+ FilteredEntryMap(Map<K, V> unfiltered,
+ Predicate<? super Entry<K, V>> entryPredicate) {
+ super(unfiltered, entryPredicate);
+ filteredEntrySet = Sets.filter(unfiltered.entrySet(), predicate);
+ }
+
+ Set<Entry<K, V>> entrySet;
+
+ @Override public Set<Entry<K, V>> entrySet() {
+ Set<Entry<K, V>> result = entrySet;
+ return (result == null) ? entrySet = new EntrySet() : result;
+ }
+
+ private class EntrySet extends ForwardingSet<Entry<K, V>> {
+ @Override protected Set<Entry<K, V>> delegate() {
+ return filteredEntrySet;
+ }
+
+ @Override public Iterator<Entry<K, V>> iterator() {
+ final Iterator<Entry<K, V>> iterator = filteredEntrySet.iterator();
+ return new UnmodifiableIterator<Entry<K, V>>() {
+ public boolean hasNext() {
+ return iterator.hasNext();
+ }
+ public Entry<K, V> next() {
+ final Entry<K, V> entry = iterator.next();
+ return new ForwardingMapEntry<K, V>() {
+ @Override protected Entry<K, V> delegate() {
+ return entry;
+ }
+ @Override public V setValue(V value) {
+ checkArgument(apply(entry.getKey(), value));
+ return super.setValue(value);
+ }
+ };
+ }
+ };
+ }
+ }
+
+ Set<K> keySet;
+
+ @Override public Set<K> keySet() {
+ Set<K> result = keySet;
+ return (result == null) ? keySet = new KeySet() : result;
+ }
+
+ private class KeySet extends AbstractSet<K> {
+ @Override public Iterator<K> iterator() {
+ final Iterator<Entry<K, V>> iterator = filteredEntrySet.iterator();
+ return new UnmodifiableIterator<K>() {
+ public boolean hasNext() {
+ return iterator.hasNext();
+ }
+ public K next() {
+ return iterator.next().getKey();
+ }
+ };
+ }
+
+ @Override public int size() {
+ return filteredEntrySet.size();
+ }
+
+ @Override public void clear() {
+ filteredEntrySet.clear();
+ }
+
+ @Override public boolean contains(Object o) {
+ return containsKey(o);
+ }
+
+ @Override public boolean remove(Object o) {
+ if (containsKey(o)) {
+ unfiltered.remove(o);
+ return true;
+ }
+ return false;
+ }
+
+ @Override public boolean removeAll(Collection<?> collection) {
+ checkNotNull(collection); // for GWT
+ boolean changed = false;
+ for (Object obj : collection) {
+ changed |= remove(obj);
+ }
+ return changed;
+ }
+
+ @Override public boolean retainAll(Collection<?> collection) {
+ checkNotNull(collection); // for GWT
+ boolean changed = false;
+ Iterator<Entry<K, V>> iterator = unfiltered.entrySet().iterator();
+ while (iterator.hasNext()) {
+ Entry<K, V> entry = iterator.next();
+ if (!collection.contains(entry.getKey()) && predicate.apply(entry)) {
+ iterator.remove();
+ changed = true;
+ }
+ }
+ return changed;
+ }
+
+ @Override public Object[] toArray() {
+ // creating an ArrayList so filtering happens once
+ return Lists.newArrayList(iterator()).toArray();
+ }
+
+ @Override public <T> T[] toArray(T[] array) {
+ return Lists.newArrayList(iterator()).toArray(array);
+ }
+ }
+ }
+
+ /**
+ * {@code AbstractMap} extension that implements {@link #isEmpty()} as {@code
+ * entrySet().isEmpty()} instead of {@code size() == 0} to speed up
+ * implementations where {@code size()} is O(n), and it delegates the {@code
+ * isEmpty()} methods of its key set and value collection to this
+ * implementation.
+ */
+ @GwtCompatible
+ abstract static class ImprovedAbstractMap<K, V>
+ extends AbstractMap<K, V> {
+
+ /**
+ * Creates the entry set to be returned by {@link #entrySet()}. This method
+ * is invoked at most once on a given map, at the time when {@code
+ * entrySet} is first called.
+ */
+ protected abstract Set<Entry<K, V>> createEntrySet();
+
+ private transient Set<Entry<K, V>> entrySet;
+
+ @Override public Set<Entry<K, V>> entrySet() {
+ Set<Entry<K, V>> result = entrySet;
+ if (result == null) {
+ entrySet = result = createEntrySet();
+ }
+ return result;
+ }
+
+ private transient Set<K> keySet;
+
+ @Override public Set<K> keySet() {
+ Set<K> result = keySet;
+ if (result == null) {
+ final Set<K> delegate = super.keySet();
+ keySet = result = new ForwardingSet<K>() {
+ @Override protected Set<K> delegate() {
+ return delegate;
+ }
+
+ @Override public boolean isEmpty() {
+ return ImprovedAbstractMap.this.isEmpty();
+ }
+ };
+ }
+ return result;
+ }
+
+ private transient Collection<V> values;
+
+ @Override public Collection<V> values() {
+ Collection<V> result = values;
+ if (result == null) {
+ final Collection<V> delegate = super.values();
+ values = result = new ForwardingCollection<V>() {
+ @Override protected Collection<V> delegate() {
+ return delegate;
+ }
+
+ @Override public boolean isEmpty() {
+ return ImprovedAbstractMap.this.isEmpty();
+ }
+ };
+ }
+ return result;
+ }
+
+ /**
+ * Returns {@code true} if this map contains no key-value mappings.
+ *
+ * <p>The implementation returns {@code entrySet().isEmpty()}.
+ *
+ * @return {@code true} if this map contains no key-value mappings
+ */
+ @Override public boolean isEmpty() {
+ return entrySet().isEmpty();
+ }
+ }
+
+ static final MapJoiner standardJoiner
+ = Collections2.standardJoiner.withKeyValueSeparator("=");
+}
diff --git a/src/com/google/common/collect/Multimap.java b/src/com/google/common/collect/Multimap.java
new file mode 100644
index 0000000..19f3b99
--- /dev/null
+++ b/src/com/google/common/collect/Multimap.java
@@ -0,0 +1,262 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * A collection similar to a {@code Map}, but which may associate multiple
+ * values with a single key. If you call {@link #put} twice, with the same key
+ * but different values, the multimap contains mappings from the key to both
+ * values.
+ *
+ * <p>The methods {@link #get}, {@link #keySet}, {@link #keys}, {@link #values},
+ * {@link #entries}, and {@link #asMap} return collections that are views of the
+ * multimap. If the multimap is modifiable, updating it can change the contents
+ * of those collections, and updating the collections will change the multimap.
+ * In contrast, {@link #replaceValues} and {@link #removeAll} return collections
+ * that are independent of subsequent multimap changes.
+ *
+ * <p>Depending on the implementation, a multimap may or may not allow duplicate
+ * key-value pairs. In other words, the multimap contents after adding the same
+ * key and value twice varies between implementations. In multimaps allowing
+ * duplicates, the multimap will contain two mappings, and {@code get} will
+ * return a collection that includes the value twice. In multimaps not
+ * supporting duplicates, the multimap will contain a single mapping from the
+ * key to the value, and {@code get} will return a collection that includes the
+ * value once.
+ *
+ * <p>All methods that alter the multimap are optional, and the views returned
+ * by the multimap may or may not be modifiable. When modification isn't
+ * supported, those methods will throw an {@link UnsupportedOperationException}.
+ *
+ * @author Jared Levy
+ * @param <K> the type of keys maintained by this multimap
+ * @param <V> the type of mapped values
+ */
+@GwtCompatible
+public interface Multimap<K, V> {
+ // Query Operations
+
+ /** Returns the number of key-value pairs in the multimap. */
+ int size();
+
+ /** Returns {@code true} if the multimap contains no key-value pairs. */
+ boolean isEmpty();
+
+ /**
+ * Returns {@code true} if the multimap contains any values for the specified
+ * key.
+ *
+ * @param key key to search for in multimap
+ */
+ boolean containsKey(@Nullable Object key);
+
+ /**
+ * Returns {@code true} if the multimap contains the specified value for any
+ * key.
+ *
+ * @param value value to search for in multimap
+ */
+ boolean containsValue(@Nullable Object value);
+
+ /**
+ * Returns {@code true} if the multimap contains the specified key-value pair.
+ *
+ * @param key key to search for in multimap
+ * @param value value to search for in multimap
+ */
+ boolean containsEntry(@Nullable Object key, @Nullable Object value);
+
+ // Modification Operations
+
+ /**
+ * Stores a key-value pair in the multimap.
+ *
+ * <p>Some multimap implementations allow duplicate key-value pairs, in which
+ * case {@code put} always adds a new key-value pair and increases the
+ * multimap size by 1. Other implementations prohibit duplicates, and storing
+ * a key-value pair that's already in the multimap has no effect.
+ *
+ * @param key key to store in the multimap
+ * @param value value to store in the multimap
+ * @return {@code true} if the method increased the size of the multimap, or
+ * {@code false} if the multimap already contained the key-value pair and
+ * doesn't allow duplicates
+ */
+ boolean put(@Nullable K key, @Nullable V value);
+
+ /**
+ * Removes a key-value pair from the multimap.
+ *
+ * @param key key of entry to remove from the multimap
+ * @param value value of entry to remove the multimap
+ * @return {@code true} if the multimap changed
+ */
+ boolean remove(@Nullable Object key, @Nullable Object value);
+
+ // Bulk Operations
+
+ /**
+ * Stores a collection of values with the same key.
+ *
+ * @param key key to store in the multimap
+ * @param values values to store in the multimap
+ * @return {@code true} if the multimap changed
+ */
+ boolean putAll(@Nullable K key, Iterable<? extends V> values);
+
+ /**
+ * Copies all of another multimap's key-value pairs into this multimap. The
+ * order in which the mappings are added is determined by
+ * {@code multimap.entries()}.
+ *
+ * @param multimap mappings to store in this multimap
+ * @return {@code true} if the multimap changed
+ */
+ boolean putAll(Multimap<? extends K, ? extends V> multimap);
+
+ /**
+ * Stores a collection of values with the same key, replacing any existing
+ * values for that key.
+ *
+ * @param key key to store in the multimap
+ * @param values values to store in the multimap
+ * @return the collection of replaced values, or an empty collection if no
+ * values were previously associated with the key. The collection
+ * <i>may</i> be modifiable, but updating it will have no effect on the
+ * multimap.
+ */
+ Collection<V> replaceValues(@Nullable K key, Iterable<? extends V> values);
+
+ /**
+ * Removes all values associated with a given key.
+ *
+ * @param key key of entries to remove from the multimap
+ * @return the collection of removed values, or an empty collection if no
+ * values were associated with the provided key. The collection
+ * <i>may</i> be modifiable, but updating it will have no effect on the
+ * multimap.
+ */
+ Collection<V> removeAll(@Nullable Object key);
+
+ /**
+ * Removes all key-value pairs from the multimap.
+ */
+ void clear();
+
+ // Views
+
+ /**
+ * Returns a collection view of all values associated with a key. If no
+ * mappings in the multimap have the provided key, an empty collection is
+ * returned.
+ *
+ * <p>Changes to the returned collection will update the underlying multimap,
+ * and vice versa.
+ *
+ * @param key key to search for in multimap
+ * @return the collection of values that the key maps to
+ */
+ Collection<V> get(@Nullable K key);
+
+ /**
+ * Returns the set of all keys, each appearing once in the returned set.
+ * Changes to the returned set will update the underlying multimap, and vice
+ * versa.
+ *
+ * @return the collection of distinct keys
+ */
+ Set<K> keySet();
+
+ /**
+ * Returns a collection, which may contain duplicates, of all keys. The number
+ * of times of key appears in the returned multiset equals the number of
+ * mappings the key has in the multimap. Changes to the returned multiset will
+ * update the underlying multimap, and vice versa.
+ *
+ * @return a multiset with keys corresponding to the distinct keys of the
+ * multimap and frequencies corresponding to the number of values that
+ * each key maps to
+ */
+ Multiset<K> keys();
+
+ /**
+ * Returns a collection of all values in the multimap. Changes to the returned
+ * collection will update the underlying multimap, and vice versa.
+ *
+ * @return collection of values, which may include the same value multiple
+ * times if it occurs in multiple mappings
+ */
+ Collection<V> values();
+
+ /**
+ * Returns a collection of all key-value pairs. Changes to the returned
+ * collection will update the underlying multimap, and vice versa. The entries
+ * collection does not support the {@code add} or {@code addAll} operations.
+ *
+ * @return collection of map entries consisting of key-value pairs
+ */
+ Collection<Map.Entry<K, V>> entries();
+
+ /**
+ * Returns a map view that associates each key with the corresponding values
+ * in the multimap. Changes to the returned map, such as element removal,
+ * will update the underlying multimap. The map does not support
+ * {@code setValue()} on its entries, {@code put}, or {@code putAll}.
+ *
+ * <p>The collections returned by {@code asMap().get(Object)} have the same
+ * behavior as those returned by {@link #get}.
+ *
+ * @return a map view from a key to its collection of values
+ */
+ Map<K, Collection<V>> asMap();
+
+ // Comparison and hashing
+
+ /**
+ * Compares the specified object with this multimap for equality. Two
+ * multimaps are equal when their map views, as returned by {@link #asMap},
+ * are also equal.
+ *
+ * <p>In general, two multimaps with identical key-value mappings may or may
+ * not be equal, depending on the implementation. For example, two
+ * {@link SetMultimap} instances with the same key-value mappings are equal,
+ * but equality of two {@link ListMultimap} instances depends on the ordering
+ * of the values for each key.
+ *
+ * <p>A non-empty {@link SetMultimap} cannot be equal to a non-empty
+ * {@link ListMultimap}, since their {@link #asMap} views contain unequal
+ * collections as values. However, any two empty multimaps are equal, because
+ * they both have empty {@link #asMap} views.
+ */
+ boolean equals(@Nullable Object obj);
+
+ /**
+ * Returns the hash code for this multimap.
+ *
+ * <p>The hash code of a multimap is defined as the hash code of the map view,
+ * as returned by {@link Multimap#asMap}.
+ */
+ int hashCode();
+}
diff --git a/src/com/google/common/collect/Multimaps.java b/src/com/google/common/collect/Multimaps.java
new file mode 100644
index 0000000..39bb3ce
--- /dev/null
+++ b/src/com/google/common/collect/Multimaps.java
@@ -0,0 +1,1227 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.common.base.Joiner.MapJoiner;
+import com.google.common.base.Preconditions;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+import com.google.common.base.Supplier;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.util.AbstractSet;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.SortedSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * Provides static methods acting on or generating a {@code Multimap}.
+ *
+ * @author Jared Levy
+ * @author Robert Konigsberg
+ * @author Mike Bostock
+ */
+@GwtCompatible
+public final class Multimaps {
+ private Multimaps() {}
+
+ /**
+ * Creates a new {@code Multimap} that uses the provided map and factory. It
+ * can generate a multimap based on arbitrary {@link Map} and
+ * {@link Collection} classes.
+ *
+ * <p>The {@code factory}-generated and {@code map} classes determine the
+ * multimap iteration order. They also specify the behavior of the
+ * {@code equals}, {@code hashCode}, and {@code toString} methods for the
+ * multimap and its returned views. However, the multimap's {@code get}
+ * method returns instances of a different class than {@code factory.get()}
+ * does.
+ *
+ * <p>The multimap is serializable if {@code map}, {@code factory}, the
+ * collections generated by {@code factory}, and the multimap contents are all
+ * serializable.
+ *
+ * <p>The multimap is not threadsafe when any concurrent operations update the
+ * multimap, even if {@code map} and the instances generated by
+ * {@code factory} are. Concurrent read operations will work correctly. To
+ * allow concurrent update operations, wrap the multimap with a call to
+ * {@link #synchronizedMultimap}.
+ *
+ * <p>Call this method only when the simpler methods
+ * {@link ArrayListMultimap#create()}, {@link HashMultimap#create()},
+ * {@link LinkedHashMultimap#create()}, {@link LinkedListMultimap#create()},
+ * {@link TreeMultimap#create()}, and
+ * {@link TreeMultimap#create(Comparator, Comparator)} won't suffice.
+ *
+ * <p>Note: the multimap assumes complete ownership over of {@code map} and
+ * the collections returned by {@code factory}. Those objects should not be
+ * manually updated and they should not use soft, weak, or phantom references.
+ *
+ * @param map place to store the mapping from each key to its corresponding
+ * values
+ * @param factory supplier of new, empty collections that will each hold all
+ * values for a given key
+ * @throws IllegalArgumentException if {@code map} is not empty
+ */
+ public static <K, V> Multimap<K, V> newMultimap(Map<K, Collection<V>> map,
+ final Supplier<? extends Collection<V>> factory) {
+ return new CustomMultimap<K, V>(map, factory);
+ }
+
+ private static class CustomMultimap<K, V> extends AbstractMultimap<K, V> {
+ transient Supplier<? extends Collection<V>> factory;
+
+ CustomMultimap(Map<K, Collection<V>> map,
+ Supplier<? extends Collection<V>> factory) {
+ super(map);
+ this.factory = checkNotNull(factory);
+ }
+
+ @Override protected Collection<V> createCollection() {
+ return factory.get();
+ }
+
+ // can't use Serialization writeMultimap and populateMultimap methods since
+ // there's no way to generate the empty backing map.
+
+ /** @serialData the factory and the backing map */
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ stream.defaultWriteObject();
+ stream.writeObject(factory);
+ stream.writeObject(backingMap());
+ }
+
+ @SuppressWarnings("unchecked") // reading data stored by writeObject
+ private void readObject(ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+ factory = (Supplier<? extends Collection<V>>) stream.readObject();
+ Map<K, Collection<V>> map = (Map<K, Collection<V>>) stream.readObject();
+ setMap(map);
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Creates a new {@code ListMultimap} that uses the provided map and factory.
+ * It can generate a multimap based on arbitrary {@link Map} and {@link List}
+ * classes.
+ *
+ * <p>The {@code factory}-generated and {@code map} classes determine the
+ * multimap iteration order. They also specify the behavior of the
+ * {@code equals}, {@code hashCode}, and {@code toString} methods for the
+ * multimap and its returned views. The multimap's {@code get}, {@code
+ * removeAll}, and {@code replaceValues} methods return {@code RandomAccess}
+ * lists if the factory does. However, the multimap's {@code get} method
+ * returns instances of a different class than does {@code factory.get()}.
+ *
+ * <p>The multimap is serializable if {@code map}, {@code factory}, the
+ * lists generated by {@code factory}, and the multimap contents are all
+ * serializable.
+ *
+ * <p>The multimap is not threadsafe when any concurrent operations update the
+ * multimap, even if {@code map} and the instances generated by
+ * {@code factory} are. Concurrent read operations will work correctly. To
+ * allow concurrent update operations, wrap the multimap with a call to
+ * {@link #synchronizedListMultimap}.
+ *
+ * <p>Call this method only when the simpler methods
+ * {@link ArrayListMultimap#create()} and {@link LinkedListMultimap#create()}
+ * won't suffice.
+ *
+ * <p>Note: the multimap assumes complete ownership over of {@code map} and
+ * the lists returned by {@code factory}. Those objects should not be manually
+ * updated and they should not use soft, weak, or phantom references.
+ *
+ * @param map place to store the mapping from each key to its corresponding
+ * values
+ * @param factory supplier of new, empty lists that will each hold all values
+ * for a given key
+ * @throws IllegalArgumentException if {@code map} is not empty
+ */
+ public static <K, V> ListMultimap<K, V> newListMultimap(
+ Map<K, Collection<V>> map, final Supplier<? extends List<V>> factory) {
+ return new CustomListMultimap<K, V>(map, factory);
+ }
+
+ private static class CustomListMultimap<K, V>
+ extends AbstractListMultimap<K, V> {
+ transient Supplier<? extends List<V>> factory;
+
+ CustomListMultimap(Map<K, Collection<V>> map,
+ Supplier<? extends List<V>> factory) {
+ super(map);
+ this.factory = checkNotNull(factory);
+ }
+
+ @Override protected List<V> createCollection() {
+ return factory.get();
+ }
+
+ /** @serialData the factory and the backing map */
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ stream.defaultWriteObject();
+ stream.writeObject(factory);
+ stream.writeObject(backingMap());
+ }
+
+ @SuppressWarnings("unchecked") // reading data stored by writeObject
+ private void readObject(ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+ factory = (Supplier<? extends List<V>>) stream.readObject();
+ Map<K, Collection<V>> map = (Map<K, Collection<V>>) stream.readObject();
+ setMap(map);
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Creates a new {@code SetMultimap} that uses the provided map and factory.
+ * It can generate a multimap based on arbitrary {@link Map} and {@link Set}
+ * classes.
+ *
+ * <p>The {@code factory}-generated and {@code map} classes determine the
+ * multimap iteration order. They also specify the behavior of the
+ * {@code equals}, {@code hashCode}, and {@code toString} methods for the
+ * multimap and its returned views. However, the multimap's {@code get}
+ * method returns instances of a different class than {@code factory.get()}
+ * does.
+ *
+ * <p>The multimap is serializable if {@code map}, {@code factory}, the
+ * sets generated by {@code factory}, and the multimap contents are all
+ * serializable.
+ *
+ * <p>The multimap is not threadsafe when any concurrent operations update the
+ * multimap, even if {@code map} and the instances generated by
+ * {@code factory} are. Concurrent read operations will work correctly. To
+ * allow concurrent update operations, wrap the multimap with a call to
+ * {@link #synchronizedSetMultimap}.
+ *
+ * <p>Call this method only when the simpler methods
+ * {@link HashMultimap#create()}, {@link LinkedHashMultimap#create()},
+ * {@link TreeMultimap#create()}, and
+ * {@link TreeMultimap#create(Comparator, Comparator)} won't suffice.
+ *
+ * <p>Note: the multimap assumes complete ownership over of {@code map} and
+ * the sets returned by {@code factory}. Those objects should not be manually
+ * updated and they should not use soft, weak, or phantom references.
+ *
+ * @param map place to store the mapping from each key to its corresponding
+ * values
+ * @param factory supplier of new, empty sets that will each hold all values
+ * for a given key
+ * @throws IllegalArgumentException if {@code map} is not empty
+ */
+ public static <K, V> SetMultimap<K, V> newSetMultimap(
+ Map<K, Collection<V>> map, final Supplier<? extends Set<V>> factory) {
+ return new CustomSetMultimap<K, V>(map, factory);
+ }
+
+ private static class CustomSetMultimap<K, V>
+ extends AbstractSetMultimap<K, V> {
+ transient Supplier<? extends Set<V>> factory;
+
+ CustomSetMultimap(Map<K, Collection<V>> map,
+ Supplier<? extends Set<V>> factory) {
+ super(map);
+ this.factory = checkNotNull(factory);
+ }
+
+ @Override protected Set<V> createCollection() {
+ return factory.get();
+ }
+
+ /** @serialData the factory and the backing map */
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ stream.defaultWriteObject();
+ stream.writeObject(factory);
+ stream.writeObject(backingMap());
+ }
+
+ @SuppressWarnings("unchecked") // reading data stored by writeObject
+ private void readObject(ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+ factory = (Supplier<? extends Set<V>>) stream.readObject();
+ Map<K, Collection<V>> map = (Map<K, Collection<V>>) stream.readObject();
+ setMap(map);
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Creates a new {@code SortedSetMultimap} that uses the provided map and
+ * factory. It can generate a multimap based on arbitrary {@link Map} and
+ * {@link SortedSet} classes.
+ *
+ * <p>The {@code factory}-generated and {@code map} classes determine the
+ * multimap iteration order. They also specify the behavior of the
+ * {@code equals}, {@code hashCode}, and {@code toString} methods for the
+ * multimap and its returned views. However, the multimap's {@code get}
+ * method returns instances of a different class than {@code factory.get()}
+ * does.
+ *
+ * <p>The multimap is serializable if {@code map}, {@code factory}, the
+ * sets generated by {@code factory}, and the multimap contents are all
+ * serializable.
+ *
+ * <p>The multimap is not threadsafe when any concurrent operations update the
+ * multimap, even if {@code map} and the instances generated by
+ * {@code factory} are. Concurrent read operations will work correctly. To
+ * allow concurrent update operations, wrap the multimap with a call to
+ * {@link #synchronizedSortedSetMultimap}.
+ *
+ * <p>Call this method only when the simpler methods
+ * {@link TreeMultimap#create()} and
+ * {@link TreeMultimap#create(Comparator, Comparator)} won't suffice.
+ *
+ * <p>Note: the multimap assumes complete ownership over of {@code map} and
+ * the sets returned by {@code factory}. Those objects should not be manually
+ * updated and they should not use soft, weak, or phantom references.
+ *
+ * @param map place to store the mapping from each key to its corresponding
+ * values
+ * @param factory supplier of new, empty sorted sets that will each hold
+ * all values for a given key
+ * @throws IllegalArgumentException if {@code map} is not empty
+ */
+ public static <K, V> SortedSetMultimap<K, V> newSortedSetMultimap(
+ Map<K, Collection<V>> map,
+ final Supplier<? extends SortedSet<V>> factory) {
+ return new CustomSortedSetMultimap<K, V>(map, factory);
+ }
+
+ private static class CustomSortedSetMultimap<K, V>
+ extends AbstractSortedSetMultimap<K, V> {
+ transient Supplier<? extends SortedSet<V>> factory;
+ transient Comparator<? super V> valueComparator;
+
+ CustomSortedSetMultimap(Map<K, Collection<V>> map,
+ Supplier<? extends SortedSet<V>> factory) {
+ super(map);
+ this.factory = checkNotNull(factory);
+ valueComparator = factory.get().comparator();
+ }
+
+ @Override protected SortedSet<V> createCollection() {
+ return factory.get();
+ }
+
+ /*@Override*/ public Comparator<? super V> valueComparator() {
+ return valueComparator;
+ }
+
+ /** @serialData the factory and the backing map */
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ stream.defaultWriteObject();
+ stream.writeObject(factory);
+ stream.writeObject(backingMap());
+ }
+
+ @SuppressWarnings("unchecked") // reading data stored by writeObject
+ private void readObject(ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+ factory = (Supplier<? extends SortedSet<V>>) stream.readObject();
+ valueComparator = factory.get().comparator();
+ Map<K, Collection<V>> map = (Map<K, Collection<V>>) stream.readObject();
+ setMap(map);
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Copies each key-value mapping in {@code source} into {@code dest}, with
+ * its key and value reversed.
+ *
+ * @param source any multimap
+ * @param dest the multimap to copy into; usually empty
+ * @return {@code dest}
+ */
+ public static <K, V, M extends Multimap<K, V>> M invertFrom(
+ Multimap<? extends V, ? extends K> source, M dest) {
+ for (Map.Entry<? extends V, ? extends K> entry : source.entries()) {
+ dest.put(entry.getValue(), entry.getKey());
+ }
+ return dest;
+ }
+
+ /**
+ * Returns a synchronized (thread-safe) multimap backed by the specified
+ * multimap. In order to guarantee serial access, it is critical that
+ * <b>all</b> access to the backing multimap is accomplished through the
+ * returned multimap.
+ *
+ * <p>It is imperative that the user manually synchronize on the returned
+ * multimap when accessing any of its collection views: <pre> {@code
+ *
+ * Multimap<K, V> m = Multimaps.synchronizedMultimap(
+ * HashMultimap.<K, V>create());
+ * ...
+ * Set<K> s = m.keySet(); // Needn't be in synchronized block
+ * ...
+ * synchronized (m) { // Synchronizing on m, not s!
+ * Iterator<K> i = s.iterator(); // Must be in synchronized block
+ * while (i.hasNext()) {
+ * foo(i.next());
+ * }
+ * }}</pre>
+ *
+ * Failure to follow this advice may result in non-deterministic behavior.
+ *
+ * <p>Note that the generated multimap's {@link Multimap#removeAll} and
+ * {@link Multimap#replaceValues} methods return collections that aren't
+ * synchronized.
+ *
+ * <p>The returned multimap will be serializable if the specified multimap is
+ * serializable.
+ *
+ * @param multimap the multimap to be wrapped in a synchronized view
+ * @return a synchronized view of the specified multimap
+ */
+ public static <K, V> Multimap<K, V> synchronizedMultimap(
+ Multimap<K, V> multimap) {
+ return Synchronized.multimap(multimap, null);
+ }
+
+ /**
+ * Returns an unmodifiable view of the specified multimap. Query operations on
+ * the returned multimap "read through" to the specified multimap, and
+ * attempts to modify the returned multimap, either directly or through the
+ * multimap's views, result in an {@code UnsupportedOperationException}.
+ *
+ * <p>Note that the generated multimap's {@link Multimap#removeAll} and
+ * {@link Multimap#replaceValues} methods return collections that are
+ * modifiable.
+ *
+ * <p>The returned multimap will be serializable if the specified multimap is
+ * serializable.
+ *
+ * @param delegate the multimap for which an unmodifiable view is to be
+ * returned
+ * @return an unmodifiable view of the specified multimap
+ */
+ public static <K, V> Multimap<K, V> unmodifiableMultimap(
+ Multimap<K, V> delegate) {
+ return new UnmodifiableMultimap<K, V>(delegate);
+ }
+
+ private static class UnmodifiableMultimap<K, V>
+ extends ForwardingMultimap<K, V> implements Serializable {
+ final Multimap<K, V> delegate;
+ transient Collection<Entry<K, V>> entries;
+ transient Multiset<K> keys;
+ transient Set<K> keySet;
+ transient Collection<V> values;
+ transient Map<K, Collection<V>> map;
+
+ UnmodifiableMultimap(final Multimap<K, V> delegate) {
+ this.delegate = delegate;
+ }
+
+ @Override protected Multimap<K, V> delegate() {
+ return delegate;
+ }
+
+ @Override public void clear() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override public Map<K, Collection<V>> asMap() {
+ Map<K, Collection<V>> result = map;
+ if (result == null) {
+ final Map<K, Collection<V>> unmodifiableMap
+ = Collections.unmodifiableMap(delegate.asMap());
+ map = result = new ForwardingMap<K, Collection<V>>() {
+ @Override protected Map<K, Collection<V>> delegate() {
+ return unmodifiableMap;
+ }
+
+ Set<Entry<K, Collection<V>>> entrySet;
+
+ @Override public Set<Map.Entry<K, Collection<V>>> entrySet() {
+ Set<Entry<K, Collection<V>>> result = entrySet;
+ return (result == null)
+ ? entrySet
+ = unmodifiableAsMapEntries(unmodifiableMap.entrySet())
+ : result;
+ }
+
+ @Override public Collection<V> get(Object key) {
+ Collection<V> collection = unmodifiableMap.get(key);
+ return (collection == null)
+ ? null : unmodifiableValueCollection(collection);
+ }
+
+ Collection<Collection<V>> asMapValues;
+
+ @Override public Collection<Collection<V>> values() {
+ Collection<Collection<V>> result = asMapValues;
+ return (result == null)
+ ? asMapValues
+ = new UnmodifiableAsMapValues<V>(unmodifiableMap.values())
+ : result;
+ }
+
+ @Override public boolean containsValue(Object o) {
+ return values().contains(o);
+ }
+ };
+ }
+ return result;
+ }
+
+ @Override public Collection<Entry<K, V>> entries() {
+ Collection<Entry<K, V>> result = entries;
+ if (result == null) {
+ entries = result = unmodifiableEntries(delegate.entries());
+ }
+ return result;
+ }
+
+ @Override public Collection<V> get(K key) {
+ return unmodifiableValueCollection(delegate.get(key));
+ }
+
+ @Override public Multiset<K> keys() {
+ Multiset<K> result = keys;
+ if (result == null) {
+ keys = result = Multisets.unmodifiableMultiset(delegate.keys());
+ }
+ return result;
+ }
+
+ @Override public Set<K> keySet() {
+ Set<K> result = keySet;
+ if (result == null) {
+ keySet = result = Collections.unmodifiableSet(delegate.keySet());
+ }
+ return result;
+ }
+
+ @Override public boolean put(K key, V value) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override public boolean putAll(K key,
+ @SuppressWarnings("hiding") Iterable<? extends V> values) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override public boolean remove(Object key, Object value) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override public Collection<V> removeAll(Object key) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override public Collection<V> replaceValues(K key,
+ @SuppressWarnings("hiding") Iterable<? extends V> values) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override public Collection<V> values() {
+ Collection<V> result = values;
+ if (result == null) {
+ values = result = Collections.unmodifiableCollection(delegate.values());
+ }
+ return result;
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ private static class UnmodifiableAsMapValues<V>
+ extends ForwardingCollection<Collection<V>> {
+ final Collection<Collection<V>> delegate;
+ UnmodifiableAsMapValues(Collection<Collection<V>> delegate) {
+ this.delegate = Collections.unmodifiableCollection(delegate);
+ }
+ @Override protected Collection<Collection<V>> delegate() {
+ return delegate;
+ }
+ @Override public Iterator<Collection<V>> iterator() {
+ final Iterator<Collection<V>> iterator = delegate.iterator();
+ return new Iterator<Collection<V>>() {
+ public boolean hasNext() {
+ return iterator.hasNext();
+ }
+ public Collection<V> next() {
+ return unmodifiableValueCollection(iterator.next());
+ }
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+ };
+ }
+ @Override public Object[] toArray() {
+ return ObjectArrays.toArrayImpl(this);
+ }
+ @Override public <T> T[] toArray(T[] array) {
+ return ObjectArrays.toArrayImpl(this, array);
+ }
+ @Override public boolean contains(Object o) {
+ return Iterators.contains(iterator(), o);
+ }
+ @Override public boolean containsAll(Collection<?> c) {
+ return Collections2.containsAll(this, c);
+ }
+ }
+
+ private static class UnmodifiableListMultimap<K, V>
+ extends UnmodifiableMultimap<K, V> implements ListMultimap<K, V> {
+ UnmodifiableListMultimap(ListMultimap<K, V> delegate) {
+ super(delegate);
+ }
+ @Override public ListMultimap<K, V> delegate() {
+ return (ListMultimap<K, V>) super.delegate();
+ }
+ @Override public List<V> get(K key) {
+ return Collections.unmodifiableList(delegate().get(key));
+ }
+ @Override public List<V> removeAll(Object key) {
+ throw new UnsupportedOperationException();
+ }
+ @Override public List<V> replaceValues(
+ K key, @SuppressWarnings("hiding") Iterable<? extends V> values) {
+ throw new UnsupportedOperationException();
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ private static class UnmodifiableSetMultimap<K, V>
+ extends UnmodifiableMultimap<K, V> implements SetMultimap<K, V> {
+ UnmodifiableSetMultimap(SetMultimap<K, V> delegate) {
+ super(delegate);
+ }
+ @Override public SetMultimap<K, V> delegate() {
+ return (SetMultimap<K, V>) super.delegate();
+ }
+ @Override public Set<V> get(K key) {
+ /*
+ * Note that this doesn't return a SortedSet when delegate is a
+ * SortedSetMultiset, unlike (SortedSet<V>) super.get().
+ */
+ return Collections.unmodifiableSet(delegate().get(key));
+ }
+ @Override public Set<Map.Entry<K, V>> entries() {
+ return Maps.unmodifiableEntrySet(delegate().entries());
+ }
+ @Override public Set<V> removeAll(Object key) {
+ throw new UnsupportedOperationException();
+ }
+ @Override public Set<V> replaceValues(
+ K key, @SuppressWarnings("hiding") Iterable<? extends V> values) {
+ throw new UnsupportedOperationException();
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ private static class UnmodifiableSortedSetMultimap<K, V>
+ extends UnmodifiableSetMultimap<K, V> implements SortedSetMultimap<K, V> {
+ UnmodifiableSortedSetMultimap(SortedSetMultimap<K, V> delegate) {
+ super(delegate);
+ }
+ @Override public SortedSetMultimap<K, V> delegate() {
+ return (SortedSetMultimap<K, V>) super.delegate();
+ }
+ @Override public SortedSet<V> get(K key) {
+ return Collections.unmodifiableSortedSet(delegate().get(key));
+ }
+ @Override public SortedSet<V> removeAll(Object key) {
+ throw new UnsupportedOperationException();
+ }
+ @Override public SortedSet<V> replaceValues(
+ K key, @SuppressWarnings("hiding") Iterable<? extends V> values) {
+ throw new UnsupportedOperationException();
+ }
+ public Comparator<? super V> valueComparator() {
+ return delegate().valueComparator();
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Returns a synchronized (thread-safe) {@code SetMultimap} backed by the
+ * specified multimap.
+ *
+ * <p>You must follow the warnings described in {@link #synchronizedMultimap}.
+ *
+ * <p>The returned multimap will be serializable if the specified multimap is
+ * serializable.
+ *
+ * @param multimap the multimap to be wrapped
+ * @return a synchronized view of the specified multimap
+ */
+ public static <K, V> SetMultimap<K, V> synchronizedSetMultimap(
+ SetMultimap<K, V> multimap) {
+ return Synchronized.setMultimap(multimap, null);
+ }
+
+ /**
+ * Returns an unmodifiable view of the specified {@code SetMultimap}. Query
+ * operations on the returned multimap "read through" to the specified
+ * multimap, and attempts to modify the returned multimap, either directly or
+ * through the multimap's views, result in an
+ * {@code UnsupportedOperationException}.
+ *
+ * <p>Note that the generated multimap's {@link Multimap#removeAll} and
+ * {@link Multimap#replaceValues} methods return collections that are
+ * modifiable.
+ *
+ * <p>The returned multimap will be serializable if the specified multimap is
+ * serializable.
+ *
+ * @param delegate the multimap for which an unmodifiable view is to be
+ * returned
+ * @return an unmodifiable view of the specified multimap
+ */
+ public static <K, V> SetMultimap<K, V> unmodifiableSetMultimap(
+ SetMultimap<K, V> delegate) {
+ return new UnmodifiableSetMultimap<K, V>(delegate);
+ }
+
+ /**
+ * Returns a synchronized (thread-safe) {@code SortedSetMultimap} backed by
+ * the specified multimap.
+ *
+ * <p>You must follow the warnings described in {@link #synchronizedMultimap}.
+ *
+ * <p>The returned multimap will be serializable if the specified multimap is
+ * serializable.
+ *
+ * @param multimap the multimap to be wrapped
+ * @return a synchronized view of the specified multimap
+ */
+ public static <K, V> SortedSetMultimap<K, V>
+ synchronizedSortedSetMultimap(SortedSetMultimap<K, V> multimap) {
+ return Synchronized.sortedSetMultimap(multimap, null);
+ }
+
+ /**
+ * Returns an unmodifiable view of the specified {@code SortedSetMultimap}.
+ * Query operations on the returned multimap "read through" to the specified
+ * multimap, and attempts to modify the returned multimap, either directly or
+ * through the multimap's views, result in an
+ * {@code UnsupportedOperationException}.
+ *
+ * <p>Note that the generated multimap's {@link Multimap#removeAll} and
+ * {@link Multimap#replaceValues} methods return collections that are
+ * modifiable.
+ *
+ * <p>The returned multimap will be serializable if the specified multimap is
+ * serializable.
+ *
+ * @param delegate the multimap for which an unmodifiable view is to be
+ * returned
+ * @return an unmodifiable view of the specified multimap
+ */
+ public static <K, V> SortedSetMultimap<K, V> unmodifiableSortedSetMultimap(
+ SortedSetMultimap<K, V> delegate) {
+ return new UnmodifiableSortedSetMultimap<K, V>(delegate);
+ }
+
+ /**
+ * Returns a synchronized (thread-safe) {@code ListMultimap} backed by the
+ * specified multimap.
+ *
+ * <p>You must follow the warnings described in {@link #synchronizedMultimap}.
+ *
+ * @param multimap the multimap to be wrapped
+ * @return a synchronized view of the specified multimap
+ */
+ public static <K, V> ListMultimap<K, V> synchronizedListMultimap(
+ ListMultimap<K, V> multimap) {
+ return Synchronized.listMultimap(multimap, null);
+ }
+
+ /**
+ * Returns an unmodifiable view of the specified {@code ListMultimap}. Query
+ * operations on the returned multimap "read through" to the specified
+ * multimap, and attempts to modify the returned multimap, either directly or
+ * through the multimap's views, result in an
+ * {@code UnsupportedOperationException}.
+ *
+ * <p>Note that the generated multimap's {@link Multimap#removeAll} and
+ * {@link Multimap#replaceValues} methods return collections that are
+ * modifiable.
+ *
+ * <p>The returned multimap will be serializable if the specified multimap is
+ * serializable.
+ *
+ * @param delegate the multimap for which an unmodifiable view is to be
+ * returned
+ * @return an unmodifiable view of the specified multimap
+ */
+ public static <K, V> ListMultimap<K, V> unmodifiableListMultimap(
+ ListMultimap<K, V> delegate) {
+ return new UnmodifiableListMultimap<K, V>(delegate);
+ }
+
+ /**
+ * Returns an unmodifiable view of the specified collection, preserving the
+ * interface for instances of {@code SortedSet}, {@code Set}, {@code List} and
+ * {@code Collection}, in that order of preference.
+ *
+ * @param collection the collection for which to return an unmodifiable view
+ * @return an unmodifiable view of the collection
+ */
+ private static <V> Collection<V> unmodifiableValueCollection(
+ Collection<V> collection) {
+ if (collection instanceof SortedSet) {
+ return Collections.unmodifiableSortedSet((SortedSet<V>) collection);
+ } else if (collection instanceof Set) {
+ return Collections.unmodifiableSet((Set<V>) collection);
+ } else if (collection instanceof List) {
+ return Collections.unmodifiableList((List<V>) collection);
+ }
+ return Collections.unmodifiableCollection(collection);
+ }
+
+ /**
+ * Returns an unmodifiable view of the specified multimap {@code asMap} entry.
+ * The {@link Entry#setValue} operation throws an {@link
+ * UnsupportedOperationException}, and the collection returned by {@code
+ * getValue} is also an unmodifiable (type-preserving) view. This also has the
+ * side-effect of redefining equals to comply with the Map.Entry contract, and
+ * to avoid a possible nefarious implementation of equals.
+ *
+ * @param entry the entry for which to return an unmodifiable view
+ * @return an unmodifiable view of the entry
+ */
+ private static <K, V> Map.Entry<K, Collection<V>> unmodifiableAsMapEntry(
+ final Map.Entry<K, Collection<V>> entry) {
+ checkNotNull(entry);
+ return new AbstractMapEntry<K, Collection<V>>() {
+ @Override public K getKey() {
+ return entry.getKey();
+ }
+
+ @Override public Collection<V> getValue() {
+ return unmodifiableValueCollection(entry.getValue());
+ }
+ };
+ }
+
+ /**
+ * Returns an unmodifiable view of the specified collection of entries. The
+ * {@link Entry#setValue} operation throws an {@link
+ * UnsupportedOperationException}. If the specified collection is a {@code
+ * Set}, the returned collection is also a {@code Set}.
+ *
+ * @param entries the entries for which to return an unmodifiable view
+ * @return an unmodifiable view of the entries
+ */
+ private static <K, V> Collection<Entry<K, V>> unmodifiableEntries(
+ Collection<Entry<K, V>> entries) {
+ if (entries instanceof Set) {
+ return Maps.unmodifiableEntrySet((Set<Entry<K, V>>) entries);
+ }
+ return new Maps.UnmodifiableEntries<K, V>(
+ Collections.unmodifiableCollection(entries));
+ }
+
+ /**
+ * Returns an unmodifiable view of the specified set of {@code asMap} entries.
+ * The {@link Entry#setValue} operation throws an {@link
+ * UnsupportedOperationException}, as do any operations that attempt to modify
+ * the returned collection.
+ *
+ * @param asMapEntries the {@code asMap} entries for which to return an
+ * unmodifiable view
+ * @return an unmodifiable view of the collection entries
+ */
+ private static <K, V> Set<Entry<K, Collection<V>>> unmodifiableAsMapEntries(
+ Set<Entry<K, Collection<V>>> asMapEntries) {
+ return new UnmodifiableAsMapEntries<K, V>(
+ Collections.unmodifiableSet(asMapEntries));
+ }
+
+ /** @see Multimaps#unmodifiableAsMapEntries */
+ static class UnmodifiableAsMapEntries<K, V>
+ extends ForwardingSet<Entry<K, Collection<V>>> {
+ private final Set<Entry<K, Collection<V>>> delegate;
+ UnmodifiableAsMapEntries(Set<Entry<K, Collection<V>>> delegate) {
+ this.delegate = delegate;
+ }
+
+ @Override protected Set<Entry<K, Collection<V>>> delegate() {
+ return delegate;
+ }
+
+ @Override public Iterator<Entry<K, Collection<V>>> iterator() {
+ final Iterator<Entry<K, Collection<V>>> iterator = delegate.iterator();
+ return new ForwardingIterator<Entry<K, Collection<V>>>() {
+ @Override protected Iterator<Entry<K, Collection<V>>> delegate() {
+ return iterator;
+ }
+ @Override public Entry<K, Collection<V>> next() {
+ return unmodifiableAsMapEntry(iterator.next());
+ }
+ };
+ }
+
+ @Override public Object[] toArray() {
+ return ObjectArrays.toArrayImpl(this);
+ }
+
+ @Override public <T> T[] toArray(T[] array) {
+ return ObjectArrays.toArrayImpl(this, array);
+ }
+
+ @Override public boolean contains(Object o) {
+ return Maps.containsEntryImpl(delegate(), o);
+ }
+
+ @Override public boolean containsAll(Collection<?> c) {
+ return Collections2.containsAll(this, c);
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ return Collections2.setEquals(this, object);
+ }
+ }
+
+ /**
+ * Returns a multimap view of the specified map. The multimap is backed by the
+ * map, so changes to the map are reflected in the multimap, and vice versa.
+ * If the map is modified while an iteration over one of the multimap's
+ * collection views is in progress (except through the iterator's own {@code
+ * remove} operation, or through the {@code setValue} operation on a map entry
+ * returned by the iterator), the results of the iteration are undefined.
+ *
+ * <p>The multimap supports mapping removal, which removes the corresponding
+ * mapping from the map. It does not support any operations which might add
+ * mappings, such as {@code put}, {@code putAll} or {@code replaceValues}.
+ *
+ * <p>The returned multimap will be serializable if the specified map is
+ * serializable.
+ *
+ * @param map the backing map for the returned multimap view
+ */
+ public static <K, V> SetMultimap<K, V> forMap(Map<K, V> map) {
+ return new MapMultimap<K, V>(map);
+ }
+
+ /** @see Multimaps#forMap */
+ private static class MapMultimap<K, V>
+ implements SetMultimap<K, V>, Serializable {
+ final Map<K, V> map;
+ transient Map<K, Collection<V>> asMap;
+
+ MapMultimap(Map<K, V> map) {
+ this.map = checkNotNull(map);
+ }
+
+ public int size() {
+ return map.size();
+ }
+
+ public boolean isEmpty() {
+ return map.isEmpty();
+ }
+
+ public boolean containsKey(Object key) {
+ return map.containsKey(key);
+ }
+
+ public boolean containsValue(Object value) {
+ return map.containsValue(value);
+ }
+
+ public boolean containsEntry(Object key, Object value) {
+ return map.entrySet().contains(Maps.immutableEntry(key, value));
+ }
+
+ public Set<V> get(final K key) {
+ return new AbstractSet<V>() {
+ @Override public Iterator<V> iterator() {
+ return new Iterator<V>() {
+ int i;
+
+ public boolean hasNext() {
+ return (i == 0) && map.containsKey(key);
+ }
+
+ public V next() {
+ if (!hasNext()) {
+ throw new NoSuchElementException();
+ }
+ i++;
+ return map.get(key);
+ }
+
+ public void remove() {
+ checkState(i == 1);
+ i = -1;
+ map.remove(key);
+ }
+ };
+ }
+
+ @Override public int size() {
+ return map.containsKey(key) ? 1 : 0;
+ }
+ };
+ }
+
+ public boolean put(K key, V value) {
+ throw new UnsupportedOperationException();
+ }
+
+ public boolean putAll(K key, Iterable<? extends V> values) {
+ throw new UnsupportedOperationException();
+ }
+
+ public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
+ throw new UnsupportedOperationException();
+ }
+
+ public Set<V> replaceValues(K key, Iterable<? extends V> values) {
+ throw new UnsupportedOperationException();
+ }
+
+ public boolean remove(Object key, Object value) {
+ return map.entrySet().remove(Maps.immutableEntry(key, value));
+ }
+
+ public Set<V> removeAll(Object key) {
+ Set<V> values = new HashSet<V>(2);
+ if (!map.containsKey(key)) {
+ return values;
+ }
+ values.add(map.remove(key));
+ return values;
+ }
+
+ public void clear() {
+ map.clear();
+ }
+
+ public Set<K> keySet() {
+ return map.keySet();
+ }
+
+ public Multiset<K> keys() {
+ return Multisets.forSet(map.keySet());
+ }
+
+ public Collection<V> values() {
+ return map.values();
+ }
+
+ public Set<Entry<K, V>> entries() {
+ return map.entrySet();
+ }
+
+ public Map<K, Collection<V>> asMap() {
+ Map<K, Collection<V>> result = asMap;
+ if (result == null) {
+ asMap = result = new AsMap();
+ }
+ return result;
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ if (object == this) {
+ return true;
+ }
+ if (object instanceof Multimap) {
+ Multimap<?, ?> that = (Multimap<?, ?>) object;
+ return this.size() == that.size() && asMap().equals(that.asMap());
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ return map.hashCode();
+ }
+
+ private static final MapJoiner joiner
+ = Joiner.on("], ").withKeyValueSeparator("=[").useForNull("null");
+
+ @Override public String toString() {
+ if (map.isEmpty()) {
+ return "{}";
+ }
+ StringBuilder builder = new StringBuilder(map.size() * 16).append('{');
+ joiner.appendTo(builder, map);
+ return builder.append("]}").toString();
+ }
+
+ /** @see MapMultimap#asMap */
+ class AsMapEntries extends AbstractSet<Entry<K, Collection<V>>> {
+ @Override public int size() {
+ return map.size();
+ }
+
+ @Override public Iterator<Entry<K, Collection<V>>> iterator() {
+ return new Iterator<Entry<K, Collection<V>>>() {
+ final Iterator<K> keys = map.keySet().iterator();
+
+ public boolean hasNext() {
+ return keys.hasNext();
+ }
+ public Entry<K, Collection<V>> next() {
+ final K key = keys.next();
+ return new AbstractMapEntry<K, Collection<V>>() {
+ @Override public K getKey() {
+ return key;
+ }
+ @Override public Collection<V> getValue() {
+ return get(key);
+ }
+ };
+ }
+ public void remove() {
+ keys.remove();
+ }
+ };
+ }
+
+ @Override public boolean contains(Object o) {
+ if (!(o instanceof Entry)) {
+ return false;
+ }
+ Entry<?, ?> entry = (Entry<?, ?>) o;
+ if (!(entry.getValue() instanceof Set)) {
+ return false;
+ }
+ Set<?> set = (Set<?>) entry.getValue();
+ return (set.size() == 1)
+ && containsEntry(entry.getKey(), set.iterator().next());
+ }
+
+ @Override public boolean remove(Object o) {
+ if (!(o instanceof Entry)) {
+ return false;
+ }
+ Entry<?, ?> entry = (Entry<?, ?>) o;
+ if (!(entry.getValue() instanceof Set)) {
+ return false;
+ }
+ Set<?> set = (Set<?>) entry.getValue();
+ return (set.size() == 1)
+ && map.entrySet().remove(
+ Maps.immutableEntry(entry.getKey(), set.iterator().next()));
+ }
+ }
+
+ /** @see MapMultimap#asMap */
+ class AsMap extends Maps.ImprovedAbstractMap<K, Collection<V>> {
+ @Override protected Set<Entry<K, Collection<V>>> createEntrySet() {
+ return new AsMapEntries();
+ }
+
+ // The following methods are included for performance.
+
+ @Override public boolean containsKey(Object key) {
+ return map.containsKey(key);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override public Collection<V> get(Object key) {
+ Collection<V> collection = MapMultimap.this.get((K) key);
+ return collection.isEmpty() ? null : collection;
+ }
+
+ @Override public Collection<V> remove(Object key) {
+ Collection<V> collection = removeAll(key);
+ return collection.isEmpty() ? null : collection;
+ }
+ }
+ private static final long serialVersionUID = 7845222491160860175L;
+ }
+
+ /**
+ * Creates an index {@code ImmutableMultimap} that contains the results of
+ * applying a specified function to each item in an {@code Iterable} of
+ * values. Each value will be stored as a value in the resulting multimap,
+ * yielding a multimap with the same size as the input iterable. The key used
+ * to store that value in the multimap will be the result of calling the
+ * function on that value. The resulting multimap is created as an immutable
+ * snapshot, it does <em>not</em> reflect subsequent changes on the input
+ * iterable.
+ *
+ * <p>For example, <pre class="code"> {@code
+ *
+ * List<String> badGuys
+ * = Arrays.asList("Inky", "Blinky", "Pinky", "Pinky", "Clyde");
+ * Function<String, Integer> stringLengthFunction = ...;
+ * Multimap<Integer, String> index
+ * = Multimaps.index(badGuys, stringLengthFunction);
+ * System.out.println(index);}</pre>
+ *
+ * prints <pre class="code"> {@code
+ *
+ * {4=[Inky], 5=[Pinky, Pinky, Clyde], 6=[Blinky]}}</pre>
+ *
+ * <p>The returned multimap is serializable if its keys and values are all
+ * serializable.
+ *
+ * @param values the values to use when constructing the {@code
+ * ImmutableMultimap}
+ * @param keyFunction the function used to produce the key for each value
+ * @return {@code ImmutableMultimap} mapping the result of evaluating the
+ * function {@code keyFunction} on each value in the input collection to
+ * that value
+ * @throws NullPointerException if any of the following cases is true: <ul>
+ * <li> {@code values} is null
+ * <li> {@code keyFunction} is null
+ * <li> An element in {@code values} is null
+ * <li> {@code keyFunction} returns null for any element of {@code values}
+ * </ul>
+ */
+ public static <K, V> ImmutableListMultimap<K, V> index(
+ Iterable<V> values, Function<? super V, K> keyFunction) {
+ checkNotNull(keyFunction);
+ ImmutableListMultimap.Builder<K, V> builder
+ = ImmutableListMultimap.builder();
+ for (V value : values) {
+ Preconditions.checkNotNull(value, values);
+ builder.put(keyFunction.apply(value), value);
+ }
+ return builder.build();
+ }
+}
diff --git a/src/com/google/common/collect/Multiset.java b/src/com/google/common/collect/Multiset.java
new file mode 100644
index 0000000..21ada98
--- /dev/null
+++ b/src/com/google/common/collect/Multiset.java
@@ -0,0 +1,405 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * A collection that supports order-independent equality, like {@link Set}, but
+ * may have duplicate elements. A multiset is also sometimes called a
+ * <i>bag</i>.
+ *
+ * <p>Elements of a multiset that are equal to one another (see "Note on
+ * element equivalence", below) are referred to as <i>occurrences</i> of the
+ * same single element. The total number of occurrences of an element in a
+ * multiset is called the <i>count</i> of that element (the terms "frequency"
+ * and "multiplicity" are equivalent, but not used in this API). Since the count
+ * of an element is represented as an {@code int}, a multiset may never contain
+ * more than {@link Integer#MAX_VALUE} occurrences of any one element.
+ *
+ * <p>{@code Multiset} refines the specifications of several methods from
+ * {@code Collection}. It also defines an additional query operation, {@link
+ * #count}, which returns the count of an element. There are five new
+ * bulk-modification operations, for example {@link #add(Object, int)}, to add
+ * or remove multiple occurrences of an element at once, or to set the count of
+ * an element to a specific value. These modification operations are optional,
+ * but implementations which support the standard collection operations {@link
+ * #add(Object)} or {@link #remove(Object)} are encouraged to implement the
+ * related methods as well. Finally, two collection views are provided: {@link
+ * #elementSet} contains the distinct elements of the multiset "with duplicates
+ * collapsed", and {@link #entrySet} is similar but contains {@link Entry
+ * Multiset.Entry} instances, each providing both a distinct element and the
+ * count of that element.
+ *
+ * <p>In addition to these required methods, implementations of {@code
+ * Multiset} are expected to provide two {@code static} creation methods:
+ * {@code create()}, returning an empty multiset, and {@code
+ * create(Iterable<? extends E>)}, returning a multiset containing the
+ * given initial elements. This is simply a refinement of {@code Collection}'s
+ * constructor recommendations, reflecting the new developments of Java 5.
+ *
+ * <p>As with other collection types, the modification operations are optional,
+ * and should throw {@link UnsupportedOperationException} when they are not
+ * implemented. Most implementations should support either all add operations
+ * or none of them, all removal operations or none of them, and if and only if
+ * all of these are supported, the {@code setCount} methods as well.
+ *
+ * <p>A multiset uses {@link Object#equals} to determine whether two instances
+ * should be considered "the same," <i>unless specified otherwise</i> by the
+ * implementation.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+public interface Multiset<E> extends Collection<E> {
+ // Query Operations
+
+ /**
+ * Returns the number of occurrences of an element in this multiset (the
+ * <i>count</i> of the element). Note that for an {@link Object#equals}-based
+ * multiset, this gives the same result as {@link Collections#frequency}
+ * (which would presumably perform more poorly).
+ *
+ * <p><b>Note:</b> the utility method {@link Iterables#frequency} generalizes
+ * this operation; it correctly delegates to this method when dealing with a
+ * multiset, but it can also accept any other iterable type.
+ *
+ * @param element the element to count occurrences of
+ * @return the number of occurrences of the element in this multiset; possibly
+ * zero but never negative
+ */
+ int count(@Nullable Object element);
+
+ // Bulk Operations
+
+ /**
+ * Adds a number of occurrences of an element to this multiset. Note that if
+ * {@code occurrences == 1}, this method has the identical effect to {@link
+ * #add(Object)}. This method is functionally equivalent (except in the case
+ * of overflow) to the call {@code addAll(Collections.nCopies(element,
+ * occurrences))}, which would presumably perform much more poorly.
+ *
+ * @param element the element to add occurrences of; may be {@code null} only
+ * if explicitly allowed by the implementation
+ * @param occurrences the number of occurrences of the element to add. May be
+ * zero, in which case no change will be made.
+ * @return the count of the element before the operation; possibly zero
+ * @throws IllegalArgumentException if {@code occurrences} is negative, or if
+ * this operation would result in more than {@link Integer#MAX_VALUE}
+ * occurrences of the element
+ * @throws NullPointerException if {@code element} is null and this
+ * implementation does not permit null elements. Note that if {@code
+ * occurrences} is zero, the implementation may opt to return normally.
+ */
+ int add(@Nullable E element, int occurrences);
+
+ /**
+ * Removes a number of occurrences of the specified element from this
+ * multiset. If the multiset contains fewer than this number of occurrences to
+ * begin with, all occurrences will be removed. Note that if
+ * {@code occurrences == 1}, this is functionally equivalent to the call
+ * {@code remove(element)}.
+ *
+ * @param element the element to conditionally remove occurrences of
+ * @param occurrences the number of occurrences of the element to remove. May
+ * be zero, in which case no change will be made.
+ * @return the count of the element before the operation; possibly zero
+ * @throws IllegalArgumentException if {@code occurrences} is negative
+ */
+ int remove(@Nullable Object element, int occurrences);
+
+ /**
+ * Adds or removes the necessary occurrences of an element such that the
+ * element attains the desired count.
+ *
+ * @param element the element to add or remove occurrences of; may be null
+ * only if explicitly allowed by the implementation
+ * @param count the desired count of the element in this multiset
+ * @return the count of the element before the operation; possibly zero
+ * @throws IllegalArgumentException if {@code count} is negative
+ * @throws NullPointerException if {@code element} is null and this
+ * implementation does not permit null elements. Note that if {@code
+ * count} is zero, the implementor may optionally return zero instead.
+ */
+ int setCount(E element, int count);
+
+ /**
+ * Conditionally sets the count of an element to a new value, as described in
+ * {@link #setCount(Object, int)}, provided that the element has the expected
+ * current count. If the current count is not {@code oldCount}, no change is
+ * made.
+ *
+ * @param element the element to conditionally set the count of; may be null
+ * only if explicitly allowed by the implementation
+ * @param oldCount the expected present count of the element in this multiset
+ * @param newCount the desired count of the element in this multiset
+ * @return {@code true} if the condition for modification was met. This
+ * implies that the multiset was indeed modified, unless
+ * {@code oldCount == newCount}.
+ * @throws IllegalArgumentException if {@code oldCount} or {@code newCount} is
+ * negative
+ * @throws NullPointerException if {@code element} is null and the
+ * implementation does not permit null elements. Note that if {@code
+ * oldCount} and {@code newCount} are both zero, the implementor may
+ * optionally return {@code true} instead.
+ */
+ boolean setCount(E element, int oldCount, int newCount);
+
+ // Views
+
+ /**
+ * Returns the set of distinct elements contained in this multiset. The
+ * element set is backed by the same data as the multiset, so any change to
+ * either is immediately reflected in the other. The order of the elements in
+ * the element set is unspecified.
+ *
+ * <p>If the element set supports any removal operations, these necessarily
+ * cause <b>all</b> occurrences of the removed element(s) to be removed from
+ * the multiset. Implementations are not expected to support the add
+ * operations, although this is possible.
+ *
+ * <p>A common use for the element set is to find the number of distinct
+ * elements in the multiset: {@code elementSet().size()}.
+ *
+ * @return a view of the set of distinct elements in this multiset
+ */
+ Set<E> elementSet();
+
+ /**
+ * Returns a view of the contents of this multiset, grouped into {@code
+ * Multiset.Entry} instances, each providing an element of the multiset and
+ * the count of that element. This set contains exactly one entry for each
+ * distinct element in the multiset (thus it always has the same size as the
+ * {@link #elementSet}). The order of the elements in the element set is
+ * unspecified.
+ *
+ * <p>The entry set is backed by the same data as the multiset, so any change
+ * to either is immediately reflected in the other. However, multiset changes
+ * may or may not be reflected in any {@code Entry} instances already
+ * retrieved from the entry set (this is implementation-dependent).
+ * Furthermore, implementations are not required to support modifications to
+ * the entry set at all, and the {@code Entry} instances themselves don't
+ * even have methods for modification. See the specific implementation class
+ * for more details on how its entry set handles modifications.
+ *
+ * @return a set of entries representing the data of this multiset
+ */
+ Set<Entry<E>> entrySet();
+
+ /**
+ * An unmodifiable element-count pair for a multiset. The {@link
+ * Multiset#entrySet} method returns a view of the multiset whose elements
+ * are of this class. A multiset implementation may return Entry instances
+ * that are either live "read-through" views to the Multiset, or immutable
+ * snapshots. Note that this type is unrelated to the similarly-named type
+ * {@code Map.Entry}.
+ */
+ interface Entry<E> {
+
+ /**
+ * Returns the multiset element corresponding to this entry. Multiple calls
+ * to this method always return the same instance.
+ *
+ * @return the element corresponding to this entry
+ */
+ E getElement();
+
+ /**
+ * Returns the count of the associated element in the underlying multiset.
+ * This count may either be an unchanging snapshot of the count at the time
+ * the entry was retrieved, or a live view of the current count of the
+ * element in the multiset, depending on the implementation. Note that in
+ * the former case, this method can never return zero, while in the latter,
+ * it will return zero if all occurrences of the element were since removed
+ * from the multiset.
+ *
+ * @return the count of the element; never negative
+ */
+ int getCount();
+
+ /**
+ * {@inheritDoc}
+ *
+ * TODO: check this wrt TreeMultiset
+ *
+ * <p>Returns {@code true} if the given object is also a multiset entry and
+ * the two entries represent the same element and count. More formally, two
+ * entries {@code a} and {@code b} are equal if:
+ *
+ * <pre> ((a.getElement() == null)
+ * ? (b.getElement() == null) : a.getElement().equals(b.getElement()))
+ * && (a.getCount() == b.getCount())</pre>
+ */
+ boolean equals(Object o);
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The hash code of a multiset entry for element {@code element} and
+ * count {@code count} is defined as:
+ *
+ * <pre> (element == null ? 0 : element.hashCode()) ^ count</pre>
+ */
+ int hashCode();
+
+ /**
+ * Returns the canonical string representation of this entry, defined as
+ * follows. If the count for this entry is one, this is simply the string
+ * representation of the corresponding element. Otherwise, it is the string
+ * representation of the element, followed by the three characters {@code
+ * " x "} (space, letter x, space), followed by the count.
+ */
+ String toString();
+ }
+
+ // Comparison and hashing
+
+ /**
+ * Compares the specified object with this multiset for equality. Returns
+ * {@code true} if the given object is also a multiset and contains equal
+ * elements with equal counts, regardless of order.
+ *
+ * TODO: caveats about equivalence-relation.
+ */
+ boolean equals(@Nullable Object object);
+
+ /**
+ * Returns the hash code for this multiset. This is defined as the sum of
+ *
+ * <pre> (element == null ? 0 : element.hashCode()) ^ count(element)</pre>
+ *
+ * over all distinct elements in the multiset. It follows that a multiset and
+ * its entry set always have the same hash code.
+ */
+ int hashCode();
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>It is recommended, though not mandatory, that this method return the
+ * result of invoking {@link #toString} on the {@link #entrySet}, yielding a
+ * result such as
+ * <pre>
+ * [a x 3, c, d x 2, e]
+ * </pre>
+ */
+ String toString();
+
+ // Refined Collection Methods
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>Elements that occur multiple times in the multiset will appear
+ * multiple times in this iterator, though not necessarily sequentially.
+ */
+ Iterator<E> iterator();
+
+ /**
+ * Determines whether this multiset contains the specified element.
+ *
+ * <p>This method refines {@link Collection#contains} to further specify that
+ * it <b>may not</b> throw an exception in response to {@code element} being
+ * null or of the wrong type.
+ *
+ * @param element the element to check for
+ * @return {@code true} if this multiset contains at least one occurrence of
+ * the element
+ */
+ boolean contains(@Nullable Object element);
+
+ /**
+ * Returns {@code true} if this multiset contains at least one occurrence of
+ * each element in the specified collection.
+ *
+ * <p>This method refines {@link Collection#containsAll} to further specify
+ * that it <b>may not</b> throw an exception in response to any of {@code
+ * elements} being null or of the wrong type.
+ *
+ * <p><b>Note:</b> this method does not take into account the occurrence
+ * count of an element in the two collections; it may still return {@code
+ * true} even if {@code elements} contains several occurrences of an element
+ * and this multiset contains only one. This is no different than any other
+ * collection type like {@link List}, but it may be unexpected to the user of
+ * a multiset.
+ *
+ * @param elements the collection of elements to be checked for containment in
+ * this multiset
+ * @return {@code true} if this multiset contains at least one occurrence of
+ * each element contained in {@code elements}
+ * @throws NullPointerException if {@code elements} is null
+ */
+ boolean containsAll(Collection<?> elements);
+
+ /**
+ * Adds a single occurrence of the specified element to this multiset.
+ *
+ * <p>This method refines {@link Collection#add}, which only <i>ensures</i>
+ * the presence of the element, to further specify that a successful call must
+ * always increment the count of the element, and the overall size of the
+ * collection, by one.
+ *
+ * @param element the element to add one occurrence of; may be null only if
+ * explicitly allowed by the implementation
+ * @return {@code true} always, since this call is required to modify the
+ * multiset, unlike other {@link Collection} types
+ * @throws NullPointerException if {@code element} is null and this
+ * implementation does not permit null elements
+ * @throws IllegalArgumentException if {@link Integer#MAX_VALUE} occurrences
+ * of {@code element} are already contained in this multiset
+ */
+ boolean add(E element);
+
+ /**
+ * Removes a <i>single</i> occurrence of the specified element from this
+ * multiset, if present.
+ *
+ * <p>This method refines {@link Collection#remove} to further specify that it
+ * <b>may not</b> throw an exception in response to {@code element} being null
+ * or of the wrong type.
+ *
+ * @param element the element to remove one occurrence of
+ * @return {@code true} if an occurrence was found and removed
+ */
+ boolean remove(@Nullable Object element);
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>This method refines {@link Collection#removeAll} to further specify that
+ * it <b>may not</b> throw an exception in response to any of {@code elements}
+ * being null or of the wrong type.
+ */
+ boolean removeAll(Collection<?> c);
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>This method refines {@link Collection#retainAll} to further specify that
+ * it <b>may not</b> throw an exception in response to any of {@code elements}
+ * being null or of the wrong type.
+ */
+ boolean retainAll(Collection<?> c);
+}
diff --git a/src/com/google/common/collect/Multisets.java b/src/com/google/common/collect/Multisets.java
new file mode 100644
index 0000000..55e5c3c
--- /dev/null
+++ b/src/com/google/common/collect/Multisets.java
@@ -0,0 +1,397 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Objects;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.io.Serializable;
+import java.util.AbstractSet;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * Provides static utility methods for creating and working with {@link
+ * Multiset} instances.
+ *
+ * @author Kevin Bourrillion
+ * @author Mike Bostock
+ */
+@GwtCompatible
+public final class Multisets {
+ private Multisets() {}
+
+ /**
+ * Returns an unmodifiable view of the specified multiset. Query operations on
+ * the returned multiset "read through" to the specified multiset, and
+ * attempts to modify the returned multiset result in an
+ * {@link UnsupportedOperationException}.
+ *
+ * <p>The returned multiset will be serializable if the specified multiset is
+ * serializable.
+ *
+ * @param multiset the multiset for which an unmodifiable view is to be
+ * generated
+ * @return an unmodifiable view of the multiset
+ */
+ public static <E> Multiset<E> unmodifiableMultiset(
+ Multiset<? extends E> multiset) {
+ return new UnmodifiableMultiset<E>(multiset);
+ }
+
+ private static class UnmodifiableMultiset<E>
+ extends ForwardingMultiset<E> implements Serializable {
+ final Multiset<? extends E> delegate;
+
+ UnmodifiableMultiset(Multiset<? extends E> delegate) {
+ this.delegate = delegate;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override protected Multiset<E> delegate() {
+ // This is safe because all non-covariant methods are overriden
+ return (Multiset) delegate;
+ }
+
+ transient Set<E> elementSet;
+
+ @Override public Set<E> elementSet() {
+ Set<E> es = elementSet;
+ return (es == null)
+ ? elementSet = Collections.<E>unmodifiableSet(delegate.elementSet())
+ : es;
+ }
+
+ transient Set<Multiset.Entry<E>> entrySet;
+
+ @SuppressWarnings("unchecked")
+ @Override public Set<Multiset.Entry<E>> entrySet() {
+ Set<Multiset.Entry<E>> es = entrySet;
+ return (es == null)
+ // Safe because the returned set is made unmodifiable and Entry
+ // itself is readonly
+ ? entrySet = (Set) Collections.unmodifiableSet(delegate.entrySet())
+ : es;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override public Iterator<E> iterator() {
+ // Safe because the returned Iterator is made unmodifiable
+ return (Iterator) Iterators.unmodifiableIterator(delegate.iterator());
+ }
+
+ @Override public boolean add(E element) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override public int add(E element, int occurences) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override public boolean addAll(Collection<? extends E> elementsToAdd) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override public boolean remove(Object element) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override public int remove(Object element, int occurrences) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override public boolean removeAll(Collection<?> elementsToRemove) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override public boolean retainAll(Collection<?> elementsToRetain) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override public void clear() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override public int setCount(E element, int count) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override public boolean setCount(E element, int oldCount, int newCount) {
+ throw new UnsupportedOperationException();
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Returns an immutable multiset entry with the specified element and count.
+ *
+ * @param e the element to be associated with the returned entry
+ * @param n the count to be associated with the returned entry
+ * @throws IllegalArgumentException if {@code n} is negative
+ */
+ public static <E> Multiset.Entry<E> immutableEntry(
+ @Nullable final E e, final int n) {
+ checkArgument(n >= 0);
+ return new AbstractEntry<E>() {
+ public E getElement() {
+ return e;
+ }
+ public int getCount() {
+ return n;
+ }
+ };
+ }
+
+ /**
+ * Returns a multiset view of the specified set. The multiset is backed by the
+ * set, so changes to the set are reflected in the multiset, and vice versa.
+ * If the set is modified while an iteration over the multiset is in progress
+ * (except through the iterator's own {@code remove} operation) the results of
+ * the iteration are undefined.
+ *
+ * <p>The multiset supports element removal, which removes the corresponding
+ * element from the set. It does not support the {@code add} or {@code addAll}
+ * operations, nor does it support the use of {@code setCount} to add
+ * elements.
+ *
+ * <p>The returned multiset will be serializable if the specified set is
+ * serializable. The multiset is threadsafe if the set is threadsafe.
+ *
+ * @param set the backing set for the returned multiset view
+ */
+ static <E> Multiset<E> forSet(Set<E> set) {
+ return new SetMultiset<E>(set);
+ }
+
+ /** @see Multisets#forSet */
+ private static class SetMultiset<E> extends ForwardingCollection<E>
+ implements Multiset<E>, Serializable {
+ final Set<E> delegate;
+
+ SetMultiset(Set<E> set) {
+ delegate = checkNotNull(set);
+ }
+
+ @Override protected Set<E> delegate() {
+ return delegate;
+ }
+
+ public int count(Object element) {
+ return delegate.contains(element) ? 1 : 0;
+ }
+
+ public int add(E element, int occurrences) {
+ throw new UnsupportedOperationException();
+ }
+
+ public int remove(Object element, int occurrences) {
+ if (occurrences == 0) {
+ return count(element);
+ }
+ checkArgument(occurrences > 0);
+ return delegate.remove(element) ? 1 : 0;
+ }
+
+ transient Set<E> elementSet;
+
+ public Set<E> elementSet() {
+ Set<E> es = elementSet;
+ return (es == null) ? elementSet = new ElementSet() : es;
+ }
+
+ transient Set<Entry<E>> entrySet;
+
+ public Set<Entry<E>> entrySet() {
+ Set<Entry<E>> es = entrySet;
+ return (es == null) ? entrySet = new EntrySet() : es;
+ }
+
+ @Override public boolean add(E o) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override public boolean addAll(Collection<? extends E> c) {
+ throw new UnsupportedOperationException();
+ }
+
+ public int setCount(E element, int count) {
+ checkNonnegative(count, "count");
+
+ if (count == count(element)) {
+ return count;
+ } else if (count == 0) {
+ remove(element);
+ return 1;
+ } else {
+ throw new UnsupportedOperationException();
+ }
+ }
+
+ public boolean setCount(E element, int oldCount, int newCount) {
+ return setCountImpl(this, element, oldCount, newCount);
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ if (object instanceof Multiset) {
+ Multiset<?> that = (Multiset<?>) object;
+ return this.size() == that.size() && delegate.equals(that.elementSet());
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ int sum = 0;
+ for (E e : this) {
+ sum += ((e == null) ? 0 : e.hashCode()) ^ 1;
+ }
+ return sum;
+ }
+
+ /** @see SetMultiset#elementSet */
+ class ElementSet extends ForwardingSet<E> {
+ @Override protected Set<E> delegate() {
+ return delegate;
+ }
+
+ @Override public boolean add(E o) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override public boolean addAll(Collection<? extends E> c) {
+ throw new UnsupportedOperationException();
+ }
+ }
+
+ /** @see SetMultiset#entrySet */
+ class EntrySet extends AbstractSet<Entry<E>> {
+ @Override public int size() {
+ return delegate.size();
+ }
+ @Override public Iterator<Entry<E>> iterator() {
+ return new Iterator<Entry<E>>() {
+ final Iterator<E> elements = delegate.iterator();
+
+ public boolean hasNext() {
+ return elements.hasNext();
+ }
+ public Entry<E> next() {
+ return immutableEntry(elements.next(), 1);
+ }
+ public void remove() {
+ elements.remove();
+ }
+ };
+ }
+ // TODO: faster contains, remove
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Returns the expected number of distinct elements given the specified
+ * elements. The number of distinct elements is only computed if {@code
+ * elements} is an instance of {@code Multiset}; otherwise the default value
+ * of 11 is returned.
+ */
+ static int inferDistinctElements(Iterable<?> elements) {
+ if (elements instanceof Multiset) {
+ return ((Multiset<?>) elements).elementSet().size();
+ }
+ return 11; // initial capacity will be rounded up to 16
+ }
+
+ /**
+ * Implementation of the {@code equals}, {@code hashCode}, and
+ * {@code toString} methods of {@link Multiset.Entry}.
+ */
+ abstract static class AbstractEntry<E> implements Multiset.Entry<E> {
+ /**
+ * Indicates whether an object equals this entry, following the behavior
+ * specified in {@link Multiset.Entry#equals}.
+ */
+ @Override public boolean equals(@Nullable Object object) {
+ if (object instanceof Multiset.Entry) {
+ Multiset.Entry<?> that = (Multiset.Entry<?>) object;
+ return this.getCount() == that.getCount()
+ && Objects.equal(this.getElement(), that.getElement());
+ }
+ return false;
+ }
+
+ /**
+ * Return this entry's hash code, following the behavior specified in
+ * {@link Multiset.Entry#hashCode}.
+ */
+ @Override public int hashCode() {
+ E e = getElement();
+ return ((e == null) ? 0 : e.hashCode()) ^ getCount();
+ }
+
+ /**
+ * Returns a string representation of this multiset entry. The string
+ * representation consists of the associated element if the associated count
+ * is one, and otherwise the associated element followed by the characters
+ * " x " (space, x and space) followed by the count. Elements and counts are
+ * converted to strings as by {@code String.valueOf}.
+ */
+ @Override public String toString() {
+ String text = String.valueOf(getElement());
+ int n = getCount();
+ return (n == 1) ? text : (text + " x " + n);
+ }
+ }
+
+ static <E> int setCountImpl(Multiset<E> self, E element, int count) {
+ checkNonnegative(count, "count");
+
+ int oldCount = self.count(element);
+
+ int delta = count - oldCount;
+ if (delta > 0) {
+ self.add(element, delta);
+ } else if (delta < 0) {
+ self.remove(element, -delta);
+ }
+
+ return oldCount;
+ }
+
+ static <E> boolean setCountImpl(
+ Multiset<E> self, E element, int oldCount, int newCount) {
+ checkNonnegative(oldCount, "oldCount");
+ checkNonnegative(newCount, "newCount");
+
+ if (self.count(element) == oldCount) {
+ self.setCount(element, newCount);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ static void checkNonnegative(int count, String name) {
+ checkArgument(count >= 0, "%s cannot be negative: %s", name, count);
+ }
+}
diff --git a/src/com/google/common/collect/MutableClassToInstanceMap.java b/src/com/google/common/collect/MutableClassToInstanceMap.java
new file mode 100644
index 0000000..12e7e59
--- /dev/null
+++ b/src/com/google/common/collect/MutableClassToInstanceMap.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * A mutable class-to-instance map backed by an arbitrary user-provided map.
+ * See also {@link ImmutableClassToInstanceMap}.
+ *
+ * @author Kevin Bourrillion
+ */
+public final class MutableClassToInstanceMap<B>
+ extends ConstrainedMap<Class<? extends B>, B>
+ implements ClassToInstanceMap<B> {
+
+ /**
+ * Returns a new {@code MutableClassToInstanceMap} instance backed by a {@link
+ * HashMap} using the default initial capacity and load factor.
+ */
+ public static <B> MutableClassToInstanceMap<B> create() {
+ return new MutableClassToInstanceMap<B>(
+ new HashMap<Class<? extends B>, B>());
+ }
+
+ /**
+ * Returns a new {@code MutableClassToInstanceMap} instance backed by a given
+ * empty {@code backingMap}. The caller surrenders control of the backing map,
+ * and thus should not allow any direct references to it to remain accessible.
+ */
+ public static <B> MutableClassToInstanceMap<B> create(
+ Map<Class<? extends B>, B> backingMap) {
+ return new MutableClassToInstanceMap<B>(backingMap);
+ }
+
+ private MutableClassToInstanceMap(Map<Class<? extends B>, B> delegate) {
+ super(delegate, VALUE_CAN_BE_CAST_TO_KEY);
+ }
+
+ private static final MapConstraint<Class<?>, Object> VALUE_CAN_BE_CAST_TO_KEY
+ = new MapConstraint<Class<?>, Object>() {
+ public void checkKeyValue(Class<?> key, Object value) {
+ cast(key, value);
+ }
+ };
+
+ public <T extends B> T putInstance(Class<T> type, T value) {
+ return cast(type, put(type, value));
+ }
+
+ public <T extends B> T getInstance(Class<T> type) {
+ return cast(type, get(type));
+ }
+
+ // Default access so that ImmutableClassToInstanceMap can share it
+ static <B, T extends B> T cast(Class<T> type, B value) {
+ // TODO: this should eventually use common.primitives.Primitives.wrap()
+ return wrap(type).cast(value);
+ }
+
+ // safe because both Long.class and long.class are of type Class<Long>
+ @SuppressWarnings("unchecked")
+ private static <T> Class<T> wrap(Class<T> c) {
+ return c.isPrimitive() ? (Class<T>) PRIMITIVES_TO_WRAPPERS.get(c) : c;
+ }
+
+ private static final Map<Class<?>, Class<?>> PRIMITIVES_TO_WRAPPERS
+ = new ImmutableMap.Builder<Class<?>, Class<?>>()
+ .put(boolean.class, Boolean.class)
+ .put(byte.class, Byte.class)
+ .put(char.class, Character.class)
+ .put(double.class, Double.class)
+ .put(float.class, Float.class)
+ .put(int.class, Integer.class)
+ .put(long.class, Long.class)
+ .put(short.class, Short.class)
+ .put(void.class, Void.class)
+ .build();
+}
diff --git a/src/com/google/common/collect/NaturalOrdering.java b/src/com/google/common/collect/NaturalOrdering.java
new file mode 100644
index 0000000..6d14ce4
--- /dev/null
+++ b/src/com/google/common/collect/NaturalOrdering.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.List;
+
+/** An ordering that uses the natural order of the values. */
+@GwtCompatible(serializable = true)
+@SuppressWarnings("unchecked") // TODO: the right way to explain this??
+final class NaturalOrdering
+ extends Ordering<Comparable> implements Serializable {
+ static final NaturalOrdering INSTANCE = new NaturalOrdering();
+
+ public int compare(Comparable left, Comparable right) {
+ checkNotNull(right); // left null is caught later
+ if (left == right) {
+ return 0;
+ }
+
+ @SuppressWarnings("unchecked") // we're permitted to throw CCE
+ int result = left.compareTo(right);
+ return result;
+ }
+
+ @SuppressWarnings("unchecked") // TODO: the right way to explain this??
+ @Override public <S extends Comparable> Ordering<S> reverse() {
+ return (Ordering) ReverseNaturalOrdering.INSTANCE;
+ }
+
+ // Override to remove a level of indirection from inner loop
+ @SuppressWarnings("unchecked") // TODO: the right way to explain this??
+ @Override public int binarySearch(
+ List<? extends Comparable> sortedList, Comparable key) {
+ return Collections.binarySearch((List) sortedList, key);
+ }
+
+ // Override to remove a level of indirection from inner loop
+ @Override public <E extends Comparable> List<E> sortedCopy(
+ Iterable<E> iterable) {
+ List<E> list = Lists.newArrayList(iterable);
+ Collections.sort(list);
+ return list;
+ }
+
+ // preserving singleton-ness gives equals()/hashCode() for free
+ private Object readResolve() {
+ return INSTANCE;
+ }
+
+ @Override public String toString() {
+ return "Ordering.natural()";
+ }
+
+ private NaturalOrdering() {}
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/NullOutputException.java b/src/com/google/common/collect/NullOutputException.java
new file mode 100644
index 0000000..18e06ff
--- /dev/null
+++ b/src/com/google/common/collect/NullOutputException.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+/**
+ * Thrown when a computer function returns null. This subclass exists so
+ * that our ReferenceCache adapter can differentiate null output from null
+ * keys, but we don't want to make this public otherwise.
+ *
+ * @author Bob Lee
+ */
+class NullOutputException extends NullPointerException {
+ public NullOutputException(String s) {
+ super(s);
+ }
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/NullsFirstOrdering.java b/src/com/google/common/collect/NullsFirstOrdering.java
new file mode 100644
index 0000000..09d64e8
--- /dev/null
+++ b/src/com/google/common/collect/NullsFirstOrdering.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+
+import javax.annotation.Nullable;
+
+/** An ordering that treats {@code null} as less than all other values. */
+@GwtCompatible(serializable = true)
+final class NullsFirstOrdering<T> extends Ordering<T> implements Serializable {
+ final Ordering<? super T> ordering;
+
+ NullsFirstOrdering(Ordering<? super T> ordering) {
+ this.ordering = ordering;
+ }
+
+ public int compare(T left, T right) {
+ if (left == right) {
+ return 0;
+ }
+ if (left == null) {
+ return RIGHT_IS_GREATER;
+ }
+ if (right == null) {
+ return LEFT_IS_GREATER;
+ }
+ return ordering.compare(left, right);
+ }
+
+ @Override public <S extends T> Ordering<S> reverse() {
+ // ordering.reverse() might be optimized, so let it do its thing
+ return ordering.reverse().nullsLast();
+ }
+
+ @SuppressWarnings("unchecked") // still need the right way to explain this
+ @Override public <S extends T> Ordering<S> nullsFirst() {
+ return (Ordering) this;
+ }
+
+ @Override public <S extends T> Ordering<S> nullsLast() {
+ return ordering.nullsLast();
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ if (object == this) {
+ return true;
+ }
+ if (object instanceof NullsFirstOrdering) {
+ NullsFirstOrdering<?> that = (NullsFirstOrdering<?>) object;
+ return this.ordering.equals(that.ordering);
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ return ordering.hashCode() ^ 957692532; // meaningless
+ }
+
+ @Override public String toString() {
+ return ordering + ".nullsFirst()";
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/NullsLastOrdering.java b/src/com/google/common/collect/NullsLastOrdering.java
new file mode 100644
index 0000000..22113ab
--- /dev/null
+++ b/src/com/google/common/collect/NullsLastOrdering.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+
+import javax.annotation.Nullable;
+
+/** An ordering that treats {@code null} as greater than all other values. */
+@GwtCompatible(serializable = true)
+final class NullsLastOrdering<T> extends Ordering<T> implements Serializable {
+ final Ordering<? super T> ordering;
+
+ NullsLastOrdering(Ordering<? super T> ordering) {
+ this.ordering = ordering;
+ }
+
+ public int compare(T left, T right) {
+ if (left == right) {
+ return 0;
+ }
+ if (left == null) {
+ return LEFT_IS_GREATER;
+ }
+ if (right == null) {
+ return RIGHT_IS_GREATER;
+ }
+ return ordering.compare(left, right);
+ }
+
+ @Override public <S extends T> Ordering<S> reverse() {
+ // ordering.reverse() might be optimized, so let it do its thing
+ return ordering.reverse().nullsFirst();
+ }
+
+ @Override public <S extends T> Ordering<S> nullsFirst() {
+ return ordering.nullsFirst();
+ }
+
+ @SuppressWarnings("unchecked") // still need the right way to explain this
+ @Override public <S extends T> Ordering<S> nullsLast() {
+ return (Ordering) this;
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ if (object == this) {
+ return true;
+ }
+ if (object instanceof NullsLastOrdering) {
+ NullsLastOrdering<?> that = (NullsLastOrdering<?>) object;
+ return this.ordering.equals(that.ordering);
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ return ordering.hashCode() ^ -921210296; // meaningless
+ }
+
+ @Override public String toString() {
+ return ordering + ".nullsLast()";
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/ObjectArrays.java b/src/com/google/common/collect/ObjectArrays.java
new file mode 100644
index 0000000..1c21c2b
--- /dev/null
+++ b/src/com/google/common/collect/ObjectArrays.java
@@ -0,0 +1,175 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.util.Collection;
+
+import javax.annotation.Nullable;
+
+/**
+ * Static utility methods pertaining to object arrays.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+public final class ObjectArrays {
+ private ObjectArrays() {}
+
+ /**
+ * Returns a new array of the given length with the specified component type.
+ *
+ * @param type the component type
+ * @param length the length of the new array
+ */
+ @GwtIncompatible("Array.newInstance(Class, int)")
+ @SuppressWarnings("unchecked")
+ public static <T> T[] newArray(Class<T> type, int length) {
+ return Platform.newArray(type, length);
+ }
+
+ /**
+ * Returns a new array of the given length with the same type as a reference
+ * array.
+ *
+ * @param reference any array of the desired type
+ * @param length the length of the new array
+ */
+ public static <T> T[] newArray(T[] reference, int length) {
+ return Platform.newArray(reference, length);
+ }
+
+ /**
+ * Returns a new array that contains the concatenated contents of two arrays.
+ *
+ * @param first the first array of elements to concatenate
+ * @param second the second array of elements to concatenate
+ * @param type the component type of the returned array
+ */
+ @GwtIncompatible("Array.newInstance(Class, int)")
+ public static <T> T[] concat(T[] first, T[] second, Class<T> type) {
+ T[] result = newArray(type, first.length + second.length);
+ System.arraycopy(first, 0, result, 0, first.length);
+ System.arraycopy(second, 0, result, first.length, second.length);
+ return result;
+ }
+
+ /**
+ * Returns a new array that prepends {@code element} to {@code array}.
+ *
+ * @param element the element to prepend to the front of {@code array}
+ * @param array the array of elements to append
+ * @return an array whose size is one larger than {@code array}, with
+ * {@code element} occupying the first position, and the
+ * elements of {@code array} occupying the remaining elements.
+ */
+ public static <T> T[] concat(@Nullable T element, T[] array) {
+ T[] result = newArray(array, array.length + 1);
+ result[0] = element;
+ System.arraycopy(array, 0, result, 1, array.length);
+ return result;
+ }
+
+ /**
+ * Returns a new array that appends {@code element} to {@code array}.
+ *
+ * @param array the array of elements to prepend
+ * @param element the element to append to the end
+ * @return an array whose size is one larger than {@code array}, with
+ * the same contents as {@code array}, plus {@code element} occupying the
+ * last position.
+ */
+ public static <T> T[] concat(T[] array, @Nullable T element) {
+ T[] result = arraysCopyOf(array, array.length + 1);
+ result[array.length] = element;
+ return result;
+ }
+
+ /** GWT safe version of Arrays.copyOf. */
+ private static <T> T[] arraysCopyOf(T[] original, int newLength) {
+ T[] copy = newArray(original, newLength);
+ System.arraycopy(
+ original, 0, copy, 0, Math.min(original.length, newLength));
+ return copy;
+ }
+
+ /**
+ * Returns an array containing all of the elements in the specified
+ * collection; the runtime type of the returned array is that of the specified
+ * array. If the collection fits in the specified array, it is returned
+ * therein. Otherwise, a new array is allocated with the runtime type of the
+ * specified array and the size of the specified collection.
+ *
+ * <p>If the collection fits in the specified array with room to spare (i.e.,
+ * the array has more elements than the collection), the element in the array
+ * immediately following the end of the collection is set to null. This is
+ * useful in determining the length of the collection <i>only</i> if the
+ * caller knows that the collection does not contain any null elements.
+ *
+ * <p>This method returns the elements in the order they are returned by the
+ * collection's iterator.
+ *
+ * <p>TODO: Support concurrent collections whose size can change while the
+ * method is running.
+ *
+ * @param c the collection for which to return an array of elements
+ * @param array the array in which to place the collection elements
+ * @throws ArrayStoreException if the runtime type of the specified array is
+ * not a supertype of the runtime type of every element in the specified
+ * collection
+ */
+ static <T> T[] toArrayImpl(Collection<?> c, T[] array) {
+ int size = c.size();
+ if (array.length < size) {
+ array = newArray(array, size);
+ }
+ fillArray(c, array);
+ if (array.length > size) {
+ array[size] = null;
+ }
+ return array;
+ }
+
+ /**
+ * Returns an array containing all of the elements in the specified
+ * collection. This method returns the elements in the order they are returned
+ * by the collection's iterator. The returned array is "safe" in that no
+ * references to it are maintained by the collection. The caller is thus free
+ * to modify the returned array.
+ *
+ * <p>This method assumes that the collection size doesn't change while the
+ * method is running.
+ *
+ * <p>TODO: Support concurrent collections whose size can change while the
+ * method is running.
+ *
+ * @param c the collection for which to return an array of elements
+ */
+ static Object[] toArrayImpl(Collection<?> c) {
+ return fillArray(c, new Object[c.size()]);
+ }
+
+ private static Object[] fillArray(Iterable<?> elements, Object[] array) {
+ int i = 0;
+ for (Object element : elements) {
+ array[i++] = element;
+ }
+ return array;
+ }
+}
diff --git a/src/com/google/common/collect/Ordering.java b/src/com/google/common/collect/Ordering.java
new file mode 100644
index 0000000..90b764a
--- /dev/null
+++ b/src/com/google/common/collect/Ordering.java
@@ -0,0 +1,474 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Function;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+/**
+ * A comparator with added methods to support common functions. For example:
+ * <pre> {@code
+ *
+ * if (Ordering.from(comparator).reverse().isOrdered(list)) { ... }}</pre>
+ *
+ * <p>The {@link #from(Comparator)} method returns the equivalent {@code
+ * Ordering} instance for a pre-existing comparator. You can also skip the
+ * comparator step and extend {@code Ordering} directly: <pre> {@code
+ *
+ * Ordering<String> byLengthOrdering = new Ordering<String>() {
+ * public int compare(String left, String right) {
+ * return Ints.compare(left.length(), right.length());
+ * }
+ * };}</pre>
+ *
+ * Except as noted, the orderings returned by the factory methods of this
+ * class are serializable if and only if the provided instances that back them
+ * are. For example, if {@code ordering} and {@code function} can themselves be
+ * serialized, then {@code ordering.onResultOf(function)} can as well.
+ *
+ * @author Jesse Wilson
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+public abstract class Ordering<T> implements Comparator<T> {
+ // Static factories
+
+ /**
+ * Returns a serializable ordering that uses the natural order of the values.
+ * The ordering throws a {@link NullPointerException} when passed a null
+ * parameter.
+ *
+ * <p>The type specification is {@code <C extends Comparable>}, instead of
+ * the technically correct {@code <C extends Comparable<? super C>>}, to
+ * support legacy types from before Java 5.
+ */
+ @GwtCompatible(serializable = true)
+ @SuppressWarnings("unchecked") // TODO: the right way to explain this??
+ public static <C extends Comparable> Ordering<C> natural() {
+ return (Ordering) NaturalOrdering.INSTANCE;
+ }
+
+ /**
+ * Returns an ordering for a pre-existing {@code comparator}. Note
+ * that if the comparator is not pre-existing, and you don't require
+ * serialization, you can subclass {@code Ordering} and implement its
+ * {@link #compare(Object, Object) compare} method instead.
+ *
+ * @param comparator the comparator that defines the order
+ */
+ @GwtCompatible(serializable = true)
+ public static <T> Ordering<T> from(Comparator<T> comparator) {
+ return (comparator instanceof Ordering)
+ ? (Ordering<T>) comparator
+ : new ComparatorOrdering<T>(comparator);
+ }
+
+ /**
+ * Simply returns its argument.
+ *
+ * @deprecated no need to use this
+ */
+ @GwtCompatible(serializable = true)
+ @Deprecated public static <T> Ordering<T> from(Ordering<T> ordering) {
+ return checkNotNull(ordering);
+ }
+
+ /**
+ * Returns an ordering that compares objects according to the order in
+ * which they appear in the given list. Only objects present in the list
+ * (according to {@link Object#equals}) may be compared. This comparator
+ * imposes a "partial ordering" over the type {@code T}. Subsequent changes
+ * to the {@code valuesInOrder} list will have no effect on the returned
+ * comparator. Null values in the list are not supported.
+ *
+ * <p>The returned comparator throws an {@link ClassCastException} when it
+ * receives an input parameter that isn't among the provided values.
+ *
+ * <p>The generated comparator is serializable if all the provided values are
+ * serializable.
+ *
+ * @param valuesInOrder the values that the returned comparator will be able
+ * to compare, in the order the comparator should induce
+ * @return the comparator described above
+ * @throws NullPointerException if any of the provided values is null
+ * @throws IllegalArgumentException if {@code valuesInOrder} contains any
+ * duplicate values (according to {@link Object#equals})
+ */
+ @GwtCompatible(serializable = true)
+ public static <T> Ordering<T> explicit(List<T> valuesInOrder) {
+ return new ExplicitOrdering<T>(valuesInOrder);
+ }
+
+ /**
+ * Returns an ordering that compares objects according to the order in
+ * which they are given to this method. Only objects present in the argument
+ * list (according to {@link Object#equals}) may be compared. This comparator
+ * imposes a "partial ordering" over the type {@code T}. Null values in the
+ * argument list are not supported.
+ *
+ * <p>The returned comparator throws a {@link ClassCastException} when it
+ * receives an input parameter that isn't among the provided values.
+ *
+ * <p>The generated comparator is serializable if all the provided values are
+ * serializable.
+ *
+ * @param leastValue the value which the returned comparator should consider
+ * the "least" of all values
+ * @param remainingValuesInOrder the rest of the values that the returned
+ * comparator will be able to compare, in the order the comparator should
+ * follow
+ * @return the comparator described above
+ * @throws NullPointerException if any of the provided values is null
+ * @throws IllegalArgumentException if any duplicate values (according to
+ * {@link Object#equals(Object)}) are present among the method arguments
+ */
+ @GwtCompatible(serializable = true)
+ public static <T> Ordering<T> explicit(
+ T leastValue, T... remainingValuesInOrder) {
+ return explicit(Lists.asList(leastValue, remainingValuesInOrder));
+ }
+
+ /**
+ * Exception thrown by a {@link Ordering#explicit(List)} or {@link
+ * Ordering#explicit(Object, Object[])} comparator when comparing a value
+ * outside the set of values it can compare. Extending {@link
+ * ClassCastException} may seem odd, but it is required.
+ */
+ // TODO: consider making this exception type public. or consider getting rid
+ // of it.
+ @VisibleForTesting
+ static class IncomparableValueException extends ClassCastException {
+ final Object value;
+
+ IncomparableValueException(Object value) {
+ super("Cannot compare value: " + value);
+ this.value = value;
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Returns an ordering that compares objects by the natural ordering of their
+ * string representations as returned by {@code toString()}. It does not
+ * support null values.
+ *
+ * <p>The comparator is serializable.
+ */
+ @GwtCompatible(serializable = true)
+ public static Ordering<Object> usingToString() {
+ return UsingToStringOrdering.INSTANCE;
+ }
+
+ /**
+ * Returns an ordering which tries each given comparator in order until a
+ * non-zero result is found, returning that result, and returning zero only if
+ * all comparators return zero. The returned ordering is based on the state of
+ * the {@code comparators} iterable at the time it was provided to this
+ * method.
+ *
+ * <p>The returned ordering is equivalent to that produced using {@code
+ * Ordering.from(comp1).compound(comp2).compound(comp3) . . .}.
+ *
+ * <p><b>Warning:</b> Supplying an argument with undefined iteration order,
+ * such as a {@link HashSet}, will produce non-deterministic results.
+ *
+ * @param comparators the comparators to try in order
+ */
+ @GwtCompatible(serializable = true)
+ public static <T> Ordering<T> compound(
+ Iterable<? extends Comparator<? super T>> comparators) {
+ return new CompoundOrdering<T>(comparators);
+ }
+
+ /**
+ * Constructs a new instance of this class (only invokable by the subclass
+ * constructor, typically implicit).
+ */
+ protected Ordering() {}
+
+ // Non-static factories
+
+ /**
+ * Returns an ordering which first uses the ordering {@code this}, but which
+ * in the event of a "tie", then delegates to {@code secondaryComparator}.
+ * For example, to sort a bug list first by status and second by priority, you
+ * might use {@code byStatus.compound(byPriority)}. For a compound ordering
+ * with three or more components, simply chain multiple calls to this method.
+ *
+ * <p>An ordering produced by this method, or a chain of calls to this method,
+ * is equivalent to one created using {@link Ordering#compound(Iterable)} on
+ * the same component comparators.
+ */
+ @GwtCompatible(serializable = true)
+ public <U extends T> Ordering<U> compound(
+ Comparator<? super U> secondaryComparator) {
+ return new CompoundOrdering<U>(this, checkNotNull(secondaryComparator));
+ }
+
+ /**
+ * Returns the reverse of this ordering; the {@code Ordering} equivalent to
+ * {@link Collections#reverseOrder(Comparator)}.
+ */
+ // type parameter <S> lets us avoid the extra <String> in statements like:
+ // Ordering<String> o = Ordering.<String>natural().reverse();
+ @GwtCompatible(serializable = true)
+ public <S extends T> Ordering<S> reverse() {
+ return new ReverseOrdering<S>(this);
+ }
+
+ /**
+ * Returns a new ordering on {@code F} which orders elements by first applying
+ * a function to them, then comparing those results using {@code this}. For
+ * example, to compare objects by their string forms, in a case-insensitive
+ * manner, use: <pre> {@code
+ *
+ * Ordering.from(String.CASE_INSENSITIVE_ORDER)
+ * .onResultOf(Functions.toStringFunction())}</pre>
+ */
+ @GwtCompatible(serializable = true)
+ public <F> Ordering<F> onResultOf(Function<F, ? extends T> function) {
+ return new ByFunctionOrdering<F, T>(function, this);
+ }
+
+ /**
+ * Returns an ordering that treats {@code null} as less than all other values
+ * and uses {@code this} to compare non-null values.
+ */
+ // type parameter <S> lets us avoid the extra <String> in statements like:
+ // Ordering<String> o = Ordering.<String>natural().nullsFirst();
+ @GwtCompatible(serializable = true)
+ public <S extends T> Ordering<S> nullsFirst() {
+ return new NullsFirstOrdering<S>(this);
+ }
+
+ /**
+ * Returns an ordering that treats {@code null} as greater than all other
+ * values and uses this ordering to compare non-null values.
+ */
+ // type parameter <S> lets us avoid the extra <String> in statements like:
+ // Ordering<String> o = Ordering.<String>natural().nullsLast();
+ @GwtCompatible(serializable = true)
+ public <S extends T> Ordering<S> nullsLast() {
+ return new NullsLastOrdering<S>(this);
+ }
+
+ /**
+ * {@link Collections#binarySearch(List, Object, Comparator) Searches}
+ * {@code sortedList} for {@code key} using the binary search algorithm. The
+ * list must be sorted using this ordering.
+ *
+ * @param sortedList the list to be searched
+ * @param key the key to be searched for
+ */
+ public int binarySearch(List<? extends T> sortedList, T key) {
+ return Collections.binarySearch(sortedList, key, this);
+ }
+
+ /**
+ * Returns a copy of the given iterable sorted by this ordering. The input is
+ * not modified. The returned list is modifiable, serializable, and has random
+ * access.
+ *
+ * <p>Unlike {@link Sets#newTreeSet(Iterable)}, this method does not collapse
+ * elements that compare as zero, and the resulting collection does not
+ * maintain its own sort order.
+ *
+ * @param iterable the elements to be copied and sorted
+ * @return a new list containing the given elements in sorted order
+ */
+ public <E extends T> List<E> sortedCopy(Iterable<E> iterable) {
+ List<E> list = Lists.newArrayList(iterable);
+ Collections.sort(list, this);
+ return list;
+ }
+
+ /**
+ * Returns {@code true} if each element in {@code iterable} after the first is
+ * greater than or equal to the element that preceded it, according to this
+ * ordering. Note that this is always true when the iterable has fewer than
+ * two elements.
+ */
+ public boolean isOrdered(Iterable<? extends T> iterable) {
+ Iterator<? extends T> it = iterable.iterator();
+ if (it.hasNext()) {
+ T prev = it.next();
+ while (it.hasNext()) {
+ T next = it.next();
+ if (compare(prev, next) > 0) {
+ return false;
+ }
+ prev = next;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Returns {@code true} if each element in {@code iterable} after the first is
+ * <i>strictly</i> greater than the element that preceded it, according to
+ * this ordering. Note that this is always true when the iterable has fewer
+ * than two elements.
+ */
+ public boolean isStrictlyOrdered(Iterable<? extends T> iterable) {
+ Iterator<? extends T> it = iterable.iterator();
+ if (it.hasNext()) {
+ T prev = it.next();
+ while (it.hasNext()) {
+ T next = it.next();
+ if (compare(prev, next) >= 0) {
+ return false;
+ }
+ prev = next;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Returns the largest of the specified values according to this ordering. If
+ * there are multiple largest values, the first of those is returned.
+ *
+ * @param iterable the iterable whose maximum element is to be determined
+ * @throws NoSuchElementException if {@code iterable} is empty
+ * @throws ClassCastException if the parameters are not <i>mutually
+ * comparable</i> under this ordering.
+ */
+ public <E extends T> E max(Iterable<E> iterable) {
+ Iterator<E> iterator = iterable.iterator();
+
+ // let this throw NoSuchElementException as necessary
+ E maxSoFar = iterator.next();
+
+ while (iterator.hasNext()) {
+ maxSoFar = max(maxSoFar, iterator.next());
+ }
+
+ return maxSoFar;
+ }
+
+ /**
+ * Returns the largest of the specified values according to this ordering. If
+ * there are multiple largest values, the first of those is returned.
+ *
+ * @param a value to compare, returned if greater than or equal to the rest.
+ * @param b value to compare
+ * @param c value to compare
+ * @param rest values to compare
+ * @throws ClassCastException if the parameters are not <i>mutually
+ * comparable</i> under this ordering.
+ */
+ public <E extends T> E max(E a, E b, E c, E... rest) {
+ E maxSoFar = max(max(a, b), c);
+
+ for (E r : rest) {
+ maxSoFar = max(maxSoFar, r);
+ }
+
+ return maxSoFar;
+ }
+
+ /**
+ * Returns the larger of the two values according to this ordering. If the
+ * values compare as 0, the first is returned.
+ *
+ * <p><b>Implementation note:</b> this method is invoked by the default
+ * implementations of the other {@code max} overloads, so overriding it will
+ * affect their behavior.
+ *
+ * @param a value to compare, returned if greater than or equal to b.
+ * @param b value to compare.
+ * @throws ClassCastException if the parameters are not <i>mutually
+ * comparable</i> under this ordering.
+ */
+ public <E extends T> E max(E a, E b) {
+ return compare(a, b) >= 0 ? a : b;
+ }
+
+ /**
+ * Returns the smallest of the specified values according to this ordering. If
+ * there are multiple smallest values, the first of those is returned.
+ *
+ * @param iterable the iterable whose minimum element is to be determined
+ * @throws NoSuchElementException if {@code iterable} is empty
+ * @throws ClassCastException if the parameters are not <i>mutually
+ * comparable</i> under this ordering.
+ */
+ public <E extends T> E min(Iterable<E> iterable) {
+ Iterator<E> iterator = iterable.iterator();
+
+ // let this throw NoSuchElementException as necessary
+ E minSoFar = iterator.next();
+
+ while (iterator.hasNext()) {
+ minSoFar = min(minSoFar, iterator.next());
+ }
+
+ return minSoFar;
+ }
+
+ /**
+ * Returns the smallest of the specified values according to this ordering. If
+ * there are multiple smallest values, the first of those is returned.
+ *
+ * @param a value to compare, returned if less than or equal to the rest.
+ * @param b value to compare
+ * @param c value to compare
+ * @param rest values to compare
+ * @throws ClassCastException if the parameters are not <i>mutually
+ * comparable</i> under this ordering.
+ */
+ public <E extends T> E min(E a, E b, E c, E... rest) {
+ E minSoFar = min(min(a, b), c);
+
+ for (E r : rest) {
+ minSoFar = min(minSoFar, r);
+ }
+
+ return minSoFar;
+ }
+
+ /**
+ * Returns the smaller of the two values according to this ordering. If the
+ * values compare as 0, the first is returned.
+ *
+ * <p><b>Implementation note:</b> this method is invoked by the default
+ * implementations of the other {@code min} overloads, so overriding it will
+ * affect their behavior.
+ *
+ * @param a value to compare, returned if less than or equal to b.
+ * @param b value to compare.
+ * @throws ClassCastException if the parameters are not <i>mutually
+ * comparable</i> under this ordering.
+ */
+ public <E extends T> E min(E a, E b) {
+ return compare(a, b) <= 0 ? a : b;
+ }
+
+ // Never make these public
+ static final int LEFT_IS_GREATER = 1;
+ static final int RIGHT_IS_GREATER = -1;
+}
diff --git a/src/com/google/common/collect/PeekingIterator.java b/src/com/google/common/collect/PeekingIterator.java
new file mode 100644
index 0000000..a38aafa
--- /dev/null
+++ b/src/com/google/common/collect/PeekingIterator.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+/**
+ * An iterator that supports a one-element lookahead while iterating.
+ *
+ * @author Mick Killianey
+ */
+@GwtCompatible
+public interface PeekingIterator<E> extends Iterator<E> {
+ /**
+ * Returns the next element in the iteration, without advancing the iteration.
+ *
+ * <p>Calls to {@code peek()} should not change the state of the iteration,
+ * except that it <i>may</i> prevent removal of the most recent element via
+ * {@link #remove()}.
+ *
+ * @throws NoSuchElementException if the iteration has no more elements
+ * according to {@link #hasNext()}
+ */
+ E peek();
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The objects returned by consecutive calls to {@link #peek()} then {@link
+ * #next()} are guaranteed to be equal to each other.
+ */
+ E next();
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>Implementations may or may not support removal when a call to {@link
+ * #peek()} has occurred since the most recent call to {@link #next()}.
+ *
+ * @throws IllegalStateException if there has been a call to {@link #peek()}
+ * since the most recent call to {@link #next()} and this implementation
+ * does not support this sequence of calls (optional)
+ */
+ void remove();
+}
diff --git a/src/com/google/common/collect/Platform.java b/src/com/google/common/collect/Platform.java
new file mode 100644
index 0000000..58ec061
--- /dev/null
+++ b/src/com/google/common/collect/Platform.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.lang.reflect.Array;
+import java.util.List;
+
+/**
+ * Methods factored out so that they can be emulated differently in GWT.
+ *
+ * @author Hayward Chan
+ */
+@GwtCompatible(emulated = true)
+class Platform {
+
+ /**
+ * Calls {@link List#subList(int, int)}. Factored out so that it can be
+ * emulated in GWT.
+ *
+ * <p>This method is not supported in GWT yet. See <a
+ * href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1791">
+ * GWT issue 1791</a>
+ */
+ @GwtIncompatible("List.subList")
+ static <T> List<T> subList(List<T> list, int fromIndex, int toIndex) {
+ return list.subList(fromIndex, toIndex);
+ }
+
+ /**
+ * Calls {@link Class#isInstance(Object)}. Factored out so that it can be
+ * emulated in GWT.
+ */
+ @GwtIncompatible("Class.isInstance")
+ static boolean isInstance(Class<?> clazz, Object obj) {
+ return clazz.isInstance(obj);
+ }
+
+ /**
+ * Clone the given array using {@link Object#clone()}. It is factored out so
+ * that it can be emulated in GWT.
+ */
+ static <T> T[] clone(T[] array) {
+ return array.clone();
+ }
+
+ /**
+ * Returns a new array of the given length with the specified component type.
+ *
+ * @param type the component type
+ * @param length the length of the new array
+ */
+ @GwtIncompatible("Array.newInstance(Class, int)")
+ @SuppressWarnings("unchecked")
+ static <T> T[] newArray(Class<T> type, int length) {
+ return (T[]) Array.newInstance(type, length);
+ }
+
+ /**
+ * Returns a new array of the given length with the same type as a reference
+ * array.
+ *
+ * @param reference any array of the desired type
+ * @param length the length of the new array
+ */
+ static <T> T[] newArray(T[] reference, int length) {
+ Class<?> type = reference.getClass().getComponentType();
+
+ // the cast is safe because
+ // result.getClass() == reference.getClass().getComponentType()
+ @SuppressWarnings("unchecked")
+ T[] result = (T[]) Array.newInstance(type, length);
+ return result;
+ }
+
+ private Platform() {}
+} \ No newline at end of file
diff --git a/src/com/google/common/collect/RegularImmutableBiMap.java b/src/com/google/common/collect/RegularImmutableBiMap.java
new file mode 100644
index 0000000..53a50fb
--- /dev/null
+++ b/src/com/google/common/collect/RegularImmutableBiMap.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * Bimap with one or more mappings.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(serializable = true)
+@SuppressWarnings("serial") // uses writeReplace(), not default serialization
+class RegularImmutableBiMap<K, V> extends ImmutableBiMap<K, V> {
+ final transient ImmutableMap<K, V> delegate;
+ final transient ImmutableBiMap<V, K> inverse;
+
+ RegularImmutableBiMap(ImmutableMap<K, V> delegate) {
+ this.delegate = delegate;
+
+ ImmutableMap.Builder<V, K> builder = ImmutableMap.builder();
+ for (Entry<K, V> entry : delegate.entrySet()) {
+ builder.put(entry.getValue(), entry.getKey());
+ }
+ ImmutableMap<V, K> backwardMap = builder.build();
+ this.inverse = new RegularImmutableBiMap<V, K>(backwardMap, this);
+ }
+
+ RegularImmutableBiMap(ImmutableMap<K, V> delegate,
+ ImmutableBiMap<V, K> inverse) {
+ this.delegate = delegate;
+ this.inverse = inverse;
+ }
+
+ @Override ImmutableMap<K, V> delegate() {
+ return delegate;
+ }
+
+ @Override public ImmutableBiMap<V, K> inverse() {
+ return inverse;
+ }
+}
diff --git a/src/com/google/common/collect/RegularImmutableList.java b/src/com/google/common/collect/RegularImmutableList.java
new file mode 100644
index 0000000..e805481
--- /dev/null
+++ b/src/com/google/common/collect/RegularImmutableList.java
@@ -0,0 +1,227 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Preconditions;
+
+import java.util.List;
+import java.util.ListIterator;
+import java.util.NoSuchElementException;
+
+import javax.annotation.Nullable;
+
+/**
+ * Implementation of {@link ImmutableList} with one or more elements.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(serializable = true)
+@SuppressWarnings("serial") // uses writeReplace(), not default serialization
+final class RegularImmutableList<E> extends ImmutableList<E> {
+ private final transient int offset;
+ private final transient int size;
+ private final transient Object[] array;
+
+ RegularImmutableList(Object[] array, int offset, int size) {
+ this.offset = offset;
+ this.size = size;
+ this.array = array;
+ }
+
+ RegularImmutableList(Object[] array) {
+ this(array, 0, array.length);
+ }
+
+ public int size() {
+ return size;
+ }
+
+ @Override public boolean isEmpty() {
+ return false;
+ }
+
+ @Override public boolean contains(Object target) {
+ return indexOf(target) != -1;
+ }
+
+ // The fake cast to E is safe because the creation methods only allow E's
+ @SuppressWarnings("unchecked")
+ @Override public UnmodifiableIterator<E> iterator() {
+ return (UnmodifiableIterator<E>) Iterators.forArray(array, offset, size);
+ }
+
+ @Override public Object[] toArray() {
+ Object[] newArray = new Object[size()];
+ System.arraycopy(array, offset, newArray, 0, size);
+ return newArray;
+ }
+
+ @Override public <T> T[] toArray(T[] other) {
+ if (other.length < size) {
+ other = ObjectArrays.newArray(other, size);
+ } else if (other.length > size) {
+ other[size] = null;
+ }
+ System.arraycopy(array, offset, other, 0, size);
+ return other;
+ }
+
+ // The fake cast to E is safe because the creation methods only allow E's
+ @SuppressWarnings("unchecked")
+ public E get(int index) {
+ Preconditions.checkElementIndex(index, size);
+ return (E) array[index + offset];
+ }
+
+ @Override public int indexOf(Object target) {
+ if (target != null) {
+ for (int i = offset; i < offset + size; i++) {
+ if (array[i].equals(target)) {
+ return i - offset;
+ }
+ }
+ }
+ return -1;
+ }
+
+ @Override public int lastIndexOf(Object target) {
+ if (target != null) {
+ for (int i = offset + size - 1; i >= offset; i--) {
+ if (array[i].equals(target)) {
+ return i - offset;
+ }
+ }
+ }
+ return -1;
+ }
+
+ @Override public ImmutableList<E> subList(int fromIndex, int toIndex) {
+ Preconditions.checkPositionIndexes(fromIndex, toIndex, size);
+ return (fromIndex == toIndex)
+ ? ImmutableList.<E>of()
+ : new RegularImmutableList<E>(
+ array, offset + fromIndex, toIndex - fromIndex);
+ }
+
+ public ListIterator<E> listIterator() {
+ return listIterator(0);
+ }
+
+ public ListIterator<E> listIterator(final int start) {
+ Preconditions.checkPositionIndex(start, size);
+
+ return new ListIterator<E>() {
+ int index = start;
+
+ public boolean hasNext() {
+ return index < size;
+ }
+ public boolean hasPrevious() {
+ return index > 0;
+ }
+
+ public int nextIndex() {
+ return index;
+ }
+ public int previousIndex() {
+ return index - 1;
+ }
+
+ public E next() {
+ E result;
+ try {
+ result = get(index);
+ } catch (IndexOutOfBoundsException rethrown) {
+ throw new NoSuchElementException();
+ }
+ index++;
+ return result;
+ }
+ public E previous() {
+ E result;
+ try {
+ result = get(index - 1);
+ } catch (IndexOutOfBoundsException rethrown) {
+ throw new NoSuchElementException();
+ }
+ index--;
+ return result;
+ }
+
+ public void set(E o) {
+ throw new UnsupportedOperationException();
+ }
+ public void add(E o) {
+ throw new UnsupportedOperationException();
+ }
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+ };
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ if (object == this) {
+ return true;
+ }
+ if (!(object instanceof List)) {
+ return false;
+ }
+
+ List<?> that = (List<?>) object;
+ if (this.size() != that.size()) {
+ return false;
+ }
+
+ int index = offset;
+ if (object instanceof RegularImmutableList) {
+ RegularImmutableList<?> other = (RegularImmutableList<?>) object;
+ for (int i = other.offset; i < other.offset + other.size; i++) {
+ if (!array[index++].equals(other.array[i])) {
+ return false;
+ }
+ }
+ } else {
+ for (Object element : that) {
+ if (!array[index++].equals(element)) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ @Override public int hashCode() {
+ // not caching hash code since it could change if the elements are mutable
+ // in a way that modifies their hash codes
+ int hashCode = 1;
+ for (int i = offset; i < offset + size; i++) {
+ hashCode = 31 * hashCode + array[i].hashCode();
+ }
+ return hashCode;
+ }
+
+ @Override public String toString() {
+ StringBuilder sb = new StringBuilder(size() * 16);
+ sb.append('[').append(array[offset]);
+ for (int i = offset + 1; i < offset + size; i++) {
+ sb.append(", ").append(array[i]);
+ }
+ return sb.append(']').toString();
+ }
+}
diff --git a/src/com/google/common/collect/RegularImmutableMap.java b/src/com/google/common/collect/RegularImmutableMap.java
new file mode 100644
index 0000000..0d12309
--- /dev/null
+++ b/src/com/google/common/collect/RegularImmutableMap.java
@@ -0,0 +1,209 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.ImmutableSet.ArrayImmutableSet;
+import com.google.common.collect.ImmutableSet.TransformedImmutableSet;
+
+/**
+ * Implementation of {@link ImmutableMap} with two or more entries.
+ *
+ * @author Jesse Wilson
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(serializable = true)
+final class RegularImmutableMap<K, V> extends ImmutableMap<K, V> {
+
+ private final transient Entry<K, V>[] entries; // entries in insertion order
+ private final transient Object[] table; // alternating keys and values
+ // 'and' with an int then shift to get a table index
+ private final transient int mask;
+ private final transient int keySetHashCode;
+
+ RegularImmutableMap(Entry<?, ?>... immutableEntries) {
+ // each of our 6 callers carefully put only Entry<K, V>s into the array!
+ @SuppressWarnings("unchecked")
+ Entry<K, V>[] tmp = (Entry<K, V>[]) immutableEntries;
+ this.entries = tmp;
+
+ int tableSize = Hashing.chooseTableSize(immutableEntries.length);
+ table = new Object[tableSize * 2];
+ mask = tableSize - 1;
+
+ int keySetHashCodeMutable = 0;
+ for (Entry<K, V> entry : this.entries) {
+ K key = entry.getKey();
+ int keyHashCode = key.hashCode();
+ for (int i = Hashing.smear(keyHashCode); true; i++) {
+ int index = (i & mask) * 2;
+ Object existing = table[index];
+ if (existing == null) {
+ V value = entry.getValue();
+ table[index] = key;
+ table[index + 1] = value;
+ keySetHashCodeMutable += keyHashCode;
+ break;
+ } else if (existing.equals(key)) {
+ throw new IllegalArgumentException("duplicate key: " + key);
+ }
+ }
+ }
+ keySetHashCode = keySetHashCodeMutable;
+ }
+
+ @Override public V get(Object key) {
+ if (key == null) {
+ return null;
+ }
+ for (int i = Hashing.smear(key.hashCode()); true; i++) {
+ int index = (i & mask) * 2;
+ Object candidate = table[index];
+ if (candidate == null) {
+ return null;
+ }
+ if (candidate.equals(key)) {
+ // we're careful to store only V's at odd indices
+ @SuppressWarnings("unchecked")
+ V value = (V) table[index + 1];
+ return value;
+ }
+ }
+ }
+
+ public int size() {
+ return entries.length;
+ }
+
+ @Override public boolean isEmpty() {
+ return false;
+ }
+
+ @Override public boolean containsValue(Object value) {
+ if (value == null) {
+ return false;
+ }
+ for (Entry<K, V> entry : entries) {
+ if (entry.getValue().equals(value)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ // TODO: Serialization of the map views should serialize the map, and
+ // deserialization should call entrySet(), keySet(), or values() on the
+ // deserialized map. The views are serializable since the Immutable* classes
+ // are.
+
+ private transient ImmutableSet<Entry<K, V>> entrySet;
+
+ @Override public ImmutableSet<Entry<K, V>> entrySet() {
+ ImmutableSet<Entry<K, V>> es = entrySet;
+ return (es == null) ? (entrySet = new EntrySet<K, V>(this)) : es;
+ }
+
+ @SuppressWarnings("serial") // uses writeReplace(), not default serialization
+ private static class EntrySet<K, V> extends ArrayImmutableSet<Entry<K, V>> {
+ final transient RegularImmutableMap<K, V> map;
+
+ EntrySet(RegularImmutableMap<K, V> map) {
+ super(map.entries);
+ this.map = map;
+ }
+
+ @Override public boolean contains(Object target) {
+ if (target instanceof Entry) {
+ Entry<?, ?> entry = (Entry<?, ?>) target;
+ V mappedValue = map.get(entry.getKey());
+ return mappedValue != null && mappedValue.equals(entry.getValue());
+ }
+ return false;
+ }
+ }
+
+ private transient ImmutableSet<K> keySet;
+
+ @Override public ImmutableSet<K> keySet() {
+ ImmutableSet<K> ks = keySet;
+ return (ks == null) ? (keySet = new KeySet<K, V>(this)) : ks;
+ }
+
+ @SuppressWarnings("serial") // uses writeReplace(), not default serialization
+ private static class KeySet<K, V>
+ extends TransformedImmutableSet<Entry<K, V>, K> {
+ final RegularImmutableMap<K, V> map;
+
+ KeySet(RegularImmutableMap<K, V> map) {
+ super(map.entries, map.keySetHashCode);
+ this.map = map;
+ }
+
+ @Override K transform(Entry<K, V> element) {
+ return element.getKey();
+ }
+
+ @Override public boolean contains(Object target) {
+ return map.containsKey(target);
+ }
+ }
+
+ private transient ImmutableCollection<V> values;
+
+ @Override public ImmutableCollection<V> values() {
+ ImmutableCollection<V> v = values;
+ return (v == null) ? (values = new Values<V>(this)) : v;
+ }
+
+ @SuppressWarnings("serial") // uses writeReplace(), not default serialization
+ private static class Values<V> extends ImmutableCollection<V> {
+ final RegularImmutableMap<?, V> map;
+
+ Values(RegularImmutableMap<?, V> map) {
+ this.map = map;
+ }
+
+ public int size() {
+ return map.entries.length;
+ }
+
+ @Override public UnmodifiableIterator<V> iterator() {
+ return new AbstractIterator<V>() {
+ int index = 0;
+ @Override protected V computeNext() {
+ return (index < map.entries.length)
+ ? map.entries[index++].getValue()
+ : endOfData();
+ }
+ };
+ }
+
+ @Override public boolean contains(Object target) {
+ return map.containsValue(target);
+ }
+ }
+
+ @Override public String toString() {
+ StringBuilder result = new StringBuilder(size() * 16).append('{');
+ Collections2.standardJoiner.appendTo(result, entries);
+ return result.append('}').toString();
+ }
+
+ // This class is never actually serialized directly, but we have to make the
+ // warning go away (and suppressing would suppress for all nested classes too)
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/RegularImmutableSet.java b/src/com/google/common/collect/RegularImmutableSet.java
new file mode 100644
index 0000000..5eeea8a
--- /dev/null
+++ b/src/com/google/common/collect/RegularImmutableSet.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.ImmutableSet.ArrayImmutableSet;
+
+/**
+ * Implementation of {@link ImmutableSet} with two or more elements.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(serializable = true)
+@SuppressWarnings("serial") // uses writeReplace(), not default serialization
+final class RegularImmutableSet<E> extends ArrayImmutableSet<E> {
+ // the same elements in hashed positions (plus nulls)
+ @VisibleForTesting final transient Object[] table;
+ // 'and' with an int to get a valid table index.
+ private final transient int mask;
+ private final transient int hashCode;
+
+ RegularImmutableSet(
+ Object[] elements, int hashCode, Object[] table, int mask) {
+ super(elements);
+ this.table = table;
+ this.mask = mask;
+ this.hashCode = hashCode;
+ }
+
+ @Override public boolean contains(Object target) {
+ if (target == null) {
+ return false;
+ }
+ for (int i = Hashing.smear(target.hashCode()); true; i++) {
+ Object candidate = table[i & mask];
+ if (candidate == null) {
+ return false;
+ }
+ if (candidate.equals(target)) {
+ return true;
+ }
+ }
+ }
+
+ @Override public int hashCode() {
+ return hashCode;
+ }
+
+ @Override boolean isHashCodeFast() {
+ return true;
+ }
+}
diff --git a/src/com/google/common/collect/RegularImmutableSortedSet.java b/src/com/google/common/collect/RegularImmutableSortedSet.java
new file mode 100644
index 0000000..d15853b
--- /dev/null
+++ b/src/com/google/common/collect/RegularImmutableSortedSet.java
@@ -0,0 +1,253 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * An empty immutable sorted set with one or more elements.
+ * TODO: Consider creating a separate class for a single-element sorted set.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(serializable = true)
+@SuppressWarnings("serial")
+final class RegularImmutableSortedSet<E>
+ extends ImmutableSortedSet<E> {
+
+ private final Object[] elements;
+ /**
+ * The index of the first element that's in the sorted set (inclusive
+ * index).
+ */
+ private final int fromIndex;
+ /**
+ * The index after the last element that's in the sorted set (exclusive
+ * index).
+ */
+ private final int toIndex;
+
+ RegularImmutableSortedSet(Object[] elements,
+ Comparator<? super E> comparator) {
+ super(comparator);
+ this.elements = elements;
+ this.fromIndex = 0;
+ this.toIndex = elements.length;
+ }
+
+ RegularImmutableSortedSet(Object[] elements,
+ Comparator<? super E> comparator, int fromIndex, int toIndex) {
+ super(comparator);
+ this.elements = elements;
+ this.fromIndex = fromIndex;
+ this.toIndex = toIndex;
+ }
+
+ // The factory methods ensure that every element is an E.
+ @SuppressWarnings("unchecked")
+ @Override public UnmodifiableIterator<E> iterator() {
+ return (UnmodifiableIterator<E>)
+ Iterators.forArray(elements, fromIndex, size());
+ }
+
+ @Override public boolean isEmpty() {
+ return false;
+ }
+
+ public int size() {
+ return toIndex - fromIndex;
+ }
+
+ @Override public boolean contains(Object o) {
+ if (o == null) {
+ return false;
+ }
+ try {
+ return binarySearch(o) >= 0;
+ } catch (ClassCastException e) {
+ return false;
+ }
+ }
+
+ @Override public boolean containsAll(Collection<?> targets) {
+ // TODO: For optimal performance, use a binary search when
+ // targets.size() < size() / log(size())
+ if (!hasSameComparator(targets, comparator()) || (targets.size() <= 1)) {
+ return super.containsAll(targets);
+ }
+
+ /*
+ * If targets is a sorted set with the same comparator, containsAll can
+ * run in O(n) time stepping through the two collections.
+ */
+ int i = fromIndex;
+ Iterator<?> iterator = targets.iterator();
+ Object target = iterator.next();
+
+ while (true) {
+ if (i >= toIndex) {
+ return false;
+ }
+
+ int cmp = unsafeCompare(elements[i], target);
+
+ if (cmp < 0) {
+ i++;
+ } else if (cmp == 0) {
+ if (!iterator.hasNext()) {
+ return true;
+ }
+ target = iterator.next();
+ i++;
+ } else if (cmp > 0) {
+ return false;
+ }
+ }
+ }
+
+ private int binarySearch(Object key) {
+ int lower = fromIndex;
+ int upper = toIndex - 1;
+
+ while (lower <= upper) {
+ int middle = lower + (upper - lower) / 2;
+ int c = unsafeCompare(key, elements[middle]);
+ if (c < 0) {
+ upper = middle - 1;
+ } else if (c > 0) {
+ lower = middle + 1;
+ } else {
+ return middle;
+ }
+ }
+
+ return -lower - 1;
+ }
+
+ @Override public Object[] toArray() {
+ Object[] array = new Object[size()];
+ System.arraycopy(elements, fromIndex, array, 0, size());
+ return array;
+ }
+
+ // TODO: Move to ObjectArrays (same code in ImmutableList).
+ @Override public <T> T[] toArray(T[] array) {
+ int size = size();
+ if (array.length < size) {
+ array = ObjectArrays.newArray(array, size);
+ } else if (array.length > size) {
+ array[size] = null;
+ }
+ System.arraycopy(elements, fromIndex, array, 0, size);
+ return array;
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ if (object == this) {
+ return true;
+ }
+ if (!(object instanceof Set)) {
+ return false;
+ }
+
+ Set<?> that = (Set<?>) object;
+ if (size() != that.size()) {
+ return false;
+ }
+
+ if (hasSameComparator(that, comparator)) {
+ Iterator<?> iterator = that.iterator();
+ try {
+ for (int i = fromIndex; i < toIndex; i++) {
+ Object otherElement = iterator.next();
+ if (otherElement == null
+ || unsafeCompare(elements[i], otherElement) != 0) {
+ return false;
+ }
+ }
+ return true;
+ } catch (ClassCastException e) {
+ return false;
+ } catch (NoSuchElementException e) {
+ return false; // concurrent change to other set
+ }
+ }
+ return this.containsAll(that);
+ }
+
+ @Override public int hashCode() {
+ // not caching hash code since it could change if the elements are mutable
+ // in a way that modifies their hash codes
+ int hash = 0;
+ for (int i = fromIndex; i < toIndex; i++) {
+ hash += elements[i].hashCode();
+ }
+ return hash;
+ }
+
+ // The factory methods ensure that every element is an E.
+ @SuppressWarnings("unchecked")
+ public E first() {
+ return (E) elements[fromIndex];
+ }
+
+ // The factory methods ensure that every element is an E.
+ @SuppressWarnings("unchecked")
+ public E last() {
+ return (E) elements[toIndex - 1];
+ }
+
+ @Override ImmutableSortedSet<E> headSetImpl(E toElement) {
+ return createSubset(fromIndex, findSubsetIndex(toElement));
+ }
+
+ @Override ImmutableSortedSet<E> subSetImpl(E fromElement, E toElement) {
+ return createSubset(
+ findSubsetIndex(fromElement), findSubsetIndex(toElement));
+ }
+
+ @Override ImmutableSortedSet<E> tailSetImpl(E fromElement) {
+ return createSubset(findSubsetIndex(fromElement), toIndex);
+ }
+
+ private int findSubsetIndex(E element) {
+ int index = binarySearch(element);
+ return (index >= 0) ? index : (-index - 1);
+ }
+
+ private ImmutableSortedSet<E> createSubset(
+ int newFromIndex, int newToIndex) {
+ if (newFromIndex < newToIndex) {
+ return new RegularImmutableSortedSet<E>(elements, comparator,
+ newFromIndex, newToIndex);
+ } else {
+ return emptySet(comparator);
+ }
+ }
+
+ @Override boolean hasPartialArray() {
+ return (fromIndex != 0) || (toIndex != elements.length);
+ }
+}
diff --git a/src/com/google/common/collect/ReverseNaturalOrdering.java b/src/com/google/common/collect/ReverseNaturalOrdering.java
new file mode 100644
index 0000000..3582f02
--- /dev/null
+++ b/src/com/google/common/collect/ReverseNaturalOrdering.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.io.Serializable;
+
+/** An ordering that uses the reverse of the natural order of the values. */
+@GwtCompatible(serializable = true)
+@SuppressWarnings("unchecked") // TODO: the right way to explain this??
+final class ReverseNaturalOrdering
+ extends Ordering<Comparable> implements Serializable {
+ static final ReverseNaturalOrdering INSTANCE = new ReverseNaturalOrdering();
+
+ public int compare(Comparable left, Comparable right) {
+ checkNotNull(left); // right null is caught later
+ if (left == right) {
+ return 0;
+ }
+
+ @SuppressWarnings("unchecked") // we're permitted to throw CCE
+ int result = right.compareTo(left);
+ return result;
+ }
+
+ @Override public <S extends Comparable> Ordering<S> reverse() {
+ return Ordering.natural();
+ }
+
+ // Override the six min/max methods to "hoist" delegation outside loops
+
+ @Override public <E extends Comparable> E min(E a, E b) {
+ return NaturalOrdering.INSTANCE.max(a, b);
+ }
+
+ @Override public <E extends Comparable> E min(E a, E b, E c, E... rest) {
+ return NaturalOrdering.INSTANCE.max(a, b, c, rest);
+ }
+
+ @Override public <E extends Comparable> E min(Iterable<E> iterable) {
+ return NaturalOrdering.INSTANCE.max(iterable);
+ }
+
+ @Override public <E extends Comparable> E max(E a, E b) {
+ return NaturalOrdering.INSTANCE.min(a, b);
+ }
+
+ @Override public <E extends Comparable> E max(E a, E b, E c, E... rest) {
+ return NaturalOrdering.INSTANCE.min(a, b, c, rest);
+ }
+
+ @Override public <E extends Comparable> E max(Iterable<E> iterable) {
+ return NaturalOrdering.INSTANCE.min(iterable);
+ }
+
+ // preserving singleton-ness gives equals()/hashCode() for free
+ private Object readResolve() {
+ return INSTANCE;
+ }
+
+ @Override public String toString() {
+ return "Ordering.natural().reverse()";
+ }
+
+ private ReverseNaturalOrdering() {}
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/ReverseOrdering.java b/src/com/google/common/collect/ReverseOrdering.java
new file mode 100644
index 0000000..e74d27a
--- /dev/null
+++ b/src/com/google/common/collect/ReverseOrdering.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.io.Serializable;
+
+import javax.annotation.Nullable;
+
+/** An ordering that uses the reverse of a given order. */
+@GwtCompatible(serializable = true)
+final class ReverseOrdering<T> extends Ordering<T> implements Serializable {
+ final Ordering<? super T> forwardOrder;
+
+ ReverseOrdering(Ordering<? super T> forwardOrder) {
+ this.forwardOrder = checkNotNull(forwardOrder);
+ }
+
+ public int compare(T a, T b) {
+ return forwardOrder.compare(b, a);
+ }
+
+ @SuppressWarnings("unchecked") // how to explain?
+ @Override public <S extends T> Ordering<S> reverse() {
+ return (Ordering) forwardOrder;
+ }
+
+ // Override the six min/max methods to "hoist" delegation outside loops
+
+ @Override public <E extends T> E min(E a, E b) {
+ return forwardOrder.max(a, b);
+ }
+
+ @Override public <E extends T> E min(E a, E b, E c, E... rest) {
+ return forwardOrder.max(a, b, c, rest);
+ }
+
+ @Override public <E extends T> E min(Iterable<E> iterable) {
+ return forwardOrder.max(iterable);
+ }
+
+ @Override public <E extends T> E max(E a, E b) {
+ return forwardOrder.min(a, b);
+ }
+
+ @Override public <E extends T> E max(E a, E b, E c, E... rest) {
+ return forwardOrder.min(a, b, c, rest);
+ }
+
+ @Override public <E extends T> E max(Iterable<E> iterable) {
+ return forwardOrder.min(iterable);
+ }
+
+ @Override public int hashCode() {
+ return -forwardOrder.hashCode();
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ if (object == this) {
+ return true;
+ }
+ if (object instanceof ReverseOrdering) {
+ ReverseOrdering<?> that = (ReverseOrdering<?>) object;
+ return this.forwardOrder.equals(that.forwardOrder);
+ }
+ return false;
+ }
+
+ @Override public String toString() {
+ return forwardOrder + ".reverse()";
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/Serialization.java b/src/com/google/common/collect/Serialization.java
new file mode 100644
index 0000000..b2f053d
--- /dev/null
+++ b/src/com/google/common/collect/Serialization.java
@@ -0,0 +1,249 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.lang.reflect.Field;
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Provides static methods for serializing collection classes.
+ *
+ * <p>This class assists the implementation of collection classes. Do not use
+ * this class to serialize collections that are defined elsewhere.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true) // Accessible but not supported in GWT.
+final class Serialization {
+ private Serialization() {}
+
+ /**
+ * Reads a count corresponding to a serialized map, multiset, or multimap. It
+ * returns the size of a map serialized by {@link
+ * #writeMap(Map, ObjectOutputStream)}, the number of distinct elements in a
+ * multiset serialized by {@link
+ * #writeMultiset(Multiset, ObjectOutputStream)}, or the number of distinct
+ * keys in a multimap serialized by {@link
+ * #writeMultimap(Multimap, ObjectOutputStream)}.
+ *
+ * <p>The returned count may be used to construct an empty collection of the
+ * appropriate capacity before calling any of the {@code populate} methods.
+ */
+ @GwtIncompatible("java.io.ObjectInputStream")
+ public static int readCount(ObjectInputStream stream) throws IOException {
+ return stream.readInt();
+ }
+
+ /**
+ * Stores the contents of a map in an output stream, as part of serialization.
+ * It does not support concurrent maps whose content may change while the
+ * method is running.
+ *
+ * <p>The serialized output consists of the number of entries, first key,
+ * first value, second key, second value, and so on.
+ */
+ @GwtIncompatible("java.io.ObjectOutputStream")
+ public static <K, V> void writeMap(Map<K, V> map, ObjectOutputStream stream)
+ throws IOException {
+ stream.writeInt(map.size());
+ for (Map.Entry<K, V> entry : map.entrySet()) {
+ stream.writeObject(entry.getKey());
+ stream.writeObject(entry.getValue());
+ }
+ }
+
+ /**
+ * Populates a map by reading an input stream, as part of deserialization.
+ * See {@link #writeMap} for the data format.
+ */
+ @GwtIncompatible("java.io.ObjectInputStream")
+ public static <K, V> void populateMap(Map<K, V> map, ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ int size = stream.readInt();
+ populateMap(map, stream, size);
+ }
+
+ /**
+ * Populates a map by reading an input stream, as part of deserialization.
+ * See {@link #writeMap} for the data format. The size is determined by a
+ * prior call to {@link #readCount}.
+ */
+ @GwtIncompatible("java.io.ObjectInputStream")
+ public static <K, V> void populateMap(Map<K, V> map, ObjectInputStream stream,
+ int size) throws IOException, ClassNotFoundException {
+ for (int i = 0; i < size; i++) {
+ @SuppressWarnings("unchecked") // reading data stored by writeMap
+ K key = (K) stream.readObject();
+ @SuppressWarnings("unchecked") // reading data stored by writeMap
+ V value = (V) stream.readObject();
+ map.put(key, value);
+ }
+ }
+
+ /**
+ * Stores the contents of a multiset in an output stream, as part of
+ * serialization. It does not support concurrent multisets whose content may
+ * change while the method is running.
+ *
+ * <p>The serialized output consists of the number of distinct elements, the
+ * first element, its count, the second element, its count, and so on.
+ */
+ @GwtIncompatible("java.io.ObjectOutputStream")
+ public static <E> void writeMultiset(
+ Multiset<E> multiset, ObjectOutputStream stream) throws IOException {
+ int entryCount = multiset.entrySet().size();
+ stream.writeInt(entryCount);
+ for (Multiset.Entry<E> entry : multiset.entrySet()) {
+ stream.writeObject(entry.getElement());
+ stream.writeInt(entry.getCount());
+ }
+ }
+
+ /**
+ * Populates a multiset by reading an input stream, as part of
+ * deserialization. See {@link #writeMultiset} for the data format.
+ */
+ @GwtIncompatible("java.io.ObjectInputStream")
+ public static <E> void populateMultiset(
+ Multiset<E> multiset, ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ int distinctElements = stream.readInt();
+ populateMultiset(multiset, stream, distinctElements);
+ }
+
+ /**
+ * Populates a multiset by reading an input stream, as part of
+ * deserialization. See {@link #writeMultiset} for the data format. The number
+ * of distinct elements is determined by a prior call to {@link #readCount}.
+ */
+ @GwtIncompatible("java.io.ObjectInputStream")
+ public static <E> void populateMultiset(
+ Multiset<E> multiset, ObjectInputStream stream, int distinctElements)
+ throws IOException, ClassNotFoundException {
+ for (int i = 0; i < distinctElements; i++) {
+ @SuppressWarnings("unchecked") // reading data stored by writeMultiset
+ E element = (E) stream.readObject();
+ int count = stream.readInt();
+ multiset.add(element, count);
+ }
+ }
+
+ /**
+ * Stores the contents of a multimap in an output stream, as part of
+ * serialization. It does not support concurrent multimaps whose content may
+ * change while the method is running. The {@link Multimap#asMap} view
+ * determines the ordering in which data is written to the stream.
+ *
+ * <p>The serialized output consists of the number of distinct keys, and then
+ * for each distinct key: the key, the number of values for that key, and the
+ * key's values.
+ */
+ @GwtIncompatible("java.io.ObjectOutputStream")
+ public static <K, V> void writeMultimap(
+ Multimap<K, V> multimap, ObjectOutputStream stream) throws IOException {
+ stream.writeInt(multimap.asMap().size());
+ for (Map.Entry<K, Collection<V>> entry : multimap.asMap().entrySet()) {
+ stream.writeObject(entry.getKey());
+ stream.writeInt(entry.getValue().size());
+ for (V value : entry.getValue()) {
+ stream.writeObject(value);
+ }
+ }
+ }
+
+ /**
+ * Populates a multimap by reading an input stream, as part of
+ * deserialization. See {@link #writeMultimap} for the data format.
+ */
+ @GwtIncompatible("java.io.ObjectInputStream")
+ public static <K, V> void populateMultimap(
+ Multimap<K, V> multimap, ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ int distinctKeys = stream.readInt();
+ populateMultimap(multimap, stream, distinctKeys);
+ }
+
+ /**
+ * Populates a multimap by reading an input stream, as part of
+ * deserialization. See {@link #writeMultimap} for the data format. The number
+ * of distinct keys is determined by a prior call to {@link #readCount}.
+ */
+ @GwtIncompatible("java.io.ObjectInputStream")
+ public static <K, V> void populateMultimap(
+ Multimap<K, V> multimap, ObjectInputStream stream, int distinctKeys)
+ throws IOException, ClassNotFoundException {
+ for (int i = 0; i < distinctKeys; i++) {
+ @SuppressWarnings("unchecked") // reading data stored by writeMultimap
+ K key = (K) stream.readObject();
+ Collection<V> values = multimap.get(key);
+ int valueCount = stream.readInt();
+ for (int j = 0; j < valueCount; j++) {
+ @SuppressWarnings("unchecked") // reading data stored by writeMultimap
+ V value = (V) stream.readObject();
+ values.add(value);
+ }
+ }
+ }
+
+ // Secret sauce for setting final fields; don't make it public.
+ @GwtIncompatible("java.lang.reflect.Field")
+ static <T> FieldSetter<T> getFieldSetter(
+ final Class<T> clazz, String fieldName) {
+ try {
+ Field field = clazz.getDeclaredField(fieldName);
+ return new FieldSetter<T>(field);
+ } catch (NoSuchFieldException e) {
+ throw new AssertionError(e); // programmer error
+ }
+ }
+
+ // Secret sauce for setting final fields; don't make it public.
+ @GwtCompatible(emulated = true) // Accessible but not supported in GWT.
+ static final class FieldSetter<T> {
+ private final Field field;
+
+ private FieldSetter(Field field) {
+ this.field = field;
+ field.setAccessible(true);
+ }
+
+ @GwtIncompatible("java.lang.reflect.Field")
+ void set(T instance, Object value) {
+ try {
+ field.set(instance, value);
+ } catch (IllegalAccessException impossible) {
+ throw new AssertionError(impossible);
+ }
+ }
+
+ @GwtIncompatible("java.lang.reflect.Field")
+ void set(T instance, int value) {
+ try {
+ field.set(instance, value);
+ } catch (IllegalAccessException impossible) {
+ throw new AssertionError(impossible);
+ }
+ }
+ }
+}
diff --git a/src/com/google/common/collect/SetMultimap.java b/src/com/google/common/collect/SetMultimap.java
new file mode 100644
index 0000000..0b9cc84
--- /dev/null
+++ b/src/com/google/common/collect/SetMultimap.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * A {@code Multimap} that cannot hold duplicate key-value pairs. Adding a
+ * key-value pair that's already in the multimap has no effect.
+ *
+ * <p>The {@link #get}, {@link #removeAll}, and {@link #replaceValues} methods
+ * each return a {@link Set} of values, while {@link #entries} returns a {@code
+ * Set} of map entries. Though the method signature doesn't say so explicitly,
+ * the map returned by {@link #asMap} has {@code Set} values.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+public interface SetMultimap<K, V> extends Multimap<K, V> {
+ /**
+ * {@inheritDoc}
+ *
+ * <p>Because a {@code SetMultimap} has unique values for a given key, this
+ * method returns a {@link Set}, instead of the {@link java.util.Collection}
+ * specified in the {@link Multimap} interface.
+ */
+ Set<V> get(@Nullable K key);
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>Because a {@code SetMultimap} has unique values for a given key, this
+ * method returns a {@link Set}, instead of the {@link java.util.Collection}
+ * specified in the {@link Multimap} interface.
+ */
+ Set<V> removeAll(@Nullable Object key);
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>Because a {@code SetMultimap} has unique values for a given key, this
+ * method returns a {@link Set}, instead of the {@link java.util.Collection}
+ * specified in the {@link Multimap} interface.
+ *
+ * <p>Any duplicates in {@code values} will be stored in the multimap once.
+ */
+ Set<V> replaceValues(K key, Iterable<? extends V> values);
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>Because a {@code SetMultimap} has unique values for a given key, this
+ * method returns a {@link Set}, instead of the {@link java.util.Collection}
+ * specified in the {@link Multimap} interface.
+ */
+ Set<Map.Entry<K, V>> entries();
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>Though the method signature doesn't say so explicitly, the returned map
+ * has {@link Set} values.
+ */
+ Map<K, Collection<V>> asMap();
+
+ /**
+ * Compares the specified object to this multimap for equality.
+ *
+ * <p>Two {@code SetMultimap} instances are equal if, for each key, they
+ * contain the same values. Equality does not depend on the ordering of keys
+ * or values.
+ */
+ boolean equals(@Nullable Object obj);
+}
diff --git a/src/com/google/common/collect/Sets.java b/src/com/google/common/collect/Sets.java
new file mode 100644
index 0000000..78980bc
--- /dev/null
+++ b/src/com/google/common/collect/Sets.java
@@ -0,0 +1,729 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.collect.Collections2.FilteredCollection;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.Serializable;
+import java.util.AbstractSet;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.IdentityHashMap;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeMap;
+import java.util.TreeSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * Static utility methods pertaining to {@link Set} instances. Also see this
+ * class's counterparts {@link Lists} and {@link Maps}.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ */
+@GwtCompatible
+public final class Sets {
+ private Sets() {}
+
+ /**
+ * Returns an immutable set instance containing the given enum elements.
+ * Internally, the returned set will be backed by an {@link EnumSet}.
+ *
+ * <p>The iteration order of the returned set follows the enum's iteration
+ * order, not the order in which the elements are provided to the method.
+ *
+ * @param anElement one of the elements the set should contain
+ * @param otherElements the rest of the elements the set should contain
+ * @return an immutable set containing those elements, minus duplicates
+ */
+ // http://code.google.com/p/google-web-toolkit/issues/detail?id=3028
+ @GwtCompatible(serializable = true)
+ public static <E extends Enum<E>> ImmutableSet<E> immutableEnumSet(
+ E anElement, E... otherElements) {
+ return new ImmutableEnumSet<E>(EnumSet.of(anElement, otherElements));
+ }
+
+ /**
+ * Returns an immutable set instance containing the given enum elements.
+ * Internally, the returned set will be backed by an {@link EnumSet}.
+ *
+ * <p>The iteration order of the returned set follows the enum's iteration
+ * order, not the order in which the elements appear in the given collection.
+ *
+ * @param elements the elements, all of the same {@code enum} type, that the
+ * set should contain
+ * @return an immutable set containing those elements, minus duplicates
+ */
+ // http://code.google.com/p/google-web-toolkit/issues/detail?id=3028
+ @GwtCompatible(serializable = true)
+ public static <E extends Enum<E>> ImmutableSet<E> immutableEnumSet(
+ Iterable<E> elements) {
+ Iterator<E> iterator = elements.iterator();
+ if (!iterator.hasNext()) {
+ return ImmutableSet.of();
+ }
+ if (elements instanceof EnumSet) {
+ EnumSet<E> enumSetClone = EnumSet.copyOf((EnumSet<E>) elements);
+ return new ImmutableEnumSet<E>(enumSetClone);
+ }
+ E first = iterator.next();
+ EnumSet<E> set = EnumSet.of(first);
+ while (iterator.hasNext()) {
+ set.add(iterator.next());
+ }
+ return new ImmutableEnumSet<E>(set);
+ }
+
+ /**
+ * Returns a new {@code EnumSet} instance containing the given elements.
+ * Unlike {@link EnumSet#copyOf(Collection)}, this method does not produce an
+ * exception on an empty collection, and it may be called on any iterable, not
+ * just a {@code Collection}.
+ */
+ public static <E extends Enum<E>> EnumSet<E> newEnumSet(Iterable<E> iterable,
+ Class<E> elementType) {
+ /*
+ * TODO: noneOf() and addAll() will both throw NullPointerExceptions when
+ * appropriate. However, NullPointerTester will fail on this method because
+ * it passes in Class.class instead of an enum type. This means that, when
+ * iterable is null but elementType is not, noneOf() will throw a
+ * ClassCastException before addAll() has a chance to throw a
+ * NullPointerException. NullPointerTester considers this a failure.
+ * Ideally the test would be fixed, but it would require a special case for
+ * Class<E> where E extends Enum. Until that happens (if ever), leave
+ * checkNotNull() here. For now, contemplate the irony that checking
+ * elementType, the problem argument, is harmful, while checking iterable,
+ * the innocent bystander, is effective.
+ */
+ checkNotNull(iterable);
+ EnumSet<E> set = EnumSet.noneOf(elementType);
+ Iterables.addAll(set, iterable);
+ return set;
+ }
+
+ // HashSet
+
+ /**
+ * Creates a <i>mutable</i>, empty {@code HashSet} instance.
+ *
+ * <p><b>Note:</b> if mutability is not required, use {@link
+ * ImmutableSet#of()} instead.
+ *
+ * <p><b>Note:</b> if {@code E} is an {@link Enum} type, use {@link
+ * EnumSet#noneOf} instead.
+ *
+ * @return a new, empty {@code HashSet}
+ */
+ public static <E> HashSet<E> newHashSet() {
+ return new HashSet<E>();
+ }
+
+ /**
+ * Creates a <i>mutable</i> {@code HashSet} instance containing the given
+ * elements in unspecified order.
+ *
+ * <p><b>Note:</b> if mutability is not required and the elements are
+ * non-null, use {@link ImmutableSet#of(Object[])} instead.
+ *
+ * <p><b>Note:</b> if {@code E} is an {@link Enum} type, use {@link
+ * EnumSet#of(Enum, Enum[])} instead.
+ *
+ * @param elements the elements that the set should contain
+ * @return a new {@code HashSet} containing those elements (minus duplicates)
+ */
+ public static <E> HashSet<E> newHashSet(E... elements) {
+ int capacity = Maps.capacity(elements.length);
+ HashSet<E> set = new HashSet<E>(capacity);
+ Collections.addAll(set, elements);
+ return set;
+ }
+
+ /**
+ * Creates an empty {@code HashSet} instance with enough capacity to hold the
+ * specified number of elements without rehashing.
+ *
+ * @param expectedSize the expected size
+ * @return a new, empty {@code HashSet} with enough capacity to hold {@code
+ * expectedSize} elements without rehashing
+ * @throws IllegalArgumentException if {@code expectedSize} is negative
+ */
+ public static <E> HashSet<E> newHashSetWithExpectedSize(int expectedSize) {
+ return new HashSet<E>(Maps.capacity(expectedSize));
+ }
+
+ /**
+ * Creates a <i>mutable</i> {@code HashSet} instance containing the given
+ * elements in unspecified order.
+ *
+ * <p><b>Note:</b> if mutability is not required and the elements are
+ * non-null, use {@link ImmutableSet#copyOf(Iterable)} instead.
+ *
+ * <p><b>Note:</b> if {@code E} is an {@link Enum} type, use
+ * {@link #newEnumSet(Iterable, Class)} instead.
+ *
+ * @param elements the elements that the set should contain
+ * @return a new {@code HashSet} containing those elements (minus duplicates)
+ */
+ public static <E> HashSet<E> newHashSet(Iterable<? extends E> elements) {
+ if (elements instanceof Collection) {
+ @SuppressWarnings("unchecked")
+ Collection<? extends E> collection = (Collection<? extends E>) elements;
+ return new HashSet<E>(collection);
+ } else {
+ return newHashSet(elements.iterator());
+ }
+ }
+
+ /**
+ * Creates a <i>mutable</i> {@code HashSet} instance containing the given
+ * elements in unspecified order.
+ *
+ * <p><b>Note:</b> if mutability is not required and the elements are
+ * non-null, use {@link ImmutableSet#copyOf(Iterable)} instead.
+ *
+ * <p><b>Note:</b> if {@code E} is an {@link Enum} type, you should create an
+ * {@link EnumSet} instead.
+ *
+ * @param elements the elements that the set should contain
+ * @return a new {@code HashSet} containing those elements (minus duplicates)
+ */
+ public static <E> HashSet<E> newHashSet(Iterator<? extends E> elements) {
+ HashSet<E> set = newHashSet();
+ while (elements.hasNext()) {
+ set.add(elements.next());
+ }
+ return set;
+ }
+
+ // LinkedHashSet
+
+ /**
+ * Creates a <i>mutable</i>, empty {@code LinkedHashSet} instance.
+ *
+ * <p><b>Note:</b> if mutability is not required, use {@link
+ * ImmutableSet#of()} instead.
+ *
+ * @return a new, empty {@code LinkedHashSet}
+ */
+ public static <E> LinkedHashSet<E> newLinkedHashSet() {
+ return new LinkedHashSet<E>();
+ }
+
+ /**
+ * Creates a <i>mutable</i> {@code LinkedHashSet} instance containing the
+ * given elements in order.
+ *
+ * <p><b>Note:</b> if mutability is not required and the elements are
+ * non-null, use {@link ImmutableSet#copyOf(Iterable)} instead.
+ *
+ * @param elements the elements that the set should contain, in order
+ * @return a new {@code LinkedHashSet} containing those elements (minus
+ * duplicates)
+ */
+ public static <E> LinkedHashSet<E> newLinkedHashSet(
+ Iterable<? extends E> elements) {
+ if (elements instanceof Collection) {
+ @SuppressWarnings("unchecked")
+ Collection<? extends E> collection = (Collection<? extends E>) elements;
+ return new LinkedHashSet<E>(collection);
+ } else {
+ LinkedHashSet<E> set = newLinkedHashSet();
+ for (E element : elements) {
+ set.add(element);
+ }
+ return set;
+ }
+ }
+
+ // TreeSet
+
+ /**
+ * Creates a <i>mutable</i>, empty {@code TreeSet} instance sorted by the
+ * natural sort ordering of its elements.
+ *
+ * <p><b>Note:</b> if mutability is not required, use {@link
+ * ImmutableSortedSet#of()} instead.
+ *
+ * @return a new, empty {@code TreeSet}
+ */
+ @SuppressWarnings("unchecked") // allow ungenerified Comparable types
+ public static <E extends Comparable> TreeSet<E> newTreeSet() {
+ return new TreeSet<E>();
+ }
+
+ /**
+ * Creates a <i>mutable</i> {@code TreeSet} instance containing the given
+ * elements sorted by their natural ordering.
+ *
+ * <p><b>Note:</b> if mutability is not required, use {@link
+ * ImmutableSortedSet#copyOf(Iterable)} instead.
+ *
+ * <p><b>Note:</b> If {@code elements} is a {@code SortedSet} with an explicit
+ * comparator, this method has different behavior than
+ * {@link TreeSet#TreeSet(SortedSet)}, which returns a {@code TreeSet} with
+ * that comparator.
+ *
+ * @param elements the elements that the set should contain
+ * @return a new {@code TreeSet} containing those elements (minus duplicates)
+ */
+ @SuppressWarnings("unchecked") // allow ungenerified Comparable types
+ public static <E extends Comparable> TreeSet<E> newTreeSet(
+ Iterable<? extends E> elements) {
+ TreeSet<E> set = newTreeSet();
+ for (E element : elements) {
+ set.add(element);
+ }
+ return set;
+ }
+
+ /**
+ * Creates a <i>mutable</i>, empty {@code TreeSet} instance with the given
+ * comparator.
+ *
+ * <p><b>Note:</b> if mutability is not required, use {@code
+ * ImmutableSortedSet.orderedBy(comparator).build()} instead.
+ *
+ * @param comparator the comparator to use to sort the set
+ * @return a new, empty {@code TreeSet}
+ * @throws NullPointerException if {@code comparator} is null
+ */
+ public static <E> TreeSet<E> newTreeSet(Comparator<? super E> comparator) {
+ return new TreeSet<E>(checkNotNull(comparator));
+ }
+
+ /**
+ * Creates an {@code EnumSet} consisting of all enum values that are not in
+ * the specified collection. If the collection is an {@link EnumSet}, this
+ * method has the same behavior as {@link EnumSet#complementOf}. Otherwise,
+ * the specified collection must contain at least one element, in order to
+ * determine the element type. If the collection could be empty, use
+ * {@link #complementOf(Collection, Class)} instead of this method.
+ *
+ * @param collection the collection whose complement should be stored in the
+ * enum set
+ * @return a new, modifiable {@code EnumSet} containing all values of the enum
+ * that aren't present in the given collection
+ * @throws IllegalArgumentException if {@code collection} is not an
+ * {@code EnumSet} instance and contains no elements
+ */
+ public static <E extends Enum<E>> EnumSet<E> complementOf(
+ Collection<E> collection) {
+ if (collection instanceof EnumSet) {
+ return EnumSet.complementOf((EnumSet<E>) collection);
+ }
+ checkArgument(!collection.isEmpty(),
+ "collection is empty; use the other version of this method");
+ Class<E> type = collection.iterator().next().getDeclaringClass();
+ return makeComplementByHand(collection, type);
+ }
+
+ /**
+ * Creates an {@code EnumSet} consisting of all enum values that are not in
+ * the specified collection. This is equivalent to
+ * {@link EnumSet#complementOf}, but can act on any input collection, as long
+ * as the elements are of enum type.
+ *
+ * @param collection the collection whose complement should be stored in the
+ * {@code EnumSet}
+ * @param type the type of the elements in the set
+ * @return a new, modifiable {@code EnumSet} initially containing all the
+ * values of the enum not present in the given collection
+ */
+ public static <E extends Enum<E>> EnumSet<E> complementOf(
+ Collection<E> collection, Class<E> type) {
+ checkNotNull(collection);
+ return (collection instanceof EnumSet)
+ ? EnumSet.complementOf((EnumSet<E>) collection)
+ : makeComplementByHand(collection, type);
+ }
+
+ private static <E extends Enum<E>> EnumSet<E> makeComplementByHand(
+ Collection<E> collection, Class<E> type) {
+ EnumSet<E> result = EnumSet.allOf(type);
+ result.removeAll(collection);
+ return result;
+ }
+
+ /*
+ * Regarding newSetForMap() and SetFromMap:
+ *
+ * Written by Doug Lea with assistance from members of JCP JSR-166
+ * Expert Group and released to the public domain, as explained at
+ * http://creativecommons.org/licenses/publicdomain
+ */
+
+ /**
+ * Returns a set backed by the specified map. The resulting set displays
+ * the same ordering, concurrency, and performance characteristics as the
+ * backing map. In essence, this factory method provides a {@link Set}
+ * implementation corresponding to any {@link Map} implementation. There is no
+ * need to use this method on a {@link Map} implementation that already has a
+ * corresponding {@link Set} implementation (such as {@link HashMap} or
+ * {@link TreeMap}).
+ *
+ * <p>Each method invocation on the set returned by this method results in
+ * exactly one method invocation on the backing map or its <tt>keySet</tt>
+ * view, with one exception. The <tt>addAll</tt> method is implemented as a
+ * sequence of <tt>put</tt> invocations on the backing map.
+ *
+ * <p>The specified map must be empty at the time this method is invoked,
+ * and should not be accessed directly after this method returns. These
+ * conditions are ensured if the map is created empty, passed directly
+ * to this method, and no reference to the map is retained, as illustrated
+ * in the following code fragment: <pre> {@code
+ *
+ * Set<Object> identityHashSet = Sets.newSetFromMap(
+ * new IdentityHashMap<Object, Boolean>());}</pre>
+ *
+ * This method has the same behavior as the JDK 6 method
+ * {@code Collections.newSetFromMap()}. The returned set is serializable if
+ * the backing map is.
+ *
+ * @param map the backing map
+ * @return the set backed by the map
+ * @throws IllegalArgumentException if <tt>map</tt> is not empty
+ */
+ public static <E> Set<E> newSetFromMap(Map<E, Boolean> map) {
+ return new SetFromMap<E>(map);
+ }
+
+ private static class SetFromMap<E> extends AbstractSet<E>
+ implements Set<E>, Serializable {
+ private final Map<E, Boolean> m; // The backing map
+ private transient Set<E> s; // Its keySet
+
+ SetFromMap(Map<E, Boolean> map) {
+ checkArgument(map.isEmpty(), "Map is non-empty");
+ m = map;
+ s = map.keySet();
+ }
+
+ @Override public void clear() {
+ m.clear();
+ }
+ @Override public int size() {
+ return m.size();
+ }
+ @Override public boolean isEmpty() {
+ return m.isEmpty();
+ }
+ @Override public boolean contains(Object o) {
+ return m.containsKey(o);
+ }
+ @Override public boolean remove(Object o) {
+ return m.remove(o) != null;
+ }
+ @Override public boolean add(E e) {
+ return m.put(e, Boolean.TRUE) == null;
+ }
+ @Override public Iterator<E> iterator() {
+ return s.iterator();
+ }
+ @Override public Object[] toArray() {
+ return s.toArray();
+ }
+ @Override public <T> T[] toArray(T[] a) {
+ return s.toArray(a);
+ }
+ @Override public String toString() {
+ return s.toString();
+ }
+ @Override public int hashCode() {
+ return s.hashCode();
+ }
+ @Override public boolean equals(@Nullable Object object) {
+ return this == object || this.s.equals(object);
+ }
+ @Override public boolean containsAll(Collection<?> c) {
+ return s.containsAll(c);
+ }
+ @Override public boolean removeAll(Collection<?> c) {
+ return s.removeAll(c);
+ }
+ @Override public boolean retainAll(Collection<?> c) {
+ return s.retainAll(c);
+ }
+
+ // addAll is the only inherited implementation
+
+ static final long serialVersionUID = 0;
+
+ private void readObject(ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+ s = m.keySet();
+ }
+ }
+
+ /**
+ * An unmodifiable view of a set which may be backed by other sets; this view
+ * will change as the backing sets do. Contains methods to copy the data into
+ * a new set which will then remain stable. There is usually no reason to
+ * retain a reference of type {@code SetView}; typically, you either use it
+ * as a plain {@link Set}, or immediately invoke {@link #immutableCopy} or
+ * {@link #copyInto} and forget the {@code SetView} itself.
+ */
+ public abstract static class SetView<E> extends AbstractSet<E> {
+ private SetView() {} // no subclasses but our own
+
+ /**
+ * Returns an immutable copy of the current contents of this set view.
+ * Does not support null elements.
+ *
+ * <p><b>Warning:</b> this may have unexpected results if a backing set of
+ * this view uses a nonstandard notion of equivalence, for example if it is
+ * a {@link TreeSet} using a comparator that is inconsistent with {@link
+ * Object#equals(Object)}.
+ */
+ public ImmutableSet<E> immutableCopy() {
+ return ImmutableSet.copyOf(this);
+ }
+
+ /**
+ * Copies the current contents of this set view into an existing set. This
+ * method has equivalent behavior to {@code set.addAll(this)}, assuming that
+ * all the sets involved are based on the same notion of equivalence.
+ */
+ // Note: S should logically extend Set<? super E> but can't due to either
+ // some javac bug or some weirdness in the spec, not sure which.
+ public <S extends Set<E>> S copyInto(S set) {
+ set.addAll(this);
+ return set;
+ }
+ }
+
+ /**
+ * Returns an unmodifiable <b>view</b> of the union of two sets. The returned
+ * set contains all elements that are contained in either backing set.
+ * Iterating over the returned set iterates first over all the elements of
+ * {@code set1}, then over each element of {@code set2}, in order, that is not
+ * contained in {@code set1}.
+ *
+ * <p>Results are undefined if {@code set1} and {@code set2} are sets based on
+ * different equivalence relations (as {@link HashSet}, {@link TreeSet}, and
+ * the {@link Map#keySet} of an {@link IdentityHashMap} all are).
+ *
+ * <p><b>Note:</b> The returned view performs better when {@code set1} is the
+ * smaller of the two sets. If you have reason to believe one of your sets
+ * will generally be smaller than the other, pass it first.
+ */
+ public static <E> SetView<E> union(
+ final Set<? extends E> set1, final Set<? extends E> set2) {
+ checkNotNull(set1, "set1");
+ checkNotNull(set2, "set2");
+
+ // TODO: once we have OrderedIterators, check if these are compatible
+ // sorted sets and use that instead if so
+
+ final Set<? extends E> set2minus1 = difference(set2, set1);
+
+ return new SetView<E>() {
+ @Override public int size() {
+ return set1.size() + set2minus1.size();
+ }
+ @Override public boolean isEmpty() {
+ return set1.isEmpty() && set2.isEmpty();
+ }
+ @Override public Iterator<E> iterator() {
+ return Iterators.unmodifiableIterator(
+ Iterators.concat(set1.iterator(), set2minus1.iterator()));
+ }
+ @Override public boolean contains(Object object) {
+ return set1.contains(object) || set2.contains(object);
+ }
+ @Override public <S extends Set<E>> S copyInto(S set) {
+ set.addAll(set1);
+ set.addAll(set2);
+ return set;
+ }
+ @Override public ImmutableSet<E> immutableCopy() {
+ return new ImmutableSet.Builder<E>()
+ .addAll(set1).addAll(set2).build();
+ }
+ };
+ }
+
+ /**
+ * Returns an unmodifiable <b>view</b> of the intersection of two sets. The
+ * returned set contains all elements that are contained by both backing sets.
+ * The iteration order of the returned set matches that of {@code set1}.
+ *
+ * <p>Results are undefined if {@code set1} and {@code set2} are sets based
+ * on different equivalence relations (as {@code HashSet}, {@code TreeSet},
+ * and the keySet of an {@code IdentityHashMap} all are).
+ *
+ * <p><b>Note:</b> The returned view performs slightly better when {@code
+ * set1} is the smaller of the two sets. If you have reason to believe one of
+ * your sets will generally be smaller than the other, pass it first.
+ * Unfortunately, since this method sets the generic type of the returned set
+ * based on the type of the first set passed, this could in rare cases force
+ * you to make a cast, for example: <pre> {@code
+ *
+ * Set<Object> aFewBadObjects = ...
+ * Set<String> manyBadStrings = ...
+ *
+ * // impossible for a non-String to be in the intersection
+ * SuppressWarnings("unchecked")
+ * Set<String> badStrings = (Set) Sets.intersection(
+ * aFewBadObjects, manyBadStrings);}</pre>
+ *
+ * This is unfortunate, but should come up only very rarely.
+ */
+ public static <E> SetView<E> intersection(
+ final Set<E> set1, final Set<?> set2) {
+ checkNotNull(set1, "set1");
+ checkNotNull(set2, "set2");
+
+ // TODO: once we have OrderedIterators, check if these are compatible
+ // sorted sets and use that instead if so
+
+ final Predicate<Object> inSet2 = Predicates.in(set2);
+ return new SetView<E>() {
+ @Override public Iterator<E> iterator() {
+ return Iterators.filter(set1.iterator(), inSet2);
+ }
+ @Override public int size() {
+ return Iterators.size(iterator());
+ }
+ @Override public boolean isEmpty() {
+ return !iterator().hasNext();
+ }
+ @Override public boolean contains(Object object) {
+ return set1.contains(object) && set2.contains(object);
+ }
+ @Override public boolean containsAll(Collection<?> collection) {
+ return set1.containsAll(collection)
+ && set2.containsAll(collection);
+ }
+ };
+ }
+
+ /**
+ * Returns an unmodifiable <b>view</b> of the difference of two sets. The
+ * returned set contains all elements that are contained by {@code set1} and
+ * not contained by {@code set2}. {@code set2} may also contain elements not
+ * present in {@code set1}; these are simply ignored. The iteration order of
+ * the returned set matches that of {@code set1}.
+ *
+ * <p>Results are undefined if {@code set1} and {@code set2} are sets based
+ * on different equivalence relations (as {@code HashSet}, {@code TreeSet},
+ * and the keySet of an {@code IdentityHashMap} all are).
+ */
+ public static <E> SetView<E> difference(
+ final Set<E> set1, final Set<?> set2) {
+ checkNotNull(set1, "set1");
+ checkNotNull(set2, "set2");
+
+ // TODO: once we have OrderedIterators, check if these are compatible
+ // sorted sets and use that instead if so
+
+ final Predicate<Object> notInSet2 = Predicates.not(Predicates.in(set2));
+ return new SetView<E>() {
+ @Override public Iterator<E> iterator() {
+ return Iterators.filter(set1.iterator(), notInSet2);
+ }
+ @Override public int size() {
+ return Iterators.size(iterator());
+ }
+ @Override public boolean isEmpty() {
+ return set2.containsAll(set1);
+ }
+ @Override public boolean contains(Object element) {
+ return set1.contains(element) && !set2.contains(element);
+ }
+ };
+ }
+
+ /**
+ * Returns the elements of {@code unfiltered} that satisfy a predicate. The
+ * returned set is a live view of {@code unfiltered}; changes to one affect
+ * the other.
+ *
+ * <p>The resulting set's iterator does not support {@code remove()}, but all
+ * other set methods are supported. The set's {@code add()} and
+ * {@code addAll()} methods throw an {@link IllegalArgumentException} if an
+ * element that doesn't satisfy the predicate is provided. When methods such
+ * as {@code removeAll()} and {@code clear()} are called on the filtered set,
+ * only elements that satisfy the filter will be removed from the underlying
+ * collection.
+ *
+ * <p>The returned set isn't threadsafe or serializable, even if
+ * {@code unfiltered} is.
+ *
+ * <p>Many of the filtered set's methods, such as {@code size()}, iterate
+ * across every element in the underlying set and determine which elements
+ * satisfy the filter. When a live view is <i>not</i> needed, it may be faster
+ * to copy {@code Iterables.filter(unfiltered, predicate)} and use the copy.
+ */
+ public static <E> Set<E> filter(
+ Set<E> unfiltered, Predicate<? super E> predicate) {
+ if (unfiltered instanceof FilteredSet) {
+ // Support clear(), removeAll(), and retainAll() when filtering a filtered
+ // collection.
+ FilteredSet<E> filtered = (FilteredSet<E>) unfiltered;
+ Predicate<E> combinedPredicate
+ = Predicates.<E>and(filtered.predicate, predicate);
+ return new FilteredSet<E>(
+ (Set<E>) filtered.unfiltered, combinedPredicate);
+ }
+
+ return new FilteredSet<E>(
+ checkNotNull(unfiltered), checkNotNull(predicate));
+ }
+
+ private static class FilteredSet<E> extends FilteredCollection<E>
+ implements Set<E> {
+ FilteredSet(Set<E> unfiltered, Predicate<? super E> predicate) {
+ super(unfiltered, predicate);
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ return Collections2.setEquals(this, object);
+ }
+
+ @Override public int hashCode() {
+ return hashCodeImpl(this);
+ }
+ }
+
+ /**
+ * Calculates and returns the hash code of {@code s}.
+ */
+ static int hashCodeImpl(Set<?> s) {
+ int hashCode = 0;
+ for (Object o : s) {
+ hashCode += o != null ? o.hashCode() : 0;
+ }
+ return hashCode;
+ }
+}
diff --git a/src/com/google/common/collect/SingletonImmutableList.java b/src/com/google/common/collect/SingletonImmutableList.java
new file mode 100644
index 0000000..ec3bf1f
--- /dev/null
+++ b/src/com/google/common/collect/SingletonImmutableList.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Preconditions;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.ListIterator;
+
+import javax.annotation.Nullable;
+
+/**
+ * Implementation of {@link ImmutableList} with exactly one element.
+ *
+ * @author Hayward Chan
+ */
+@GwtCompatible(serializable = true)
+@SuppressWarnings("serial") // uses writeReplace(), not default serialization
+final class SingletonImmutableList<E> extends ImmutableList<E> {
+ final transient E element;
+
+ SingletonImmutableList(E element) {
+ this.element = checkNotNull(element);
+ }
+
+ public E get(int index) {
+ Preconditions.checkElementIndex(index, 1);
+ return element;
+ }
+
+ @Override public int indexOf(@Nullable Object object) {
+ return element.equals(object) ? 0 : -1;
+ }
+
+ @Override public UnmodifiableIterator<E> iterator() {
+ return Iterators.singletonIterator(element);
+ }
+
+ @Override public int lastIndexOf(@Nullable Object object) {
+ return element.equals(object) ? 0 : -1;
+ }
+
+ public ListIterator<E> listIterator() {
+ return listIterator(0);
+ }
+
+ public ListIterator<E> listIterator(final int start) {
+ // suboptimal but not worth optimizing.
+ return Collections.singletonList(element).listIterator(start);
+ }
+
+ public int size() {
+ return 1;
+ }
+
+ @Override public ImmutableList<E> subList(int fromIndex, int toIndex) {
+ Preconditions.checkPositionIndexes(fromIndex, toIndex, 1);
+ return (fromIndex == toIndex) ? ImmutableList.<E>of() : this;
+ }
+
+ @Override public boolean contains(@Nullable Object object) {
+ return element.equals(object);
+ }
+
+ @Override public boolean equals(Object object) {
+ if (object == this) {
+ return true;
+ }
+ if (object instanceof List) {
+ List<?> that = (List<?>) object;
+ return that.size() == 1 && element.equals(that.get(0));
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ // not caching hash code since it could change if the element is mutable
+ // in a way that modifies its hash code.
+ return 31 + element.hashCode();
+ }
+
+ @Override public boolean isEmpty() {
+ return false;
+ }
+
+ @Override public Object[] toArray() {
+ return new Object[] { element };
+ }
+
+ @Override public <T> T[] toArray(T[] array) {
+ if (array.length == 0) {
+ array = ObjectArrays.newArray(array, 1);
+ } else if (array.length > 1) {
+ array[1] = null;
+ }
+ // Writes will produce ArrayStoreException when the toArray() doc requires.
+ Object[] objectArray = array;
+ objectArray[0] = element;
+ return array;
+ }
+}
diff --git a/src/com/google/common/collect/SingletonImmutableMap.java b/src/com/google/common/collect/SingletonImmutableMap.java
new file mode 100644
index 0000000..c69c414
--- /dev/null
+++ b/src/com/google/common/collect/SingletonImmutableMap.java
@@ -0,0 +1,151 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * Implementation of {@link ImmutableMap} with exactly one entry.
+ *
+ * @author Jesse Wilson
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(serializable = true)
+@SuppressWarnings("serial") // uses writeReplace(), not default serialization
+final class SingletonImmutableMap<K, V> extends ImmutableMap<K, V> {
+ final transient K singleKey;
+ final transient V singleValue;
+
+ private transient Entry<K, V> entry;
+
+ SingletonImmutableMap(K singleKey, V singleValue) {
+ this.singleKey = singleKey;
+ this.singleValue = singleValue;
+ }
+
+ SingletonImmutableMap(Entry<K, V> entry) {
+ this.entry = entry;
+ this.singleKey = entry.getKey();
+ this.singleValue = entry.getValue();
+ }
+
+ private Entry<K, V> entry() {
+ Entry<K, V> e = entry;
+ return (e == null)
+ ? (entry = Maps.immutableEntry(singleKey, singleValue)) : e;
+ }
+
+ @Override public V get(Object key) {
+ return singleKey.equals(key) ? singleValue : null;
+ }
+
+ public int size() {
+ return 1;
+ }
+
+ @Override public boolean isEmpty() {
+ return false;
+ }
+
+ @Override public boolean containsKey(Object key) {
+ return singleKey.equals(key);
+ }
+
+ @Override public boolean containsValue(Object value) {
+ return singleValue.equals(value);
+ }
+
+ private transient ImmutableSet<Entry<K, V>> entrySet;
+
+ @Override public ImmutableSet<Entry<K, V>> entrySet() {
+ ImmutableSet<Entry<K, V>> es = entrySet;
+ return (es == null) ? (entrySet = ImmutableSet.of(entry())) : es;
+ }
+
+ private transient ImmutableSet<K> keySet;
+
+ @Override public ImmutableSet<K> keySet() {
+ ImmutableSet<K> ks = keySet;
+ return (ks == null) ? (keySet = ImmutableSet.of(singleKey)) : ks;
+ }
+
+ private transient ImmutableCollection<V> values;
+
+ @Override public ImmutableCollection<V> values() {
+ ImmutableCollection<V> v = values;
+ return (v == null) ? (values = new Values<V>(singleValue)) : v;
+ }
+
+ @SuppressWarnings("serial") // uses writeReplace(), not default serialization
+ private static class Values<V> extends ImmutableCollection<V> {
+ final V singleValue;
+
+ Values(V singleValue) {
+ this.singleValue = singleValue;
+ }
+
+ @Override public boolean contains(Object object) {
+ return singleValue.equals(object);
+ }
+
+ @Override public boolean isEmpty() {
+ return false;
+ }
+
+ public int size() {
+ return 1;
+ }
+
+ @Override public UnmodifiableIterator<V> iterator() {
+ return Iterators.singletonIterator(singleValue);
+ }
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ if (object == this) {
+ return true;
+ }
+ if (object instanceof Map) {
+ Map<?, ?> that = (Map<?, ?>) object;
+ if (that.size() != 1) {
+ return false;
+ }
+ Entry<?, ?> entry = that.entrySet().iterator().next();
+ return singleKey.equals(entry.getKey())
+ && singleValue.equals(entry.getValue());
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ return singleKey.hashCode() ^ singleValue.hashCode();
+ }
+
+ @Override public String toString() {
+ return new StringBuilder()
+ .append('{')
+ .append(singleKey.toString())
+ .append('=')
+ .append(singleValue.toString())
+ .append('}')
+ .toString();
+ }
+}
diff --git a/src/com/google/common/collect/SingletonImmutableSet.java b/src/com/google/common/collect/SingletonImmutableSet.java
new file mode 100644
index 0000000..952f52c
--- /dev/null
+++ b/src/com/google/common/collect/SingletonImmutableSet.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Preconditions;
+
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * Implementation of {@link ImmutableSet} with exactly one element.
+ *
+ * @author Kevin Bourrillion
+ * @author Nick Kralevich
+ */
+@GwtCompatible(serializable = true)
+@SuppressWarnings("serial") // uses writeReplace(), not default serialization
+final class SingletonImmutableSet<E> extends ImmutableSet<E> {
+ final transient E element;
+
+ // Non-volatile because:
+ // - Integer is immutable and thus thread-safe;
+ // - no problems if one thread overwrites the cachedHashCode from another.
+ private transient Integer cachedHashCode;
+
+ SingletonImmutableSet(E element) {
+ this.element = Preconditions.checkNotNull(element);
+ }
+
+ SingletonImmutableSet(E element, int hashCode) {
+ // Guaranteed to be non-null by the presence of the pre-computed hash code.
+ this.element = element;
+ cachedHashCode = hashCode;
+ }
+
+ public int size() {
+ return 1;
+ }
+
+ @Override public boolean isEmpty() {
+ return false;
+ }
+
+ @Override public boolean contains(Object target) {
+ return element.equals(target);
+ }
+
+ @Override public UnmodifiableIterator<E> iterator() {
+ return Iterators.singletonIterator(element);
+ }
+
+ @Override public Object[] toArray() {
+ return new Object[] { element };
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override public <T> T[] toArray(T[] array) {
+ if (array.length == 0) {
+ array = ObjectArrays.newArray(array, 1);
+ } else if (array.length > 1) {
+ array[1] = null;
+ }
+ // Writes will produce ArrayStoreException when the toArray() doc requires.
+ Object[] objectArray = array;
+ objectArray[0] = element;
+ return array;
+ }
+
+ @Override public boolean equals(@Nullable Object object) {
+ if (object == this) {
+ return true;
+ }
+ if (object instanceof Set) {
+ Set<?> that = (Set<?>) object;
+ return that.size() == 1 && element.equals(that.iterator().next());
+ }
+ return false;
+ }
+
+ @Override public final int hashCode() {
+ Integer code = cachedHashCode;
+ if (code == null) {
+ return cachedHashCode = element.hashCode();
+ }
+ return code;
+ }
+
+ @Override boolean isHashCodeFast() {
+ return false;
+ }
+
+ @Override public String toString() {
+ String elementToString = element.toString();
+ return new StringBuilder(elementToString.length() + 2)
+ .append('[')
+ .append(elementToString)
+ .append(']')
+ .toString();
+ }
+}
diff --git a/src/com/google/common/collect/SortedSetMultimap.java b/src/com/google/common/collect/SortedSetMultimap.java
new file mode 100644
index 0000000..8492194
--- /dev/null
+++ b/src/com/google/common/collect/SortedSetMultimap.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * A {@code SetMultimap} whose set of values for a given key are kept sorted;
+ * that is, they comprise a {@link SortedSet}. It cannot hold duplicate
+ * key-value pairs; adding a key-value pair that's already in the multimap has
+ * no effect. This interface does not specify the ordering of the multimap's
+ * keys.
+ *
+ * <p>The {@link #get}, {@link #removeAll}, and {@link #replaceValues} methods
+ * each return a {@link SortedSet} of values, while {@link Multimap#entries()}
+ * returns a {@link Set} of map entries. Though the method signature doesn't say
+ * so explicitly, the map returned by {@link #asMap} has {@code SortedSet}
+ * values.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+public interface SortedSetMultimap<K, V> extends SetMultimap<K, V> {
+ /**
+ * Returns a collection view of all values associated with a key. If no
+ * mappings in the multimap have the provided key, an empty collection is
+ * returned.
+ *
+ * <p>Changes to the returned collection will update the underlying multimap,
+ * and vice versa.
+ *
+ * <p>Because a {@code SortedSetMultimap} has unique sorted values for a given
+ * key, this method returns a {@link SortedSet}, instead of the
+ * {@link java.util.Collection} specified in the {@link Multimap} interface.
+ */
+ SortedSet<V> get(@Nullable K key);
+
+ /**
+ * Removes all values associated with a given key.
+ *
+ * <p>Because a {@code SortedSetMultimap} has unique sorted values for a given
+ * key, this method returns a {@link SortedSet}, instead of the
+ * {@link java.util.Collection} specified in the {@link Multimap} interface.
+ */
+ SortedSet<V> removeAll(@Nullable Object key);
+
+ /**
+ * Stores a collection of values with the same key, replacing any existing
+ * values for that key.
+ *
+ * <p>Because a {@code SortedSetMultimap} has unique sorted values for a given
+ * key, this method returns a {@link SortedSet}, instead of the
+ * {@link java.util.Collection} specified in the {@link Multimap} interface.
+ *
+ * <p>Any duplicates in {@code values} will be stored in the multimap once.
+ */
+ SortedSet<V> replaceValues(K key, Iterable<? extends V> values);
+
+ /**
+ * Returns a map view that associates each key with the corresponding values
+ * in the multimap. Changes to the returned map, such as element removal,
+ * will update the underlying multimap. The map never supports
+ * {@code setValue()} on the map entries, {@code put}, or {@code putAll}.
+ *
+ * <p>The collections returned by {@code asMap().get(Object)} have the same
+ * behavior as those returned by {@link #get}.
+ *
+ * <p>Though the method signature doesn't say so explicitly, the returned map
+ * has {@link SortedSet} values.
+ */
+ Map<K, Collection<V>> asMap();
+
+ /**
+ * Returns the comparator that orders the multimap values, with a {@code null}
+ * indicating that natural ordering is used.
+ */
+ Comparator<? super V> valueComparator();
+}
diff --git a/src/com/google/common/collect/Synchronized.java b/src/com/google/common/collect/Synchronized.java
new file mode 100644
index 0000000..7785fae
--- /dev/null
+++ b/src/com/google/common/collect/Synchronized.java
@@ -0,0 +1,1366 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.RandomAccess;
+import java.util.Set;
+import java.util.SortedSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * Synchronized collection views. The returned synchronized collection views are
+ * serializable if the backing collection and the mutex are serializable.
+ *
+ * <p>If a {@code null} is passed as the {@code mutex} parameter to any of this
+ * class's top-level methods or inner class constructors, the created object
+ * uses itself as the synchronization mutex.
+ *
+ * <p>This class should be used by other collection classes only.
+ *
+ * @author Mike Bostock
+ * @author Jared Levy
+ */
+@GwtCompatible
+final class Synchronized {
+ private Synchronized() {}
+
+ /** Abstract base class for synchronized views. */
+ static class SynchronizedObject implements Serializable {
+ private final Object delegate;
+ protected final Object mutex;
+
+ public SynchronizedObject(Object delegate, @Nullable Object mutex) {
+ this.delegate = checkNotNull(delegate);
+ this.mutex = (mutex == null) ? this : mutex;
+ }
+
+ protected Object delegate() {
+ return delegate;
+ }
+
+ // No equals and hashCode; see ForwardingObject for details.
+
+ @Override public String toString() {
+ synchronized (mutex) {
+ return delegate.toString();
+ }
+ }
+
+ // Serialization invokes writeObject only when it's private.
+ // The SynchronizedObject subclasses don't need a writeObject method since
+ // they don't contain any non-transient member variables, while the
+ // following writeObject() handles the SynchronizedObject members.
+
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ synchronized (mutex) {
+ stream.defaultWriteObject();
+ }
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Returns a synchronized (thread-safe) collection backed by the specified
+ * collection using the specified mutex. In order to guarantee serial access,
+ * it is critical that <b>all</b> access to the backing collection is
+ * accomplished through the returned collection.
+ *
+ * <p>It is imperative that the user manually synchronize on the specified
+ * mutex when iterating over the returned collection: <pre> {@code
+ *
+ * Collection<E> s = Synchronized.collection(
+ * new HashSet<E>(), mutex);
+ * ...
+ * synchronized (mutex) {
+ * Iterator<E> i = s.iterator(); // Must be in synchronized block
+ * while (i.hasNext()) {
+ * foo(i.next());
+ * }
+ * }}</pre>
+ *
+ * Failure to follow this advice may result in non-deterministic behavior.
+ *
+ * @param collection the collection to be wrapped in a synchronized view
+ * @return a synchronized view of the specified collection
+ */
+ static <E> Collection<E> collection(
+ Collection<E> collection, @Nullable Object mutex) {
+ return new SynchronizedCollection<E>(collection, mutex);
+ }
+
+ /** @see Synchronized#collection */
+ static class SynchronizedCollection<E> extends SynchronizedObject
+ implements Collection<E> {
+ public SynchronizedCollection(
+ Collection<E> delegate, @Nullable Object mutex) {
+ super(delegate, mutex);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override protected Collection<E> delegate() {
+ return (Collection<E>) super.delegate();
+ }
+
+ public boolean add(E e) {
+ synchronized (mutex) {
+ return delegate().add(e);
+ }
+ }
+
+ public boolean addAll(Collection<? extends E> c) {
+ synchronized (mutex) {
+ return delegate().addAll(c);
+ }
+ }
+
+ public void clear() {
+ synchronized (mutex) {
+ delegate().clear();
+ }
+ }
+
+ public boolean contains(Object o) {
+ synchronized (mutex) {
+ return delegate().contains(o);
+ }
+ }
+
+ public boolean containsAll(Collection<?> c) {
+ synchronized (mutex) {
+ return delegate().containsAll(c);
+ }
+ }
+
+ public boolean isEmpty() {
+ synchronized (mutex) {
+ return delegate().isEmpty();
+ }
+ }
+
+ public Iterator<E> iterator() {
+ return delegate().iterator(); // manually synchronized
+ }
+
+ public boolean remove(Object o) {
+ synchronized (mutex) {
+ return delegate().remove(o);
+ }
+ }
+
+ public boolean removeAll(Collection<?> c) {
+ synchronized (mutex) {
+ return delegate().removeAll(c);
+ }
+ }
+
+ public boolean retainAll(Collection<?> c) {
+ synchronized (mutex) {
+ return delegate().retainAll(c);
+ }
+ }
+
+ public int size() {
+ synchronized (mutex) {
+ return delegate().size();
+ }
+ }
+
+ public Object[] toArray() {
+ synchronized (mutex) {
+ return delegate().toArray();
+ }
+ }
+
+ public <T> T[] toArray(T[] a) {
+ synchronized (mutex) {
+ return delegate().toArray(a);
+ }
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Returns a synchronized (thread-safe) set backed by the specified set using
+ * the specified mutex. In order to guarantee serial access, it is critical
+ * that <b>all</b> access to the backing set is accomplished through the
+ * returned set.
+ *
+ * <p>It is imperative that the user manually synchronize on the specified
+ * mutex when iterating over the returned set: <pre> {@code
+ *
+ * Set<E> s = Synchronized.set(new HashSet<E>(), mutex);
+ * ...
+ * synchronized (mutex) {
+ * Iterator<E> i = s.iterator(); // Must be in synchronized block
+ * while (i.hasNext()) {
+ * foo(i.next());
+ * }
+ * }}</pre>
+ *
+ * Failure to follow this advice may result in non-deterministic behavior.
+ *
+ * @param set the set to be wrapped in a synchronized view
+ * @return a synchronized view of the specified set
+ */
+ public static <E> Set<E> set(Set<E> set, @Nullable Object mutex) {
+ return new SynchronizedSet<E>(set, mutex);
+ }
+
+ /** @see Synchronized#set */
+ static class SynchronizedSet<E> extends SynchronizedCollection<E>
+ implements Set<E> {
+ public SynchronizedSet(Set<E> delegate, @Nullable Object mutex) {
+ super(delegate, mutex);
+ }
+
+ @Override protected Set<E> delegate() {
+ return (Set<E>) super.delegate();
+ }
+
+ @Override public boolean equals(Object o) {
+ if (o == this) {
+ return true;
+ }
+ synchronized (mutex) {
+ return delegate().equals(o);
+ }
+ }
+
+ @Override public int hashCode() {
+ synchronized (mutex) {
+ return delegate().hashCode();
+ }
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Returns a synchronized (thread-safe) sorted set backed by the specified
+ * sorted set using the specified mutex. In order to guarantee serial access,
+ * it is critical that <b>all</b> access to the backing sorted set is
+ * accomplished through the returned sorted set.
+ *
+ * <p>It is imperative that the user manually synchronize on the specified
+ * mutex when iterating over the returned sorted set: <pre> {@code
+ *
+ * SortedSet<E> s = Synchronized.sortedSet(
+ * new TreeSet<E>(), mutex);
+ * ...
+ * synchronized (mutex) {
+ * Iterator<E> i = s.iterator(); // Must be in synchronized block
+ * while (i.hasNext()) {
+ * foo(i.next());
+ * }
+ * }}</pre>
+ *
+ * Failure to follow this advice may result in non-deterministic behavior.
+ *
+ * @param set the sorted set to be wrapped in a synchronized view
+ * @return a synchronized view of the specified sorted set
+ */
+ static <E> SortedSet<E> sortedSet(SortedSet<E> set, @Nullable Object mutex) {
+ return new SynchronizedSortedSet<E>(set, mutex);
+ }
+
+ /** @see Synchronized#sortedSet */
+ static class SynchronizedSortedSet<E> extends SynchronizedSet<E>
+ implements SortedSet<E> {
+ public SynchronizedSortedSet(
+ SortedSet<E> delegate, @Nullable Object mutex) {
+ super(delegate, mutex);
+ }
+
+ @Override protected SortedSet<E> delegate() {
+ return (SortedSet<E>) super.delegate();
+ }
+
+ public Comparator<? super E> comparator() {
+ synchronized (mutex) {
+ return delegate().comparator();
+ }
+ }
+
+ public SortedSet<E> subSet(E fromElement, E toElement) {
+ synchronized (mutex) {
+ return sortedSet(delegate().subSet(fromElement, toElement), mutex);
+ }
+ }
+
+ public SortedSet<E> headSet(E toElement) {
+ synchronized (mutex) {
+ return sortedSet(delegate().headSet(toElement), mutex);
+ }
+ }
+
+ public SortedSet<E> tailSet(E fromElement) {
+ synchronized (mutex) {
+ return sortedSet(delegate().tailSet(fromElement), mutex);
+ }
+ }
+
+ public E first() {
+ synchronized (mutex) {
+ return delegate().first();
+ }
+ }
+
+ public E last() {
+ synchronized (mutex) {
+ return delegate().last();
+ }
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Returns a synchronized (thread-safe) list backed by the specified list
+ * using the specified mutex. In order to guarantee serial access, it is
+ * critical that <b>all</b> access to the backing list is accomplished
+ * through the returned list.
+ *
+ * <p>It is imperative that the user manually synchronize on the specified
+ * mutex when iterating over the returned list: <pre> {@code
+ *
+ * List<E> l = Synchronized.list(new ArrayList<E>(), mutex);
+ * ...
+ * synchronized (mutex) {
+ * Iterator<E> i = l.iterator(); // Must be in synchronized block
+ * while (i.hasNext()) {
+ * foo(i.next());
+ * }
+ * }}</pre>
+ *
+ * Failure to follow this advice may result in non-deterministic behavior.
+ *
+ * <p>The returned list implements {@link RandomAccess} if the specified list
+ * implements {@code RandomAccess}.
+ *
+ * @param list the list to be wrapped in a synchronized view
+ * @return a synchronized view of the specified list
+ */
+ static <E> List<E> list(List<E> list, @Nullable Object mutex) {
+ return (list instanceof RandomAccess)
+ ? new SynchronizedRandomAccessList<E>(list, mutex)
+ : new SynchronizedList<E>(list, mutex);
+ }
+
+ /** @see Synchronized#list */
+ static class SynchronizedList<E> extends SynchronizedCollection<E>
+ implements List<E> {
+ public SynchronizedList(List<E> delegate, @Nullable Object mutex) {
+ super(delegate, mutex);
+ }
+
+ @Override protected List<E> delegate() {
+ return (List<E>) super.delegate();
+ }
+
+ public void add(int index, E element) {
+ synchronized (mutex) {
+ delegate().add(index, element);
+ }
+ }
+
+ public boolean addAll(int index, Collection<? extends E> c) {
+ synchronized (mutex) {
+ return delegate().addAll(index, c);
+ }
+ }
+
+ public E get(int index) {
+ synchronized (mutex) {
+ return delegate().get(index);
+ }
+ }
+
+ public int indexOf(Object o) {
+ synchronized (mutex) {
+ return delegate().indexOf(o);
+ }
+ }
+
+ public int lastIndexOf(Object o) {
+ synchronized (mutex) {
+ return delegate().lastIndexOf(o);
+ }
+ }
+
+ public ListIterator<E> listIterator() {
+ return delegate().listIterator(); // manually synchronized
+ }
+
+ public ListIterator<E> listIterator(int index) {
+ return delegate().listIterator(index); // manually synchronized
+ }
+
+ public E remove(int index) {
+ synchronized (mutex) {
+ return delegate().remove(index);
+ }
+ }
+
+ public E set(int index, E element) {
+ synchronized (mutex) {
+ return delegate().set(index, element);
+ }
+ }
+
+ @GwtIncompatible("List.subList")
+ public List<E> subList(int fromIndex, int toIndex) {
+ synchronized (mutex) {
+ return list(Platform.subList(delegate(), fromIndex, toIndex), mutex);
+ }
+ }
+
+ @Override public boolean equals(Object o) {
+ if (o == this) {
+ return true;
+ }
+ synchronized (mutex) {
+ return delegate().equals(o);
+ }
+ }
+
+ @Override public int hashCode() {
+ synchronized (mutex) {
+ return delegate().hashCode();
+ }
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ /** @see Synchronized#list */
+ static class SynchronizedRandomAccessList<E> extends SynchronizedList<E>
+ implements RandomAccess {
+ public SynchronizedRandomAccessList(List<E> list, @Nullable Object mutex) {
+ super(list, mutex);
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Returns a synchronized (thread-safe) multiset backed by the specified
+ * multiset using the specified mutex. In order to guarantee serial access, it
+ * is critical that <b>all</b> access to the backing multiset is accomplished
+ * through the returned multiset.
+ *
+ * <p>It is imperative that the user manually synchronize on the specified
+ * mutex when iterating over the returned multiset: <pre> {@code
+ *
+ * Multiset<E> s = Synchronized.multiset(
+ * HashMultiset.<E>create(), mutex);
+ * ...
+ * synchronized (mutex) {
+ * Iterator<E> i = s.iterator(); // Must be in synchronized block
+ * while (i.hasNext()) {
+ * foo(i.next());
+ * }
+ * }}</pre>
+ *
+ * Failure to follow this advice may result in non-deterministic behavior.
+ *
+ * @param multiset the multiset to be wrapped
+ * @return a synchronized view of the specified multiset
+ */
+ private static <E> Multiset<E> multiset(
+ Multiset<E> multiset, @Nullable Object mutex) {
+ return new SynchronizedMultiset<E>(multiset, mutex);
+ }
+
+ /** @see Synchronized#multiset */
+ static class SynchronizedMultiset<E> extends SynchronizedCollection<E>
+ implements Multiset<E> {
+ private transient Set<E> elementSet;
+ private transient Set<Entry<E>> entrySet;
+
+ public SynchronizedMultiset(Multiset<E> delegate, @Nullable Object mutex) {
+ super(delegate, mutex);
+ }
+
+ @Override protected Multiset<E> delegate() {
+ return (Multiset<E>) super.delegate();
+ }
+
+ public int count(Object o) {
+ synchronized (mutex) {
+ return delegate().count(o);
+ }
+ }
+
+ public int add(E e, int n) {
+ synchronized (mutex) {
+ return delegate().add(e, n);
+ }
+ }
+
+ public int remove(Object o, int n) {
+ synchronized (mutex) {
+ return delegate().remove(o, n);
+ }
+ }
+
+ public int setCount(E element, int count) {
+ synchronized (mutex) {
+ return delegate().setCount(element, count);
+ }
+ }
+
+ public boolean setCount(E element, int oldCount, int newCount) {
+ synchronized (mutex) {
+ return delegate().setCount(element, oldCount, newCount);
+ }
+ }
+
+ public Set<E> elementSet() {
+ synchronized (mutex) {
+ if (elementSet == null) {
+ elementSet = typePreservingSet(delegate().elementSet(), mutex);
+ }
+ return elementSet;
+ }
+ }
+
+ public Set<Entry<E>> entrySet() {
+ synchronized (mutex) {
+ if (entrySet == null) {
+ entrySet = typePreservingSet(delegate().entrySet(), mutex);
+ }
+ return entrySet;
+ }
+ }
+
+ @Override public boolean equals(Object o) {
+ if (o == this) {
+ return true;
+ }
+ synchronized (mutex) {
+ return delegate().equals(o);
+ }
+ }
+
+ @Override public int hashCode() {
+ synchronized (mutex) {
+ return delegate().hashCode();
+ }
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Returns a synchronized (thread-safe) multimap backed by the specified
+ * multimap using the specified mutex. In order to guarantee serial access, it
+ * is critical that <b>all</b> access to the backing multimap is accomplished
+ * through the returned multimap.
+ *
+ * <p>It is imperative that the user manually synchronize on the specified
+ * mutex when accessing any of the return multimap's collection views:
+ * <pre> {@code
+ *
+ * Multimap<K, V> m = Synchronized.multimap(
+ * HashMultimap.create(), mutex);
+ * ...
+ * Set<K> s = m.keySet(); // Needn't be in synchronized block
+ * ...
+ * synchronized (mutex) {
+ * Iterator<K> i = s.iterator(); // Must be in synchronized block
+ * while (i.hasNext()) {
+ * foo(i.next());
+ * }
+ * }}</pre>
+ *
+ * Failure to follow this advice may result in non-deterministic behavior.
+ *
+ * @param multimap the multimap to be wrapped in a synchronized view
+ * @return a synchronized view of the specified multimap
+ */
+ public static <K, V> Multimap<K, V> multimap(
+ Multimap<K, V> multimap, @Nullable Object mutex) {
+ return new SynchronizedMultimap<K, V>(multimap, mutex);
+ }
+
+ /** @see Synchronized#multimap */
+ private static class SynchronizedMultimap<K, V> extends SynchronizedObject
+ implements Multimap<K, V> {
+ transient Set<K> keySet;
+ transient Collection<V> valuesCollection;
+ transient Collection<Map.Entry<K, V>> entries;
+ transient Map<K, Collection<V>> asMap;
+ transient Multiset<K> keys;
+
+ @SuppressWarnings("unchecked")
+ @Override protected Multimap<K, V> delegate() {
+ return (Multimap<K, V>) super.delegate();
+ }
+
+ SynchronizedMultimap(Multimap<K, V> delegate, @Nullable Object mutex) {
+ super(delegate, mutex);
+ }
+
+ public int size() {
+ synchronized (mutex) {
+ return delegate().size();
+ }
+ }
+
+ public boolean isEmpty() {
+ synchronized (mutex) {
+ return delegate().isEmpty();
+ }
+ }
+
+ public boolean containsKey(Object key) {
+ synchronized (mutex) {
+ return delegate().containsKey(key);
+ }
+ }
+
+ public boolean containsValue(Object value) {
+ synchronized (mutex) {
+ return delegate().containsValue(value);
+ }
+ }
+
+ public boolean containsEntry(Object key, Object value) {
+ synchronized (mutex) {
+ return delegate().containsEntry(key, value);
+ }
+ }
+
+ public Collection<V> get(K key) {
+ synchronized (mutex) {
+ return typePreservingCollection(delegate().get(key), mutex);
+ }
+ }
+
+ public boolean put(K key, V value) {
+ synchronized (mutex) {
+ return delegate().put(key, value);
+ }
+ }
+
+ public boolean putAll(K key, Iterable<? extends V> values) {
+ synchronized (mutex) {
+ return delegate().putAll(key, values);
+ }
+ }
+
+ public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
+ synchronized (mutex) {
+ return delegate().putAll(multimap);
+ }
+ }
+
+ public Collection<V> replaceValues(K key, Iterable<? extends V> values) {
+ synchronized (mutex) {
+ return delegate().replaceValues(key, values); // copy not synchronized
+ }
+ }
+
+ public boolean remove(Object key, Object value) {
+ synchronized (mutex) {
+ return delegate().remove(key, value);
+ }
+ }
+
+ public Collection<V> removeAll(Object key) {
+ synchronized (mutex) {
+ return delegate().removeAll(key); // copy not synchronized
+ }
+ }
+
+ public void clear() {
+ synchronized (mutex) {
+ delegate().clear();
+ }
+ }
+
+ public Set<K> keySet() {
+ synchronized (mutex) {
+ if (keySet == null) {
+ keySet = typePreservingSet(delegate().keySet(), mutex);
+ }
+ return keySet;
+ }
+ }
+
+ public Collection<V> values() {
+ synchronized (mutex) {
+ if (valuesCollection == null) {
+ valuesCollection = collection(delegate().values(), mutex);
+ }
+ return valuesCollection;
+ }
+ }
+
+ public Collection<Map.Entry<K, V>> entries() {
+ synchronized (mutex) {
+ if (entries == null) {
+ entries = typePreservingCollection(delegate().entries(), mutex);
+ }
+ return entries;
+ }
+ }
+
+ public Map<K, Collection<V>> asMap() {
+ synchronized (mutex) {
+ if (asMap == null) {
+ asMap = new SynchronizedAsMap<K, V>(delegate().asMap(), mutex);
+ }
+ return asMap;
+ }
+ }
+
+ public Multiset<K> keys() {
+ synchronized (mutex) {
+ if (keys == null) {
+ keys = multiset(delegate().keys(), mutex);
+ }
+ return keys;
+ }
+ }
+
+ @Override public boolean equals(Object o) {
+ if (o == this) {
+ return true;
+ }
+ synchronized (mutex) {
+ return delegate().equals(o);
+ }
+ }
+
+ @Override public int hashCode() {
+ synchronized (mutex) {
+ return delegate().hashCode();
+ }
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Returns a synchronized (thread-safe) list multimap backed by the specified
+ * multimap using the specified mutex.
+ *
+ * <p>You must follow the warnings described for {@link #multimap}.
+ *
+ * @param multimap the multimap to be wrapped in a synchronized view
+ * @return a synchronized view of the specified multimap
+ */
+ public static <K, V> ListMultimap<K, V> listMultimap(
+ ListMultimap<K, V> multimap, @Nullable Object mutex) {
+ return new SynchronizedListMultimap<K, V>(multimap, mutex);
+ }
+
+ /** @see Synchronized#listMultimap */
+ private static class SynchronizedListMultimap<K, V>
+ extends SynchronizedMultimap<K, V> implements ListMultimap<K, V> {
+ SynchronizedListMultimap(
+ ListMultimap<K, V> delegate, @Nullable Object mutex) {
+ super(delegate, mutex);
+ }
+ @Override protected ListMultimap<K, V> delegate() {
+ return (ListMultimap<K, V>) super.delegate();
+ }
+ @Override public List<V> get(K key) {
+ synchronized (mutex) {
+ return list(delegate().get(key), mutex);
+ }
+ }
+ @Override public List<V> removeAll(Object key) {
+ synchronized (mutex) {
+ return delegate().removeAll(key); // copy not synchronized
+ }
+ }
+ @Override public List<V> replaceValues(
+ K key, Iterable<? extends V> values) {
+ synchronized (mutex) {
+ return delegate().replaceValues(key, values); // copy not synchronized
+ }
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Returns a synchronized (thread-safe) set multimap backed by the specified
+ * multimap using the specified mutex.
+ *
+ * <p>You must follow the warnings described for {@link #multimap}.
+ *
+ * @param multimap the multimap to be wrapped in a synchronized view
+ * @return a synchronized view of the specified multimap
+ */
+ public static <K, V> SetMultimap<K, V> setMultimap(
+ SetMultimap<K, V> multimap, @Nullable Object mutex) {
+ return new SynchronizedSetMultimap<K, V>(multimap, mutex);
+ }
+
+ /** @see Synchronized#setMultimap */
+ private static class SynchronizedSetMultimap<K, V>
+ extends SynchronizedMultimap<K, V> implements SetMultimap<K, V> {
+ transient Set<Map.Entry<K, V>> entrySet;
+ SynchronizedSetMultimap(
+ SetMultimap<K, V> delegate, @Nullable Object mutex) {
+ super(delegate, mutex);
+ }
+ @Override protected SetMultimap<K, V> delegate() {
+ return (SetMultimap<K, V>) super.delegate();
+ }
+ @Override public Set<V> get(K key) {
+ synchronized (mutex) {
+ return set(delegate().get(key), mutex);
+ }
+ }
+ @Override public Set<V> removeAll(Object key) {
+ synchronized (mutex) {
+ return delegate().removeAll(key); // copy not synchronized
+ }
+ }
+ @Override public Set<V> replaceValues(
+ K key, Iterable<? extends V> values) {
+ synchronized (mutex) {
+ return delegate().replaceValues(key, values); // copy not synchronized
+ }
+ }
+ @Override public Set<Map.Entry<K, V>> entries() {
+ synchronized (mutex) {
+ if (entrySet == null) {
+ entrySet = set(delegate().entries(), mutex);
+ }
+ return entrySet;
+ }
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Returns a synchronized (thread-safe) sorted set multimap backed by the
+ * specified multimap using the specified mutex.
+ *
+ * <p>You must follow the warnings described for {@link #multimap}.
+ *
+ * @param multimap the multimap to be wrapped in a synchronized view
+ * @return a synchronized view of the specified multimap
+ */
+ public static <K, V> SortedSetMultimap<K, V> sortedSetMultimap(
+ SortedSetMultimap<K, V> multimap, @Nullable Object mutex) {
+ return new SynchronizedSortedSetMultimap<K, V>(multimap, mutex);
+ }
+
+ /** @see Synchronized#sortedSetMultimap */
+ private static class SynchronizedSortedSetMultimap<K, V>
+ extends SynchronizedSetMultimap<K, V> implements SortedSetMultimap<K, V> {
+ SynchronizedSortedSetMultimap(
+ SortedSetMultimap<K, V> delegate, @Nullable Object mutex) {
+ super(delegate, mutex);
+ }
+ @Override protected SortedSetMultimap<K, V> delegate() {
+ return (SortedSetMultimap<K, V>) super.delegate();
+ }
+ @Override public SortedSet<V> get(K key) {
+ synchronized (mutex) {
+ return sortedSet(delegate().get(key), mutex);
+ }
+ }
+ @Override public SortedSet<V> removeAll(Object key) {
+ synchronized (mutex) {
+ return delegate().removeAll(key); // copy not synchronized
+ }
+ }
+ @Override public SortedSet<V> replaceValues(
+ K key, Iterable<? extends V> values) {
+ synchronized (mutex) {
+ return delegate().replaceValues(key, values); // copy not synchronized
+ }
+ }
+ public Comparator<? super V> valueComparator() {
+ synchronized (mutex) {
+ return delegate().valueComparator();
+ }
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Returns a synchronized (thread-safe) collection backed by the specified
+ * collection using the specified mutex. In order to guarantee serial access,
+ * it is critical that <b>all</b> access to the backing collection is
+ * accomplished through the returned collection.
+ *
+ * <p>It is imperative that the user manually synchronize on the specified
+ * mutex when iterating over the returned collection: <pre> {@code
+ *
+ * Collection<E> s = Synchronized.typePreservingCollection(
+ * new HashSet<E>(), mutex);
+ * ...
+ * synchronized (mutex) {
+ * Iterator<E> i = s.iterator(); // Must be in synchronized block
+ * while (i.hasNext()) {
+ * foo(i.next());
+ * }
+ * }}</pre>
+ *
+ * Failure to follow this advice may result in non-deterministic behavior.
+ *
+ * <p>If the specified collection is a {@code SortedSet}, {@code Set} or
+ * {@code List}, this method will behave identically to {@link #sortedSet},
+ * {@link #set} or {@link #list} respectively, in that order of specificity.
+ *
+ * @param collection the collection to be wrapped in a synchronized view
+ * @return a synchronized view of the specified collection
+ */
+ private static <E> Collection<E> typePreservingCollection(
+ Collection<E> collection, @Nullable Object mutex) {
+ if (collection instanceof SortedSet) {
+ return sortedSet((SortedSet<E>) collection, mutex);
+ } else if (collection instanceof Set) {
+ return set((Set<E>) collection, mutex);
+ } else if (collection instanceof List) {
+ return list((List<E>) collection, mutex);
+ } else {
+ return collection(collection, mutex);
+ }
+ }
+
+ /**
+ * Returns a synchronized (thread-safe) set backed by the specified set using
+ * the specified mutex. In order to guarantee serial access, it is critical
+ * that <b>all</b> access to the backing collection is accomplished through
+ * the returned collection.
+ *
+ * <p>It is imperative that the user manually synchronize on the specified
+ * mutex when iterating over the returned collection: <pre> {@code
+ *
+ * Set<E> s = Synchronized.typePreservingSet(
+ * new HashSet<E>(), mutex);
+ * ...
+ * synchronized (mutex) {
+ * Iterator<E> i = s.iterator(); // Must be in synchronized block
+ * while (i.hasNext()) {
+ * foo(i.next());
+ * }
+ * }}</pre>
+ *
+ * Failure to follow this advice may result in non-deterministic behavior.
+ *
+ * <p>If the specified collection is a {@code SortedSet} this method will
+ * behave identically to {@link #sortedSet}.
+ *
+ * @param set the set to be wrapped in a synchronized view
+ * @return a synchronized view of the specified set
+ */
+ public static <E> Set<E> typePreservingSet(
+ Set<E> set, @Nullable Object mutex) {
+ if (set instanceof SortedSet) {
+ return sortedSet((SortedSet<E>) set, mutex);
+ } else {
+ return set(set, mutex);
+ }
+ }
+
+ /** @see Synchronized#multimap */
+ static class SynchronizedAsMapEntries<K, V>
+ extends SynchronizedSet<Map.Entry<K, Collection<V>>> {
+ public SynchronizedAsMapEntries(
+ Set<Map.Entry<K, Collection<V>>> delegate, @Nullable Object mutex) {
+ super(delegate, mutex);
+ }
+
+ @Override public Iterator<Map.Entry<K, Collection<V>>> iterator() {
+ // Must be manually synchronized.
+ final Iterator<Map.Entry<K, Collection<V>>> iterator = super.iterator();
+ return new ForwardingIterator<Map.Entry<K, Collection<V>>>() {
+ @Override protected Iterator<Map.Entry<K, Collection<V>>> delegate() {
+ return iterator;
+ }
+
+ @Override public Map.Entry<K, Collection<V>> next() {
+ final Map.Entry<K, Collection<V>> entry = iterator.next();
+ return new ForwardingMapEntry<K, Collection<V>>() {
+ @Override protected Map.Entry<K, Collection<V>> delegate() {
+ return entry;
+ }
+ @Override public Collection<V> getValue() {
+ return typePreservingCollection(entry.getValue(), mutex);
+ }
+ };
+ }
+ };
+ }
+
+ // See Collections.CheckedMap.CheckedEntrySet for details on attacks.
+
+ @Override public Object[] toArray() {
+ synchronized (mutex) {
+ return ObjectArrays.toArrayImpl(delegate());
+ }
+ }
+ @Override public <T> T[] toArray(T[] array) {
+ synchronized (mutex) {
+ return ObjectArrays.toArrayImpl(delegate(), array);
+ }
+ }
+ @Override public boolean contains(Object o) {
+ synchronized (mutex) {
+ return Maps.containsEntryImpl(delegate(), o);
+ }
+ }
+ @Override public boolean containsAll(Collection<?> c) {
+ synchronized (mutex) {
+ return Collections2.containsAll(delegate(), c);
+ }
+ }
+ @Override public boolean equals(Object o) {
+ if (o == this) {
+ return true;
+ }
+ synchronized (mutex) {
+ return Collections2.setEquals(delegate(), o);
+ }
+ }
+ @Override public boolean remove(Object o) {
+ synchronized (mutex) {
+ return Maps.removeEntryImpl(delegate(), o);
+ }
+ }
+ @Override public boolean removeAll(Collection<?> c) {
+ synchronized (mutex) {
+ return Iterators.removeAll(delegate().iterator(), c);
+ }
+ }
+ @Override public boolean retainAll(Collection<?> c) {
+ synchronized (mutex) {
+ return Iterators.retainAll(delegate().iterator(), c);
+ }
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Returns a synchronized (thread-safe) map backed by the specified map using
+ * the specified mutex. In order to guarantee serial access, it is critical
+ * that <b>all</b> access to the backing map is accomplished through the
+ * returned map.
+ *
+ * <p>It is imperative that the user manually synchronize on the specified
+ * mutex when accessing any of the return map's collection views:
+ * <pre> {@code
+ *
+ * Map<K, V> m = Synchronized.map(
+ * new HashMap<K, V>(), mutex);
+ * ...
+ * Set<K> s = m.keySet(); // Needn't be in synchronized block
+ * ...
+ * synchronized (mutex) {
+ * Iterator<K> i = s.iterator(); // Must be in synchronized block
+ * while (i.hasNext()) {
+ * foo(i.next());
+ * }
+ * }}</pre>
+ *
+ * Failure to follow this advice may result in non-deterministic behavior.
+ *
+ * @param map the map to be wrapped in a synchronized view
+ * @return a synchronized view of the specified map
+ */
+ public static <K, V> Map<K, V> map(Map<K, V> map, @Nullable Object mutex) {
+ return new SynchronizedMap<K, V>(map, mutex);
+ }
+
+ /** @see Synchronized#map */
+ static class SynchronizedMap<K, V> extends SynchronizedObject
+ implements Map<K, V> {
+ private transient Set<K> keySet;
+ private transient Collection<V> values;
+ private transient Set<Map.Entry<K, V>> entrySet;
+
+ public SynchronizedMap(Map<K, V> delegate, @Nullable Object mutex) {
+ super(delegate, mutex);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override protected Map<K, V> delegate() {
+ return (Map<K, V>) super.delegate();
+ }
+
+ public void clear() {
+ synchronized (mutex) {
+ delegate().clear();
+ }
+ }
+
+ public boolean containsKey(Object key) {
+ synchronized (mutex) {
+ return delegate().containsKey(key);
+ }
+ }
+
+ public boolean containsValue(Object value) {
+ synchronized (mutex) {
+ return delegate().containsValue(value);
+ }
+ }
+
+ public Set<Map.Entry<K, V>> entrySet() {
+ synchronized (mutex) {
+ if (entrySet == null) {
+ entrySet = set(delegate().entrySet(), mutex);
+ }
+ return entrySet;
+ }
+ }
+
+ public V get(Object key) {
+ synchronized (mutex) {
+ return delegate().get(key);
+ }
+ }
+
+ public boolean isEmpty() {
+ synchronized (mutex) {
+ return delegate().isEmpty();
+ }
+ }
+
+ public Set<K> keySet() {
+ synchronized (mutex) {
+ if (keySet == null) {
+ keySet = set(delegate().keySet(), mutex);
+ }
+ return keySet;
+ }
+ }
+
+ public V put(K key, V value) {
+ synchronized (mutex) {
+ return delegate().put(key, value);
+ }
+ }
+
+ public void putAll(Map<? extends K, ? extends V> map) {
+ synchronized (mutex) {
+ delegate().putAll(map);
+ }
+ }
+
+ public V remove(Object key) {
+ synchronized (mutex) {
+ return delegate().remove(key);
+ }
+ }
+
+ public int size() {
+ synchronized (mutex) {
+ return delegate().size();
+ }
+ }
+
+ public Collection<V> values() {
+ synchronized (mutex) {
+ if (values == null) {
+ values = collection(delegate().values(), mutex);
+ }
+ return values;
+ }
+ }
+
+ @Override public boolean equals(Object o) {
+ if (o == this) {
+ return true;
+ }
+ synchronized (mutex) {
+ return delegate().equals(o);
+ }
+ }
+
+ @Override public int hashCode() {
+ synchronized (mutex) {
+ return delegate().hashCode();
+ }
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Returns a synchronized (thread-safe) bimap backed by the specified bimap
+ * using the specified mutex. In order to guarantee serial access, it is
+ * critical that <b>all</b> access to the backing bimap is accomplished
+ * through the returned bimap.
+ *
+ * <p>It is imperative that the user manually synchronize on the specified
+ * mutex when accessing any of the return bimap's collection views:
+ * <pre> {@code
+ *
+ * BiMap<K, V> m = Synchronized.biMap(
+ * HashBiMap.<K, V>create(), mutex);
+ * ...
+ * Set<K> s = m.keySet(); // Needn't be in synchronized block
+ * ...
+ * synchronized (mutex) {
+ * Iterator<K> i = s.iterator(); // Must be in synchronized block
+ * while (i.hasNext()) {
+ * foo(i.next());
+ * }
+ * }}</pre>
+ *
+ * Failure to follow this advice may result in non-deterministic behavior.
+ *
+ * @param bimap the bimap to be wrapped in a synchronized view
+ * @return a synchronized view of the specified bimap
+ */
+ public static <K, V> BiMap<K, V> biMap(
+ BiMap<K, V> bimap, @Nullable Object mutex) {
+ return new SynchronizedBiMap<K, V>(bimap, mutex, null);
+ }
+
+ /** @see Synchronized#biMap */
+ static class SynchronizedBiMap<K, V> extends SynchronizedMap<K, V>
+ implements BiMap<K, V>, Serializable {
+ private transient Set<V> valueSet;
+ private transient BiMap<V, K> inverse;
+
+ public SynchronizedBiMap(
+ BiMap<K, V> delegate, @Nullable Object mutex,
+ @Nullable BiMap<V, K> inverse) {
+ super(delegate, mutex);
+ this.inverse = inverse;
+ }
+
+ @Override protected BiMap<K, V> delegate() {
+ return (BiMap<K, V>) super.delegate();
+ }
+
+ @Override public Set<V> values() {
+ synchronized (mutex) {
+ if (valueSet == null) {
+ valueSet = set(delegate().values(), mutex);
+ }
+ return valueSet;
+ }
+ }
+
+ public V forcePut(K key, V value) {
+ synchronized (mutex) {
+ return delegate().forcePut(key, value);
+ }
+ }
+
+ public BiMap<V, K> inverse() {
+ synchronized (mutex) {
+ if (inverse == null) {
+ inverse
+ = new SynchronizedBiMap<V, K>(delegate().inverse(), mutex, this);
+ }
+ return inverse;
+ }
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ /** @see SynchronizedMultimap#asMap */
+ static class SynchronizedAsMap<K, V>
+ extends SynchronizedMap<K, Collection<V>> {
+ private transient Set<Map.Entry<K, Collection<V>>> asMapEntrySet;
+ private transient Collection<Collection<V>> asMapValues;
+
+ public SynchronizedAsMap(
+ Map<K, Collection<V>> delegate, @Nullable Object mutex) {
+ super(delegate, mutex);
+ }
+
+ @Override public Collection<V> get(Object key) {
+ synchronized (mutex) {
+ Collection<V> collection = super.get(key);
+ return (collection == null) ? null
+ : typePreservingCollection(collection, mutex);
+ }
+ }
+
+ @Override public Set<Map.Entry<K, Collection<V>>> entrySet() {
+ synchronized (mutex) {
+ if (asMapEntrySet == null) {
+ asMapEntrySet = new SynchronizedAsMapEntries<K, V>(
+ delegate().entrySet(), mutex);
+ }
+ return asMapEntrySet;
+ }
+ }
+
+ @Override public Collection<Collection<V>> values() {
+ synchronized (mutex) {
+ if (asMapValues == null) {
+ asMapValues
+ = new SynchronizedAsMapValues<V>(delegate().values(), mutex);
+ }
+ return asMapValues;
+ }
+ }
+
+ @Override public boolean containsValue(Object o) {
+ // values() and its contains() method are both synchronized.
+ return values().contains(o);
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ /** @see SynchronizedMultimap#asMap */
+ static class SynchronizedAsMapValues<V>
+ extends SynchronizedCollection<Collection<V>> {
+ SynchronizedAsMapValues(
+ Collection<Collection<V>> delegate, @Nullable Object mutex) {
+ super(delegate, mutex);
+ }
+
+ @Override public Iterator<Collection<V>> iterator() {
+ // Must be manually synchronized.
+ final Iterator<Collection<V>> iterator = super.iterator();
+ return new ForwardingIterator<Collection<V>>() {
+ @Override protected Iterator<Collection<V>> delegate() {
+ return iterator;
+ }
+ @Override public Collection<V> next() {
+ return typePreservingCollection(iterator.next(), mutex);
+ }
+ };
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+}
diff --git a/src/com/google/common/collect/TreeMultimap.java b/src/com/google/common/collect/TreeMultimap.java
new file mode 100644
index 0000000..d0b3b73
--- /dev/null
+++ b/src/com/google/common/collect/TreeMultimap.java
@@ -0,0 +1,206 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.SortedSet;
+import java.util.TreeMap;
+import java.util.TreeSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * Implementation of {@code Multimap} whose keys and values are ordered by
+ * their natural ordering or by supplied comparators. In all cases, this
+ * implementation uses {@link Comparable#compareTo} or {@link
+ * Comparator#compare} instead of {@link Object#equals} to determine
+ * equivalence of instances.
+ *
+ * <p><b>Warning:</b> The comparators or comparables used must be <i>consistent
+ * with equals</i> as explained by the {@link Comparable} class specification.
+ * Otherwise, the resulting multiset will violate the general contract of {@link
+ * SetMultimap}, which it is specified in terms of {@link Object#equals}.
+ *
+ * <p>The collections returned by {@code keySet} and {@code asMap} iterate
+ * through the keys according to the key comparator ordering or the natural
+ * ordering of the keys. Similarly, {@code get}, {@code removeAll}, and {@code
+ * replaceValues} return collections that iterate through the values according
+ * to the value comparator ordering or the natural ordering of the values. The
+ * collections generated by {@code entries}, {@code keys}, and {@code values}
+ * iterate across the keys according to the above key ordering, and for each
+ * key they iterate across the values according to the value ordering.
+ *
+ * <p>The multimap does not store duplicate key-value pairs. Adding a new
+ * key-value pair equal to an existing key-value pair has no effect.
+ *
+ * <p>Depending on the comparators, null keys and values may or may not be
+ * supported. The natural ordering does not support nulls. All optional multimap
+ * methods are supported, and all returned views are modifiable.
+ *
+ * <p>This class is not threadsafe when any concurrent operations update the
+ * multimap. Concurrent read operations will work correctly. To allow concurrent
+ * update operations, wrap your multimap with a call to {@link
+ * Multimaps#synchronizedSortedSetMultimap}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(serializable = true)
+public class TreeMultimap<K, V> extends AbstractSortedSetMultimap<K, V> {
+ private transient Comparator<? super K> keyComparator;
+ private transient Comparator<? super V> valueComparator;
+
+ /**
+ * Creates an empty {@code TreeMultimap} ordered by the natural ordering of
+ * its keys and values.
+ */
+ @SuppressWarnings("unchecked") // eclipse doesn't like the raw Comparable
+ public static <K extends Comparable, V extends Comparable>
+ TreeMultimap<K, V> create() {
+ return new TreeMultimap<K, V>(Ordering.natural(), Ordering.natural());
+ }
+
+ /**
+ * Creates an empty {@code TreeMultimap} instance using explicit comparators.
+ * Neither comparator may be null; use {@link Ordering#natural()} to specify
+ * natural order.
+ *
+ * @param keyComparator the comparator that determines the key ordering
+ * @param valueComparator the comparator that determines the value ordering
+ */
+ public static <K, V> TreeMultimap<K, V> create(
+ Comparator<? super K> keyComparator,
+ Comparator<? super V> valueComparator) {
+ return new TreeMultimap<K, V>(checkNotNull(keyComparator),
+ checkNotNull(valueComparator));
+ }
+
+ /**
+ * Constructs a {@code TreeMultimap}, ordered by the natural ordering of its
+ * keys and values, with the same mappings as the specified multimap.
+ *
+ * @param multimap the multimap whose contents are copied to this multimap
+ */
+ @SuppressWarnings("unchecked") // eclipse doesn't like the raw Comparable
+ public static <K extends Comparable, V extends Comparable>
+ TreeMultimap<K, V> create(Multimap<? extends K, ? extends V> multimap) {
+ return new TreeMultimap<K, V>(Ordering.natural(), Ordering.natural(),
+ multimap);
+ }
+
+ // Used by the TreeMultimap serialization test.
+ TreeMultimap() {
+ this(null, null);
+ }
+
+ // Must be package-private so multimaps with null comparators can be
+ // serialized (which can be created with Multimaps.newTreeMultimap()). Once
+ // that method is removed, this constructor can be made private.
+ TreeMultimap(@Nullable Comparator<? super K> keyComparator,
+ @Nullable Comparator<? super V> valueComparator) {
+ super((keyComparator == null)
+ ? new TreeMap<K, Collection<V>>()
+ : new TreeMap<K, Collection<V>>(keyComparator));
+ this.keyComparator = keyComparator;
+ this.valueComparator = valueComparator;
+ }
+
+ private TreeMultimap(Comparator<? super K> keyComparator,
+ Comparator<? super V> valueComparator,
+ Multimap<? extends K, ? extends V> multimap) {
+ this(keyComparator, valueComparator);
+ putAll(multimap);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>Creates an empty {@code TreeSet} for a collection of values for one key.
+ *
+ * @return a new {@code TreeSet} containing a collection of values for one
+ * key
+ */
+ @Override SortedSet<V> createCollection() {
+ return (valueComparator == null)
+ ? new TreeSet<V>() : new TreeSet<V>(valueComparator);
+ }
+
+ /**
+ * Returns the comparator that orders the multimap keys.
+ */
+ public Comparator<? super K> keyComparator() {
+ return keyComparator;
+ }
+
+ public Comparator<? super V> valueComparator() {
+ return valueComparator;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>Because a {@code TreeMultimap} has unique sorted keys, this method
+ * returns a {@link SortedSet}, instead of the {@link Set} specified in the
+ * {@link Multimap} interface.
+ */
+ @Override public SortedSet<K> keySet() {
+ return (SortedSet<K>) super.keySet();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>Because a {@code TreeMultimap} has unique sorted keys, this method
+ * returns a {@link SortedMap}, instead of the {@link java.util.Map} specified
+ * in the {@link Multimap} interface.
+ */
+ @Override public SortedMap<K, Collection<V>> asMap() {
+ return (SortedMap<K, Collection<V>>) super.asMap();
+ }
+
+ /**
+ * @serialData key comparator, value comparator, number of distinct keys, and
+ * then for each distinct key: the key, number of values for that key, and
+ * key values
+ */
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ stream.defaultWriteObject();
+ stream.writeObject(keyComparator());
+ stream.writeObject(valueComparator());
+ Serialization.writeMultimap(this, stream);
+ }
+
+ @SuppressWarnings("unchecked") // reading data stored by writeObject
+ private void readObject(ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+ keyComparator = (Comparator<? super K>) stream.readObject();
+ valueComparator = (Comparator<? super V>) stream.readObject();
+ setMap(new TreeMap<K, Collection<V>>(keyComparator));
+ Serialization.populateMultimap(this, stream);
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/TreeMultiset.java b/src/com/google/common/collect/TreeMultiset.java
new file mode 100644
index 0000000..aa72c55
--- /dev/null
+++ b/src/com/google/common/collect/TreeMultiset.java
@@ -0,0 +1,214 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Comparator;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.SortedSet;
+import java.util.TreeMap;
+import java.util.Collection;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import javax.annotation.Nullable;
+
+/**
+ * A multiset which maintains the ordering of its elements, according to either
+ * their natural order or an explicit {@link Comparator}. In all cases, this
+ * implementation uses {@link Comparable#compareTo} or {@link
+ * Comparator#compare} instead of {@link Object#equals} to determine
+ * equivalence of instances.
+ *
+ * <p><b>Warning:</b> The comparison must be <i>consistent with equals</i> as
+ * explained by the {@link Comparable} class specification. Otherwise, the
+ * resulting multiset will violate the {@link Collection} contract, which it is
+ * specified in terms of {@link Object#equals}.
+ *
+ * @author Neal Kanodia
+ * @author Jared Levy
+ */
+@GwtCompatible
+@SuppressWarnings("serial") // we're overriding default serialization
+public final class TreeMultiset<E> extends AbstractMapBasedMultiset<E> {
+
+ /**
+ * Creates a new, empty multiset, sorted according to the elements' natural
+ * order. All elements inserted into the multiset must implement the
+ * {@code Comparable} interface. Furthermore, all such elements must be
+ * <i>mutually comparable</i>: {@code e1.compareTo(e2)} must not throw a
+ * {@code ClassCastException} for any elements {@code e1} and {@code e2} in
+ * the multiset. If the user attempts to add an element to the multiset that
+ * violates this constraint (for example, the user attempts to add a string
+ * element to a set whose elements are integers), the {@code add(Object)}
+ * call will throw a {@code ClassCastException}.
+ *
+ * <p>The type specification is {@code <E extends Comparable>}, instead of the
+ * more specific {@code <E extends Comparable<? super E>>}, to support
+ * classes defined without generics.
+ */
+ @SuppressWarnings("unchecked") // eclipse doesn't like the raw Comparable
+ public static <E extends Comparable> TreeMultiset<E> create() {
+ return new TreeMultiset<E>();
+ }
+
+ /**
+ * Creates a new, empty multiset, sorted according to the specified
+ * comparator. All elements inserted into the multiset must be <i>mutually
+ * comparable</i> by the specified comparator: {@code comparator.compare(e1,
+ * e2)} must not throw a {@code ClassCastException} for any elements {@code
+ * e1} and {@code e2} in the multiset. If the user attempts to add an element
+ * to the multiset that violates this constraint, the {@code add(Object)} call
+ * will throw a {@code ClassCastException}.
+ *
+ * @param comparator the comparator that will be used to sort this multiset. A
+ * null value indicates that the elements' <i>natural ordering</i> should
+ * be used.
+ */
+ public static <E> TreeMultiset<E> create(Comparator<? super E> comparator) {
+ return new TreeMultiset<E>(comparator);
+ }
+
+ /**
+ * Creates an empty multiset containing the given initial elements, sorted
+ * according to the elements' natural order.
+ *
+ * <p>The type specification is {@code <E extends Comparable>}, instead of the
+ * more specific {@code <E extends Comparable<? super E>>}, to support
+ * classes defined without generics.
+ */
+ @SuppressWarnings("unchecked") // eclipse doesn't like the raw Comparable
+ public static <E extends Comparable> TreeMultiset<E> create(
+ Iterable<? extends E> elements) {
+ TreeMultiset<E> multiset = create();
+ Iterables.addAll(multiset, elements);
+ return multiset;
+ }
+
+ private TreeMultiset() {
+ super(new TreeMap<E, AtomicInteger>());
+ }
+
+ private TreeMultiset(Comparator<? super E> comparator) {
+ super(new TreeMap<E, AtomicInteger>(comparator));
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>In {@code TreeMultiset}, the return type of this method is narrowed
+ * from {@link Set} to {@link SortedSet}.
+ */
+ @Override public SortedSet<E> elementSet() {
+ return (SortedSet<E>) super.elementSet();
+ }
+
+ @Override public int count(@Nullable Object element) {
+ try {
+ return super.count(element);
+ } catch (NullPointerException e) {
+ return 0;
+ } catch (ClassCastException e) {
+ return 0;
+ }
+ }
+
+ @Override Set<E> createElementSet() {
+ return new SortedMapBasedElementSet(
+ (SortedMap<E, AtomicInteger>) backingMap());
+ }
+
+ private class SortedMapBasedElementSet extends MapBasedElementSet
+ implements SortedSet<E> {
+
+ SortedMapBasedElementSet(SortedMap<E, AtomicInteger> map) {
+ super(map);
+ }
+
+ SortedMap<E, AtomicInteger> sortedMap() {
+ return (SortedMap<E, AtomicInteger>) getMap();
+ }
+
+ public Comparator<? super E> comparator() {
+ return sortedMap().comparator();
+ }
+
+ public E first() {
+ return sortedMap().firstKey();
+ }
+
+ public E last() {
+ return sortedMap().lastKey();
+ }
+
+ public SortedSet<E> headSet(E toElement) {
+ return new SortedMapBasedElementSet(sortedMap().headMap(toElement));
+ }
+
+ public SortedSet<E> subSet(E fromElement, E toElement) {
+ return new SortedMapBasedElementSet(
+ sortedMap().subMap(fromElement, toElement));
+ }
+
+ public SortedSet<E> tailSet(E fromElement) {
+ return new SortedMapBasedElementSet(sortedMap().tailMap(fromElement));
+ }
+
+ @Override public boolean remove(Object element) {
+ try {
+ return super.remove(element);
+ } catch (NullPointerException e) {
+ return false;
+ } catch (ClassCastException e) {
+ return false;
+ }
+ }
+ }
+
+ /*
+ * TODO: Decide whether entrySet() should return entries with an equals()
+ * method that calls the comparator to compare the two keys. If that change
+ * is made, AbstractMultiset.equals() can simply check whether two multisets
+ * have equal entry sets.
+ */
+
+ /**
+ * @serialData the comparator, the number of distinct elements, the first
+ * element, its count, the second element, its count, and so on
+ */
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ stream.defaultWriteObject();
+ stream.writeObject(elementSet().comparator());
+ Serialization.writeMultiset(this, stream);
+ }
+
+ private void readObject(ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+ @SuppressWarnings("unchecked") // reading data stored by writeObject
+ Comparator<? super E> comparator
+ = (Comparator<? super E>) stream.readObject();
+ setBackingMap(new TreeMap<E, AtomicInteger>(comparator));
+ Serialization.populateMultiset(this, stream);
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/UnmodifiableIterator.java b/src/com/google/common/collect/UnmodifiableIterator.java
new file mode 100644
index 0000000..2867587
--- /dev/null
+++ b/src/com/google/common/collect/UnmodifiableIterator.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Iterator;
+
+/**
+ * An iterator that does not support {@link #remove}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+public abstract class UnmodifiableIterator<E> implements Iterator<E> {
+ /**
+ * Guaranteed to throw an exception and leave the underlying data unmodified.
+ *
+ * @throws UnsupportedOperationException always
+ */
+ public final void remove() {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git a/src/com/google/common/collect/UsingToStringOrdering.java b/src/com/google/common/collect/UsingToStringOrdering.java
new file mode 100644
index 0000000..d08aeb8
--- /dev/null
+++ b/src/com/google/common/collect/UsingToStringOrdering.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+
+/** An ordering that uses the reverse of the natural order of the values. */
+@GwtCompatible(serializable = true)
+final class UsingToStringOrdering
+ extends Ordering<Object> implements Serializable {
+ static final UsingToStringOrdering INSTANCE = new UsingToStringOrdering();
+
+ public int compare(Object left, Object right) {
+ return left.toString().compareTo(right.toString());
+ }
+
+ // preserve singleton-ness, so equals() and hashCode() work correctly
+ private Object readResolve() {
+ return INSTANCE;
+ }
+
+ @Override public String toString() {
+ return "Ordering.usingToString()";
+ }
+
+ private UsingToStringOrdering() {}
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/src/com/google/common/collect/package-info.java b/src/com/google/common/collect/package-info.java
new file mode 100644
index 0000000..1df3b2e
--- /dev/null
+++ b/src/com/google/common/collect/package-info.java
@@ -0,0 +1,188 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * This package contains generic collection interfaces and implementations, and
+ * other utilities for working with collections.
+ *
+ * <h2>Collection Types</h2>
+ *
+ * <dl>
+ * <dt>{@link com.google.common.collect.Multimap}
+ * <dd>A new type, which is similar to {@link java.util.Map}, but may contain
+ * multiple entries with the same key. Some behaviors of
+ * {@link com.google.common.collect.Multimap} are left unspecified and are
+ * provided only by the subtypes mentioned below.
+ *
+ * <dt>{@link com.google.common.collect.SetMultimap}
+ * <dd>An extension of {@link com.google.common.collect.Multimap} which has
+ * order-independent equality and does not allow duplicate entries; that is,
+ * while a key may appear twice in a {@code SetMultimap}, each must map to a
+ * different value. {@code SetMultimap} takes its name from the fact that
+ * the {@linkplain com.google.common.collect.SetMultimap#get collection of
+ * values} associated with a given key fulfills the {@link java.util.Set}
+ * contract.
+ *
+ * <dt>{@link com.google.common.collect.ListMultimap}
+ * <dd>An extension of {@link com.google.common.collect.Multimap} which permits
+ * duplicate entries, supports random access of values for a particular key,
+ * and has <i>partially order-dependent equality</i> as defined by
+ * {@link com.google.common.collect.ListMultimap#equals(Object)}. {@code
+ * ListMultimap} takes its name from the fact that the {@linkplain
+ * com.google.common.collect.ListMultimap#get collection of values}
+ * associated with a given key fulfills the {@link java.util.List} contract.
+ *
+ * <dt>{@link com.google.common.collect.SortedSetMultimap}
+ * <dd>An extension of {@link com.google.common.collect.SetMultimap} for which
+ * the {@linkplain com.google.common.collect.SortedSetMultimap#get
+ * collection values} associated with a given key is a
+ * {@link java.util.SortedSet}.
+ *
+ * <dt>{@link com.google.common.collect.Multiset}
+ * <dd>An extension of {@link java.util.Collection} that may contain duplicate
+ * values like a {@link java.util.List}, yet has order-independent equality
+ * like a {@link java.util.Set}. One typical use for a multiset is to
+ * represent a histogram.
+ *
+ * <dt>{@link com.google.common.collect.BiMap}
+ * <dd>An extension of {@link java.util.Map} that guarantees the uniqueness of
+ * its values as well as that of its keys. This is sometimes called an
+ * "invertible map," since the restriction on values enables it to support
+ * an {@linkplain com.google.common.collect.BiMap#inverse inverse view} --
+ * which is another instance of {@code BiMap}.
+ *
+ * <dt>{@link com.google.common.collect.ClassToInstanceMap}
+ * <dd>An extension of {@link java.util.Map} that associates a raw type with an
+ * instance of that type.
+ * </dl>
+ *
+ * <h2>Collection Implementations</h2>
+ *
+ * <h3>of {@link java.util.List}</h3>
+ * <dl>
+ * <dt>{@link com.google.common.collect.ImmutableList}
+ * </ul>
+ *
+ * <h3>of {@link java.util.Set}</h3>
+ * <dl>
+ * <dt>{@link com.google.common.collect.ImmutableSet}
+ * </ul>
+ *
+ * <h3>of {@link java.util.SortedSet}</h3>
+ * <dl>
+ * <dt>{@link com.google.common.collect.ImmutableSortedSet}
+ * </dl>
+ *
+ * <h3>of {@link java.util.Map}</h3>
+ * <dl>
+ * <dt>{@link com.google.common.collect.ImmutableMap}
+ * <dt>{@link com.google.common.collect.MapMaker} (produced by)
+ * </ul>
+ *
+ * <h3>of {@link java.util.SortedMap}</h3>
+ * <dl>
+ * <dt>{@link com.google.common.collect.ImmutableSortedMap}
+ * </dl>
+ *
+ * <h3>of {@link com.google.common.collect.Multimap}</h3>
+ * <dl>
+ * <dt>{@link com.google.common.collect.ImmutableMultimap}
+ * <dt>{@link com.google.common.collect.Multimaps#newMultimap}
+ * </dl>
+ *
+ * <h3>of {@link com.google.common.collect.ListMultimap}</h3>
+ * <dl>
+ * <dt>{@link com.google.common.collect.ImmutableListMultimap}
+ * <dt>{@link com.google.common.collect.ArrayListMultimap}
+ * <dt>{@link com.google.common.collect.LinkedListMultimap}
+ * <dt>{@link com.google.common.collect.Multimaps#newListMultimap}
+ * </dl>
+ *
+ * <h3>of {@link com.google.common.collect.SetMultimap}</h3>
+ * <dl>
+ * <dt>{@link com.google.common.collect.ImmutableSetMultimap}
+ * <dt>{@link com.google.common.collect.HashMultimap}
+ * <dt>{@link com.google.common.collect.LinkedHashMultimap}
+ * <dt>{@link com.google.common.collect.TreeMultimap}
+ * <dt>{@link com.google.common.collect.Multimaps#newSetMultimap}
+ * <dt>{@link com.google.common.collect.Multimaps#newSortedSetMultimap}
+ * </dl>
+ *
+ * <h3>of {@link com.google.common.collect.Multiset}</h3>
+ * <dl>
+ * <dt>{@link com.google.common.collect.ImmutableMultiset}
+ * <dt>{@link com.google.common.collect.ConcurrentHashMultiset}
+ * <dt>{@link com.google.common.collect.HashMultiset}
+ * <dt>{@link com.google.common.collect.LinkedHashMultiset}
+ * <dt>{@link com.google.common.collect.TreeMultiset}
+ * <dt>{@link com.google.common.collect.EnumMultiset}
+ * </dl>
+ *
+ * <h3>of {@link com.google.common.collect.BiMap}</h3>
+ * <dl>
+ * <dt>{@link com.google.common.collect.HashBiMap}
+ * <dt>{@link com.google.common.collect.EnumBiMap}
+ * <dt>{@link com.google.common.collect.EnumHashBiMap}
+ * </dl>
+ *
+ * <h3>of {@link com.google.common.collect.ClassToInstanceMap}</h3>
+ * <dl>
+ * <dt>{@link com.google.common.collect.ImmutableClassToInstanceMap}
+ * <dt>{@link com.google.common.collect.MutableClassToInstanceMap}
+ * </dl>
+ *
+ * <h2>Skeletal implementations</h2>
+ * <dl>
+ * <dt>{@link com.google.common.collect.AbstractIterator}
+ * <dt>{@link com.google.common.collect.UnmodifiableIterator}
+ * </dl>
+ *
+ * <h2>Utilities</h2>
+ *
+ * <dl>
+ * <dt>{@link com.google.common.collect.Collections2}
+ * <dt>{@link com.google.common.collect.Iterators}
+ * <dt>{@link com.google.common.collect.Iterables}
+ * <dt>{@link com.google.common.collect.Lists}
+ * <dt>{@link com.google.common.collect.Maps}
+ * <dt>{@link com.google.common.collect.Ordering}
+ * <dt>{@link com.google.common.collect.Sets}
+ * <dt>{@link com.google.common.collect.Multisets}
+ * <dt>{@link com.google.common.collect.Multimaps}
+ * <dt>{@link com.google.common.collect.ObjectArrays}
+ * </dl>
+
+ * <h2>Forwarding collections</h2>
+ *
+ * <dl>
+ * <dt>{@link com.google.common.collect.ForwardingCollection }
+ * <dt>{@link com.google.common.collect.ForwardingConcurrentMap }
+ * <dt>{@link com.google.common.collect.ForwardingIterator }
+ * <dt>{@link com.google.common.collect.ForwardingList }
+ * <dt>{@link com.google.common.collect.ForwardingListIterator }
+ * <dt>{@link com.google.common.collect.ForwardingMap }
+ * <dt>{@link com.google.common.collect.ForwardingMapEntry }
+ * <dt>{@link com.google.common.collect.ForwardingMultimap }
+ * <dt>{@link com.google.common.collect.ForwardingMultiset }
+ * <dt>{@link com.google.common.collect.ForwardingObject }
+ * <dt>{@link com.google.common.collect.ForwardingQueue }
+ * <dt>{@link com.google.common.collect.ForwardingSet }
+ * <dt>{@link com.google.common.collect.ForwardingSortedMap }
+ * <dt>{@link com.google.common.collect.ForwardingSortedSet }
+ * </dl>
+ */
+@javax.annotation.ParametersAreNonnullByDefault
+package com.google.common.collect;
diff --git a/test/com/google/common/base/FinalizableReferenceQueueTest.java b/test/com/google/common/base/FinalizableReferenceQueueTest.java
new file mode 100644
index 0000000..d405c6c
--- /dev/null
+++ b/test/com/google/common/base/FinalizableReferenceQueueTest.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright (C) 2005 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.base;
+
+import com.google.common.base.internal.Finalizer;
+
+import junit.framework.TestCase;
+
+import java.lang.ref.ReferenceQueue;
+import java.lang.ref.WeakReference;
+import java.net.URL;
+import java.net.URLClassLoader;
+
+/**
+ * Unit test for {@link FinalizableReferenceQueue}.
+ *
+ * @author Bob Lee
+ */
+public class FinalizableReferenceQueueTest extends TestCase {
+
+ private FinalizableReferenceQueue frq;
+
+ @Override
+ protected void tearDown() throws Exception {
+ frq = null;
+ }
+
+ public void testFinalizeReferentCalled() {
+ MockReference reference = new MockReference(
+ frq = new FinalizableReferenceQueue());
+ // wait up to 5s
+ for (int i = 0; i < 500; i++) {
+ if (reference.finalizeReferentCalled) {
+ return;
+ }
+ try {
+ System.gc();
+ Thread.sleep(10);
+ } catch (InterruptedException e) { /* ignore */ }
+ }
+ fail();
+ }
+
+ static class MockReference extends FinalizableWeakReference<Object> {
+
+ volatile boolean finalizeReferentCalled;
+
+ MockReference(FinalizableReferenceQueue frq) {
+ super(new Object(), frq);
+ }
+
+ public void finalizeReferent() {
+ finalizeReferentCalled = true;
+ }
+ }
+
+ /**
+ * Keeps a weak reference to the underlying reference queue. When this
+ * reference is cleared, we know that the background thread has stopped
+ * and released its strong reference.
+ */
+ private WeakReference<ReferenceQueue<Object>> queueReference;
+
+ public void testThatFinalizerStops() {
+ weaklyReferenceQueue();
+
+ // wait up to 5s
+ for (int i = 0; i < 500; i++) {
+ if (queueReference.get() == null) {
+ return;
+ }
+ try {
+ System.gc();
+ Thread.sleep(10);
+ } catch (InterruptedException e) { /* ignore */ }
+ }
+ fail();
+ }
+
+ /**
+ * If we don't keep a strong reference to the reference object, it won't
+ * be enqueued.
+ */
+ FinalizableWeakReference<Object> reference;
+
+ /**
+ * Create the FRQ in a method that goes out of scope so that we're sure
+ * it will be reclaimed.
+ */
+ private void weaklyReferenceQueue() {
+ frq = new FinalizableReferenceQueue();
+ queueReference = new WeakReference<ReferenceQueue<Object>>(frq.queue);
+
+ /*
+ * Queue and clear a reference for good measure. We test later on that
+ * the finalizer thread stopped, but we should test that it actually
+ * started first.
+ */
+ reference = new FinalizableWeakReference<Object>(new Object(), frq) {
+ public void finalizeReferent() {
+ reference = null;
+ frq = null;
+ }
+ };
+ }
+
+ public void testDecoupledLoader() {
+ FinalizableReferenceQueue.DecoupledLoader decoupledLoader =
+ new FinalizableReferenceQueue.DecoupledLoader() {
+ @Override
+ URLClassLoader newLoader(URL base) {
+ return new DecoupledClassLoader(new URL[] { base });
+ }
+ };
+
+ Class<?> finalizerCopy = decoupledLoader.loadFinalizer();
+
+ assertNotNull(finalizerCopy);
+ assertNotSame(Finalizer.class, finalizerCopy);
+
+ assertNotNull(FinalizableReferenceQueue.getStartFinalizer(finalizerCopy));
+ }
+
+ static class DecoupledClassLoader extends URLClassLoader {
+
+ public DecoupledClassLoader(URL[] urls) {
+ super(urls);
+ }
+
+ @Override
+ protected synchronized Class<?> loadClass(String name, boolean resolve)
+ throws ClassNotFoundException {
+ // Force Finalizer to load from this class loader, not its parent.
+ if (name.equals(Finalizer.class.getName())) {
+ Class<?> clazz = findClass(name);
+ if (resolve) {
+ resolveClass(clazz);
+ }
+ return clazz;
+ }
+
+ return super.loadClass(name, resolve);
+ }
+ }
+
+ public void testGetFinalizerUrl() {
+ assertNotNull(getClass().getResource("internal/Finalizer.class"));
+ }
+}
diff --git a/test/com/google/common/base/FunctionsTest.java b/test/com/google/common/base/FunctionsTest.java
new file mode 100644
index 0000000..c02d6f7
--- /dev/null
+++ b/test/com/google/common/base/FunctionsTest.java
@@ -0,0 +1,313 @@
+/*
+ * Copyright (C) 2005 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.base;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
+import com.google.common.testutils.EqualsTester;
+import com.google.common.testutils.NullPointerTester;
+import com.google.common.testutils.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.util.Map;
+
+/**
+ * Tests for {@link Functions}.
+ *
+ * @author Mike Bostock
+ * @author Vlad Patryshev
+ */
+public class FunctionsTest extends TestCase {
+
+ public void testIdentity() {
+ Function<String, String> identity = Functions.identity();
+ assertNull(identity.apply(null));
+ assertSame("foo", identity.apply("foo"));
+ assertNotSame("foo", identity.apply(new String("foo")));
+
+ checkCanReserializeSingleton(Functions.identity());
+ }
+
+ public void testToStringFunction_apply() {
+ assertEquals("3", Functions.toStringFunction().apply(3));
+ assertEquals("hiya", Functions.toStringFunction().apply("hiya"));
+ assertEquals("I'm a string",
+ Functions.toStringFunction().apply(
+ new Object() {
+ @Override public String toString() {
+ return "I'm a string";
+ }
+ }));
+ try {
+ Functions.toStringFunction().apply(null);
+ fail("expected NullPointerException");
+ } catch (NullPointerException e) {
+ // expected
+ }
+
+ checkCanReserializeSingleton(Functions.toStringFunction());
+ }
+
+ public void testNullPointerExceptions() throws Exception {
+ NullPointerTester tester = new NullPointerTester();
+ tester.testAllPublicStaticMethods(Functions.class);
+ }
+
+ public void testForMapWithoutDefault() {
+ Map<String, Integer> map = Maps.newHashMap();
+ map.put("One", 1);
+ map.put("Three", 3);
+ Function<String, Integer> function = Functions.forMap(map);
+
+ assertEquals(1, function.apply("One").intValue());
+ assertEquals(3, function.apply("Three").intValue());
+
+ try {
+ function.apply("Two");
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+
+ new EqualsTester(function)
+ .addEqualObject(Functions.forMap(map))
+ .addEqualObject(Functions.forMap(map))
+ .addNotEqualObject(Functions.forMap(map, 42))
+ .testEquals();
+
+ checkCanReserialize(Functions.forMap(ImmutableMap.of(1, 2)));
+ }
+
+ public void testForMapWithDefault() {
+ Map<String, Integer> map = Maps.newHashMap();
+ map.put("One", 1);
+ map.put("Three", 3);
+ Function<String, Integer> function = Functions.forMap(map, 42);
+
+ assertEquals(1, function.apply("One").intValue());
+ assertEquals(42, function.apply("Two").intValue());
+ assertEquals(3, function.apply("Three").intValue());
+
+ new EqualsTester(function)
+ .addEqualObject(Functions.forMap(map, 42))
+ .addEqualObject(SerializableTester.reserialize(function))
+ .addNotEqualObject(Functions.forMap(map))
+ .addNotEqualObject(Functions.forMap(map, null))
+ .addNotEqualObject(Functions.forMap(map, 43))
+ .testEquals();
+
+ checkCanReserialize(Functions.forMap(ImmutableMap.of(1, 2), 3));
+ }
+
+ public void testForMapWithDefault_null() {
+ ImmutableMap<String, Integer> map = ImmutableMap.of("One", 1);
+ Function<String, Integer> function = Functions.forMap(map, null);
+
+ assertEquals((Integer) 1, function.apply("One"));
+ assertNull(function.apply("Two"));
+
+ // check basic sanity of equals and hashCode
+ new EqualsTester(function)
+ .addEqualObject(SerializableTester.reserialize(function))
+ .addNotEqualObject(Functions.forMap(map, 1))
+ .testEquals();
+ }
+
+ public void testForMapWildCardWithDefault() {
+ Map<String, Integer> map = Maps.newHashMap();
+ map.put("One", 1);
+ map.put("Three", 3);
+ Number number = Double.valueOf(42);
+ Function<String, Number> function = Functions.forMap(map, number);
+
+ assertEquals(1, function.apply("One").intValue());
+ assertEquals(number, function.apply("Two"));
+ assertEquals(3L, function.apply("Three").longValue());
+ }
+
+ public void testComposition() {
+ Map<String, Integer> mJapaneseToInteger = Maps.newHashMap();
+ mJapaneseToInteger.put("Ichi", 1);
+ mJapaneseToInteger.put("Ni", 2);
+ mJapaneseToInteger.put("San", 3);
+ Function<String, Integer> japaneseToInteger =
+ Functions.forMap(mJapaneseToInteger);
+
+ Map<Integer, String> mIntegerToSpanish = Maps.newHashMap();
+ mIntegerToSpanish.put(1, "Uno");
+ mIntegerToSpanish.put(3, "Tres");
+ mIntegerToSpanish.put(4, "Cuatro");
+ Function<Integer, String> integerToSpanish =
+ Functions.forMap(mIntegerToSpanish);
+
+ Function<String, String> japaneseToSpanish =
+ Functions.compose(integerToSpanish, japaneseToInteger);
+
+ assertEquals("Uno", japaneseToSpanish.apply("Ichi"));
+ try {
+ japaneseToSpanish.apply("Ni");
+ fail();
+ } catch (IllegalArgumentException e) {
+ }
+ assertEquals("Tres", japaneseToSpanish.apply("San"));
+ try {
+ japaneseToSpanish.apply("Shi");
+ fail();
+ } catch (IllegalArgumentException e) {
+ }
+
+ new EqualsTester(japaneseToSpanish)
+ .addEqualObject(
+ Functions.compose(integerToSpanish, japaneseToInteger))
+ .addEqualObject(
+ SerializableTester.reserialize(japaneseToSpanish))
+ .addNotEqualObject(japaneseToInteger)
+ .addNotEqualObject(integerToSpanish)
+ .addNotEqualObject(
+ Functions.compose(japaneseToInteger, integerToSpanish))
+ .testEquals();
+ }
+
+ public void testCompositionWildcard() {
+ Map<String, Integer> mapJapaneseToInteger = Maps.newHashMap();
+ Function<String, Integer> japaneseToInteger =
+ Functions.forMap(mapJapaneseToInteger);
+
+ Function<Object, String> numberToSpanish = Functions.constant("Yo no se");
+
+ Function<String, String> japaneseToSpanish =
+ Functions.compose(numberToSpanish, japaneseToInteger);
+ }
+
+ private static class HashCodeFunction implements Function<Object, Integer> {
+ public Integer apply(Object o) {
+ return (o == null) ? 0 : o.hashCode();
+ }
+ }
+
+ public void testComposeOfFunctionsIsAssociative() {
+ Map<Float, String> m = ImmutableMap.of(
+ 4.0f, "A", 3.0f, "B", 2.0f, "C", 1.0f, "D");
+ Function<? super Integer, Boolean> h = Functions.constant(Boolean.TRUE);
+ Function<? super String, Integer> g = new HashCodeFunction();
+ Function<Float, String> f = Functions.forMap(m, "F");
+
+ Function<Float, Boolean> c1 = Functions.compose(Functions.compose(h, g), f);
+ Function<Float, Boolean> c2 = Functions.compose(h, Functions.compose(g, f));
+
+ // Might be nice (eventually) to have:
+ // assertEquals(c1, c2);
+
+ // But for now, settle for this:
+ assertEquals(c1.hashCode(), c2.hashCode());
+
+ assertEquals(c1.apply(1.0f), c2.apply(1.0f));
+ assertEquals(c1.apply(5.0f), c2.apply(5.0f));
+ }
+
+ public void testComposeOfPredicateAndFunctionIsAssociative() {
+ Map<Float, String> m = ImmutableMap.of(
+ 4.0f, "A", 3.0f, "B", 2.0f, "C", 1.0f, "D");
+ Predicate<? super Integer> h = Predicates.equalTo(42);
+ Function<? super String, Integer> g = new HashCodeFunction();
+ Function<Float, String> f = Functions.forMap(m, "F");
+
+ Predicate<Float> p1 = Predicates.compose(Predicates.compose(h, g), f);
+ Predicate<Float> p2 = Predicates.compose(h, Functions.compose(g, f));
+
+ // Might be nice (eventually) to have:
+ // assertEquals(p1, p2);
+
+ // But for now, settle for this:
+ assertEquals(p1.hashCode(), p2.hashCode());
+
+ assertEquals(p1.apply(1.0f), p2.apply(1.0f));
+ assertEquals(p1.apply(5.0f), p2.apply(5.0f));
+ }
+
+ public void testForPredicate() {
+ Function<Object, Boolean> alwaysTrue =
+ Functions.forPredicate(Predicates.alwaysTrue());
+ Function<Object, Boolean> alwaysFalse =
+ Functions.forPredicate(Predicates.alwaysFalse());
+
+ assertTrue(alwaysTrue.apply(0));
+ assertFalse(alwaysFalse.apply(0));
+
+ new EqualsTester(alwaysTrue)
+ .addEqualObject(Functions.forPredicate(Predicates.alwaysTrue()))
+ .addNotEqualObject(alwaysFalse)
+ .addNotEqualObject(Functions.identity())
+ .testEquals();
+
+ checkCanReserialize(Functions.forPredicate(Predicates.equalTo(5)));
+ }
+
+ public void testConstant() {
+ Function<Object, Object> f = Functions.<Object> constant("correct");
+ assertEquals("correct", f.apply(new Object()));
+ assertEquals("correct", f.apply(null));
+
+ Function<Object, String> g = Functions.constant(null);
+ assertEquals(null, g.apply(2));
+ assertEquals(null, g.apply(null));
+
+ new EqualsTester(f)
+ .addEqualObject(Functions.constant("correct"))
+ .addNotEqualObject(Functions.constant("incorrect"))
+ .addNotEqualObject(Functions.toStringFunction())
+ .addNotEqualObject(g)
+ .testEquals();
+
+ new EqualsTester(g)
+ .addEqualObject(Functions.constant(null))
+ .addNotEqualObject(Functions.constant("incorrect"))
+ .addNotEqualObject(Functions.toStringFunction())
+ .addNotEqualObject(f)
+ .testEquals();
+
+ checkCanReserialize(Functions.constant(5));
+ }
+
+ private <Y> void checkCanReserialize(Function<? super Integer, Y> f) {
+ Function<? super Integer, Y> g = SerializableTester.reserializeAndAssert(f);
+ for (int i = 1; i < 5; i++) {
+ // convoluted way to check that the same result happens from each
+ Y expected = null;
+ try {
+ expected = f.apply(i);
+ } catch (IllegalArgumentException e) {
+ try {
+ g.apply(i);
+ fail();
+ } catch (IllegalArgumentException ok) {
+ continue;
+ }
+ }
+ assertEquals(expected, g.apply(i));
+ }
+ }
+
+ private <Y> void checkCanReserializeSingleton(Function<? super String, Y> f) {
+ Function<? super String, Y> g = SerializableTester.reserializeAndAssert(f);
+ assertSame(f, g);
+ for (Integer i = 1; i < 5; i++) {
+ assertEquals(f.apply(i.toString()), g.apply(i.toString()));
+ }
+ }
+
+}
diff --git a/test/com/google/common/base/JoinerTest.java b/test/com/google/common/base/JoinerTest.java
new file mode 100644
index 0000000..213e224
--- /dev/null
+++ b/test/com/google/common/base/JoinerTest.java
@@ -0,0 +1,264 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.base;
+
+import com.google.common.base.Joiner.MapJoiner;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Maps;
+import com.google.common.testutils.NullPointerTester;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Map;
+
+/**
+ * Unit test for {@link Joiner}.
+ *
+ * @author Kevin Bourrillion
+ */
+public class JoinerTest extends TestCase {
+ static final Joiner J = Joiner.on("-");
+
+ // <Integer> needed to prevent warning :(
+ static final Iterable<Integer> ITERABLE_ = Arrays.<Integer>asList();
+ static final Iterable<Integer> ITERABLE_1 = Arrays.asList(1);
+ static final Iterable<Integer> ITERABLE_12 = Arrays.asList(1, 2);
+ static final Iterable<Integer> ITERABLE_123 = Arrays.asList(1, 2, 3);
+ static final Iterable<Integer> ITERABLE_NULL = Arrays.asList((Integer) null);
+ static final Iterable<Integer> ITERABLE_NULL_NULL
+ = Arrays.asList((Integer) null, null);
+ static final Iterable<Integer> ITERABLE_NULL_1 = Arrays.asList(null, 1);
+ static final Iterable<Integer> ITERABLE_1_NULL = Arrays.asList(1, null);
+ static final Iterable<Integer> ITERABLE_1_NULL_2 = Arrays.asList(1, null, 2);
+ static final Iterable<Integer> ITERABLE_FOUR_NULLS
+ = Arrays.asList((Integer) null, null, null, null);
+
+ public void testNoSpecialNullBehavior() {
+ checkNoOutput(J, ITERABLE_);
+ checkResult(J, ITERABLE_1, "1");
+ checkResult(J, ITERABLE_12, "1-2");
+ checkResult(J, ITERABLE_123, "1-2-3");
+
+ try {
+ J.join(ITERABLE_NULL);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ try {
+ J.join(ITERABLE_1_NULL_2);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testOnCharOverride() {
+ Joiner onChar = Joiner.on('-');
+ checkNoOutput(onChar, ITERABLE_);
+ checkResult(onChar, ITERABLE_1, "1");
+ checkResult(onChar, ITERABLE_12, "1-2");
+ checkResult(onChar, ITERABLE_123, "1-2-3");
+ }
+
+ public void testSkipNulls() {
+ Joiner skipNulls = J.skipNulls();
+ checkNoOutput(skipNulls, ITERABLE_);
+ checkNoOutput(skipNulls, ITERABLE_NULL);
+ checkNoOutput(skipNulls, ITERABLE_NULL_NULL);
+ checkNoOutput(skipNulls, ITERABLE_FOUR_NULLS);
+ checkResult(skipNulls, ITERABLE_1, "1");
+ checkResult(skipNulls, ITERABLE_12, "1-2");
+ checkResult(skipNulls, ITERABLE_123, "1-2-3");
+ checkResult(skipNulls, ITERABLE_NULL_1, "1");
+ checkResult(skipNulls, ITERABLE_1_NULL, "1");
+ checkResult(skipNulls, ITERABLE_1_NULL_2, "1-2");
+ }
+
+ public void testUseForNull() {
+ Joiner zeroForNull = J.useForNull("0");
+ checkNoOutput(zeroForNull, ITERABLE_);
+ checkResult(zeroForNull, ITERABLE_1, "1");
+ checkResult(zeroForNull, ITERABLE_12, "1-2");
+ checkResult(zeroForNull, ITERABLE_123, "1-2-3");
+ checkResult(zeroForNull, ITERABLE_NULL, "0");
+ checkResult(zeroForNull, ITERABLE_NULL_NULL, "0-0");
+ checkResult(zeroForNull, ITERABLE_NULL_1, "0-1");
+ checkResult(zeroForNull, ITERABLE_1_NULL, "1-0");
+ checkResult(zeroForNull, ITERABLE_1_NULL_2, "1-0-2");
+ checkResult(zeroForNull, ITERABLE_FOUR_NULLS, "0-0-0-0");
+ }
+
+ private static void checkNoOutput(Joiner joiner, Iterable<Integer> set) {
+ Object[] array = Iterables.toArray(set, Integer.class);
+ assertEquals("", joiner.join(set));
+ assertEquals("", joiner.join(array));
+
+ StringBuilder sb1 = new StringBuilder();
+ assertSame(sb1, joiner.appendTo(sb1, set));
+ assertEquals(0, sb1.length());
+
+ StringBuilder sb2 = new StringBuilder();
+ assertSame(sb2, joiner.appendTo(sb2, array));
+ assertEquals(0, sb2.length());
+
+ try {
+ joiner.appendTo(NASTY_APPENDABLE, set);
+ joiner.appendTo(NASTY_APPENDABLE, array);
+ } catch (IOException e) {
+ throw new AssertionError(e);
+ }
+ }
+
+ private static final Appendable NASTY_APPENDABLE = new Appendable() {
+ public Appendable append(CharSequence csq) throws IOException {
+ throw new IOException();
+ }
+ public Appendable append(CharSequence csq, int start, int end)
+ throws IOException {
+ throw new IOException();
+ }
+ public Appendable append(char c) throws IOException {
+ throw new IOException();
+ }
+ };
+
+ private static void checkResult(
+ Joiner joiner, Iterable<Integer> parts, String expected) {
+ Integer[] partsArray = Iterables.toArray(parts, Integer.class);
+
+ assertEquals(expected, joiner.join(parts));
+
+ StringBuilder sb1 = new StringBuilder().append('x');
+ joiner.appendTo(sb1, parts);
+ assertEquals("x" + expected, sb1.toString());
+
+ assertEquals(expected, joiner.join(partsArray));
+
+ StringBuilder sb2 = new StringBuilder().append('x');
+ joiner.appendTo(sb2, partsArray);
+ assertEquals("x" + expected, sb2.toString());
+
+ int num = partsArray.length - 2;
+ if (num >= 0) {
+ Object[] rest = new Integer[num];
+ for (int i = 0; i < num; i++) {
+ rest[i] = partsArray[i + 2];
+ }
+
+ assertEquals(expected, joiner.join(partsArray[0], partsArray[1], rest));
+
+ StringBuilder sb3 = new StringBuilder().append('x');
+ joiner.appendTo(sb3, partsArray[0], partsArray[1], rest);
+ assertEquals("x" + expected, sb3.toString());
+ }
+ }
+
+ public void test_useForNull_skipNulls() {
+ Joiner j = Joiner.on("x").useForNull("y");
+ try {
+ j.skipNulls();
+ fail();
+ } catch (UnsupportedOperationException expected) {
+ }
+ }
+
+ public void test_skipNulls_useForNull() {
+ Joiner j = Joiner.on("x").skipNulls();
+ try {
+ j.useForNull("y");
+ fail();
+ } catch (UnsupportedOperationException expected) {
+ }
+ }
+
+ public void test_useForNull_twice() {
+ Joiner j = Joiner.on("x").useForNull("y");
+ try {
+ j.useForNull("y");
+ fail();
+ } catch (UnsupportedOperationException expected) {
+ }
+ }
+
+ public void testMap() {
+ MapJoiner j = Joiner.on(";").withKeyValueSeparator(":");
+ assertEquals("", j.join(ImmutableMap.of()));
+ assertEquals(":", j.join(ImmutableMap.of("", "")));
+
+ Map<String, String> mapWithNulls = Maps.newLinkedHashMap();
+ mapWithNulls.put("a", null);
+ mapWithNulls.put(null, "b");
+
+ try {
+ j.join(mapWithNulls);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+
+ assertEquals("a:00;00:b", j.useForNull("00").join(mapWithNulls));
+
+ StringBuilder sb = new StringBuilder();
+ j.appendTo(sb, ImmutableMap.of(1, 2, 3, 4, 5, 6));
+ assertEquals("1:2;3:4;5:6", sb.toString());
+ }
+
+ public void test_skipNulls_onMap() {
+ Joiner j = Joiner.on(",").skipNulls();
+ try {
+ j.withKeyValueSeparator("/");
+ fail();
+ } catch (UnsupportedOperationException expected) {
+ }
+ }
+
+ private static class DontStringMeBro implements CharSequence {
+ public int length() {
+ return 3;
+ }
+ public char charAt(int index) {
+ return "foo".charAt(index);
+ }
+ public CharSequence subSequence(int start, int end) {
+ return "foo".subSequence(start, end);
+ }
+ @Override public String toString() {
+ Assert.fail("shouldn't be invoked");
+ return null;
+ }
+ }
+
+ public void testDontConvertCharSequenceToString() {
+ assertEquals("foo,foo", Joiner.on(",").join(
+ new DontStringMeBro(), new DontStringMeBro()));
+ assertEquals("foo,bar,foo", Joiner.on(",").useForNull("bar").join(
+ new DontStringMeBro(), null, new DontStringMeBro()));
+ }
+
+ public void testNullPointers() throws Exception {
+ NullPointerTester tester = new NullPointerTester();
+ tester.setDefault(StringBuilder.class, new StringBuilder());
+ tester.testAllPublicStaticMethods(Joiner.class);
+ tester.testAllPublicInstanceMethods(Joiner.on(","));
+ tester.testAllPublicInstanceMethods(Joiner.on(",").skipNulls());
+ tester.testAllPublicInstanceMethods(Joiner.on(",").useForNull("x"));
+ tester.testAllPublicInstanceMethods(
+ Joiner.on(",").withKeyValueSeparator("="));
+ }
+}
diff --git a/test/com/google/common/base/ObjectsTest.java b/test/com/google/common/base/ObjectsTest.java
new file mode 100644
index 0000000..80ba2a3
--- /dev/null
+++ b/test/com/google/common/base/ObjectsTest.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.base;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for {@link Objects}.
+ *
+ * @author Laurence Gonsalves
+ */
+public class ObjectsTest extends TestCase {
+ public void testEqual() throws Exception {
+ assertTrue(Objects.equal(1, 1));
+ assertTrue(Objects.equal(null, null));
+
+ // test distinct string objects
+ String s1 = "foobar";
+ String s2 = new String(s1);
+ assertTrue(Objects.equal(s1, s2));
+
+ assertFalse(Objects.equal(s1, null));
+ assertFalse(Objects.equal(null, s1));
+ assertFalse(Objects.equal("foo", "bar"));
+ assertFalse(Objects.equal("1", 1));
+ }
+
+ public void testHashCode() throws Exception {
+ int h1 = Objects.hashCode(1, "two", 3.0);
+ int h2 = Objects.hashCode(new Integer(1), new String("two"),
+ new Double(3.0));
+ // repeatable
+ assertEquals(h1, h2);
+
+ // These don't strictly need to be true, but they're nice properties.
+ assertTrue(Objects.hashCode(1, 2, null) != Objects.hashCode(1, 2));
+ assertTrue(Objects.hashCode(1, 2, null) != Objects.hashCode(1, null, 2));
+ assertTrue(Objects.hashCode(1, null, 2) != Objects.hashCode(1, 2));
+ assertTrue(Objects.hashCode(1, 2, 3) != Objects.hashCode(3, 2, 1));
+ assertTrue(Objects.hashCode(1, 2, 3) != Objects.hashCode(2, 3, 1));
+ }
+}
diff --git a/test/com/google/common/base/PreconditionsTest.java b/test/com/google/common/base/PreconditionsTest.java
new file mode 100644
index 0000000..096d648
--- /dev/null
+++ b/test/com/google/common/base/PreconditionsTest.java
@@ -0,0 +1,383 @@
+/*
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.base;
+
+import com.google.common.collect.Iterables;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.TreeSet;
+
+/**
+ * Unit test for {@link Preconditions}.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ */
+public class PreconditionsTest extends TestCase {
+ public void testCheckArgument_simple_success() {
+ Preconditions.checkArgument(true);
+ }
+
+ public void testCheckArgument_simple_failure() {
+ try {
+ Preconditions.checkArgument(false);
+ fail("no exception thrown");
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ public void testCheckArgument_simpleMessage_success() {
+ Preconditions.checkArgument(true, IGNORE_ME);
+ }
+
+ public void testCheckArgument_simpleMessage_failure() {
+ try {
+ Preconditions.checkArgument(false, new Message());
+ fail("no exception thrown");
+ } catch (IllegalArgumentException expected) {
+ verifySimpleMessage(expected);
+ }
+ }
+
+ public void testCheckArgument_nullMessage_failure() {
+ try {
+ Preconditions.checkArgument(false, null);
+ fail("no exception thrown");
+ } catch (IllegalArgumentException expected) {
+ assertEquals("null", expected.getMessage());
+ }
+ }
+
+ public void testCheckArgument_complexMessage_success() {
+ Preconditions.checkArgument(true, "%s", IGNORE_ME);
+ }
+
+ public void testCheckArgument_complexMessage_failure() {
+ try {
+ Preconditions.checkArgument(false, FORMAT, 5);
+ fail("no exception thrown");
+ } catch (IllegalArgumentException expected) {
+ verifyComplexMessage(expected);
+ }
+ }
+
+ public void testCheckState_simple_success() {
+ Preconditions.checkState(true);
+ }
+
+ public void testCheckState_simple_failure() {
+ try {
+ Preconditions.checkState(false);
+ fail("no exception thrown");
+ } catch (IllegalStateException expected) {
+ }
+ }
+
+ public void testCheckState_simpleMessage_success() {
+ Preconditions.checkState(true, IGNORE_ME);
+ }
+
+ public void testCheckState_simpleMessage_failure() {
+ try {
+ Preconditions.checkState(false, new Message());
+ fail("no exception thrown");
+ } catch (IllegalStateException expected) {
+ verifySimpleMessage(expected);
+ }
+ }
+
+ public void testCheckState_nullMessage_failure() {
+ try {
+ Preconditions.checkState(false, null);
+ fail("no exception thrown");
+ } catch (IllegalStateException expected) {
+ assertEquals("null", expected.getMessage());
+ }
+ }
+
+ public void testCheckState_complexMessage_success() {
+ Preconditions.checkState(true, "%s", IGNORE_ME);
+ }
+
+ public void testCheckState_complexMessage_failure() {
+ try {
+ Preconditions.checkState(false, FORMAT, 5);
+ fail("no exception thrown");
+ } catch (IllegalStateException expected) {
+ verifyComplexMessage(expected);
+ }
+ }
+
+ private static final String NON_NULL_STRING = "foo";
+
+ public void testCheckNotNull_simple_success() {
+ String result = Preconditions.checkNotNull(NON_NULL_STRING);
+ assertSame(NON_NULL_STRING, result);
+ }
+
+ public void testCheckNotNull_simple_failure() {
+ try {
+ Preconditions.checkNotNull(null);
+ fail("no exception thrown");
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testCheckNotNull_simpleMessage_success() {
+ String result = Preconditions.checkNotNull(NON_NULL_STRING, IGNORE_ME);
+ assertSame(NON_NULL_STRING, result);
+ }
+
+ public void testCheckNotNull_simpleMessage_failure() {
+ try {
+ Preconditions.checkNotNull(null, new Message());
+ fail("no exception thrown");
+ } catch (NullPointerException expected) {
+ verifySimpleMessage(expected);
+ }
+ }
+
+ public void testCheckNotNull_complexMessage_success() {
+ String result = Preconditions.checkNotNull(
+ NON_NULL_STRING, "%s", IGNORE_ME);
+ assertSame(NON_NULL_STRING, result);
+ }
+
+ public void testCheckNotNull_complexMessage_failure() {
+ try {
+ Preconditions.checkNotNull(null, FORMAT, 5);
+ fail("no exception thrown");
+ } catch (NullPointerException expected) {
+ verifyComplexMessage(expected);
+ }
+ }
+
+ private static final Iterable<Integer> NO_NULL_COLLECTION
+ = Collections.singleton(1);
+ private static final Iterable<Integer> CONTAINS_NULL_COLLECTION
+ = Arrays.asList(1, null, 2);
+ private static final Iterable<Integer> NO_NULL_ITERABLE
+ = Iterables.unmodifiableIterable(NO_NULL_COLLECTION);
+ private static final Iterable<Integer> CONTAINS_NULL_ITERABLE
+ = Iterables.unmodifiableIterable(CONTAINS_NULL_COLLECTION);
+ private static final Iterable<Integer> NPE_THROWING_COLLECTION
+ = new TreeSet<Integer>(Arrays.asList(1, 2));
+
+ public void testCheckElementIndex_ok() {
+ assertEquals(0, Preconditions.checkElementIndex(0, 1));
+ assertEquals(0, Preconditions.checkElementIndex(0, 2));
+ assertEquals(1, Preconditions.checkElementIndex(1, 2));
+ }
+
+ public void testCheckElementIndex_badSize() {
+ try {
+ Preconditions.checkElementIndex(1, -1);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ // don't care what the message text is, as this is an invalid usage of
+ // the Preconditions class, unlike all the other exceptions it throws
+ }
+ }
+
+ public void testCheckElementIndex_negative() {
+ try {
+ Preconditions.checkElementIndex(-1, 1);
+ fail();
+ } catch (IndexOutOfBoundsException expected) {
+ assertEquals("index (-1) must not be negative", expected.getMessage());
+ }
+ }
+
+ public void testCheckElementIndex_tooHigh() {
+ try {
+ Preconditions.checkElementIndex(1, 1);
+ fail();
+ } catch (IndexOutOfBoundsException expected) {
+ assertEquals("index (1) must be less than size (1)",
+ expected.getMessage());
+ }
+ }
+
+ public void testCheckElementIndex_withDesc_negative() {
+ try {
+ Preconditions.checkElementIndex(-1, 1, "foo");
+ fail();
+ } catch (IndexOutOfBoundsException expected) {
+ assertEquals("foo (-1) must not be negative", expected.getMessage());
+ }
+ }
+
+ public void testCheckElementIndex_withDesc_tooHigh() {
+ try {
+ Preconditions.checkElementIndex(1, 1, "foo");
+ fail();
+ } catch (IndexOutOfBoundsException expected) {
+ assertEquals("foo (1) must be less than size (1)",
+ expected.getMessage());
+ }
+ }
+
+ public void testCheckPositionIndex_ok() {
+ assertEquals(0, Preconditions.checkPositionIndex(0, 0));
+ assertEquals(0, Preconditions.checkPositionIndex(0, 1));
+ assertEquals(1, Preconditions.checkPositionIndex(1, 1));
+ }
+
+ public void testCheckPositionIndex_badSize() {
+ try {
+ Preconditions.checkPositionIndex(1, -1);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ // don't care what the message text is, as this is an invalid usage of
+ // the Preconditions class, unlike all the other exceptions it throws
+ }
+ }
+
+ public void testCheckPositionIndex_negative() {
+ try {
+ Preconditions.checkPositionIndex(-1, 1);
+ fail();
+ } catch (IndexOutOfBoundsException expected) {
+ assertEquals("index (-1) must not be negative", expected.getMessage());
+ }
+ }
+
+ public void testCheckPositionIndex_tooHigh() {
+ try {
+ Preconditions.checkPositionIndex(2, 1);
+ fail();
+ } catch (IndexOutOfBoundsException expected) {
+ assertEquals("index (2) must not be greater than size (1)",
+ expected.getMessage());
+ }
+ }
+
+ public void testCheckPositionIndex_withDesc_negative() {
+ try {
+ Preconditions.checkPositionIndex(-1, 1, "foo");
+ fail();
+ } catch (IndexOutOfBoundsException expected) {
+ assertEquals("foo (-1) must not be negative", expected.getMessage());
+ }
+ }
+
+ public void testCheckPositionIndex_withDesc_tooHigh() {
+ try {
+ Preconditions.checkPositionIndex(2, 1, "foo");
+ fail();
+ } catch (IndexOutOfBoundsException expected) {
+ assertEquals("foo (2) must not be greater than size (1)",
+ expected.getMessage());
+ }
+ }
+
+ public void testCheckPositionIndexes_ok() {
+ Preconditions.checkPositionIndexes(0, 0, 0);
+ Preconditions.checkPositionIndexes(0, 0, 1);
+ Preconditions.checkPositionIndexes(0, 1, 1);
+ Preconditions.checkPositionIndexes(1, 1, 1);
+ }
+
+ public void testCheckPositionIndexes_badSize() {
+ try {
+ Preconditions.checkPositionIndexes(1, 1, -1);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ public void testCheckPositionIndex_startNegative() {
+ try {
+ Preconditions.checkPositionIndexes(-1, 1, 1);
+ fail();
+ } catch (IndexOutOfBoundsException expected) {
+ assertEquals("start index (-1) must not be negative",
+ expected.getMessage());
+ }
+ }
+
+ public void testCheckPositionIndexes_endTooHigh() {
+ try {
+ Preconditions.checkPositionIndexes(0, 2, 1);
+ fail();
+ } catch (IndexOutOfBoundsException expected) {
+ assertEquals("end index (2) must not be greater than size (1)",
+ expected.getMessage());
+ }
+ }
+
+ public void testCheckPositionIndexes_reversed() {
+ try {
+ Preconditions.checkPositionIndexes(1, 0, 1);
+ fail();
+ } catch (IndexOutOfBoundsException expected) {
+ assertEquals("end index (0) must not be less than start index (1)",
+ expected.getMessage());
+ }
+ }
+
+ public void testFormat() {
+ assertEquals("%s", Preconditions.format("%s"));
+ assertEquals("5", Preconditions.format("%s", 5));
+ assertEquals("foo [5]", Preconditions.format("foo", 5));
+ assertEquals("foo [5, 6, 7]", Preconditions.format("foo", 5, 6, 7));
+ assertEquals("%s 1 2", Preconditions.format("%s %s %s", "%s", 1, 2));
+ assertEquals(" [5, 6]", Preconditions.format("", 5, 6));
+ assertEquals("123", Preconditions.format("%s%s%s", 1, 2, 3));
+ assertEquals("1%s%s", Preconditions.format("%s%s%s", 1));
+ assertEquals("5 + 6 = 11", Preconditions.format("%s + 6 = 11", 5));
+ assertEquals("5 + 6 = 11", Preconditions.format("5 + %s = 11", 6));
+ assertEquals("5 + 6 = 11", Preconditions.format("5 + 6 = %s", 11));
+ assertEquals("5 + 6 = 11", Preconditions.format("%s + %s = %s", 5, 6, 11));
+ assertEquals("null [null, null]",
+ Preconditions.format("%s", null, null, null));
+ try {
+ Preconditions.format(null, 5, 6);
+ fail("no exception thrown");
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ private static final Object IGNORE_ME = new Object() {
+ @Override public String toString() {
+ fail();
+ return null;
+ }
+ };
+
+ private static class Message {
+ boolean invoked;
+ @Override public String toString() {
+ assertFalse(invoked);
+ invoked = true;
+ return "A message";
+ }
+ }
+
+ private static final String FORMAT = "I ate %s pies.";
+
+ private static void verifySimpleMessage(Exception e) {
+ assertEquals("A message", e.getMessage());
+ }
+
+ private static void verifyComplexMessage(Exception e) {
+ assertEquals("I ate 5 pies.", e.getMessage());
+ }
+}
diff --git a/test/com/google/common/base/PredicatesTest.java b/test/com/google/common/base/PredicatesTest.java
new file mode 100644
index 0000000..36626ae
--- /dev/null
+++ b/test/com/google/common/base/PredicatesTest.java
@@ -0,0 +1,862 @@
+/*
+ * Copyright (C) 2005 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.base;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.common.testutils.EqualsTester;
+import com.google.common.testutils.NullPointerTester;
+import com.google.common.testutils.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Unit test for {@link Predicates}.
+ *
+ * @author Kevin Bourrillion
+ */
+public class PredicatesTest extends TestCase {
+ private static final Predicate<Integer> TRUE = Predicates.alwaysTrue();
+ private static final Predicate<Integer> FALSE = Predicates.alwaysFalse();
+ private static final Predicate<Integer> NEVER_REACHED =
+ new Predicate<Integer>() {
+ public boolean apply(Integer i) {
+ fail("This predicate should never have been evaluated");
+ return false;
+ }
+ };
+
+ /** Instantiable predicate with reasonable hashCode() and equals() methods. */
+ static class IsOdd implements Predicate<Integer>, Serializable {
+ private static final long serialVersionUID = 0x150ddL;
+ public boolean apply(Integer i) {
+ return (i.intValue() & 1) == 1;
+ }
+ @Override public int hashCode() {
+ return 0x150dd;
+ }
+ @Override public boolean equals(Object obj) {
+ return obj instanceof IsOdd;
+ }
+ @Override public String toString() {
+ return "IsOdd";
+ }
+ }
+
+ /**
+ * Generates a new Predicate per call.
+ *
+ * <p>Creating a new Predicate each time helps catch cases where code is
+ * using {@code x == y} instead of {@code x.equals(y)}.
+ */
+ private static IsOdd isOdd() {
+ return new IsOdd();
+ }
+
+ /*
+ * Tests for Predicates.alwaysTrue().
+ */
+
+ public void testAlwaysTrue_apply() {
+ assertEvalsToTrue(Predicates.alwaysTrue());
+ }
+
+ public void testAlwaysTrue_equality() throws Exception {
+ new EqualsTester(TRUE)
+ .addEqualObject(Predicates.alwaysTrue())
+ .addNotEqualObject(isOdd())
+ .addNotEqualObject(Predicates.alwaysFalse())
+ .testEquals();
+ }
+
+ public void testAlwaysTrue_serialization() {
+ checkSerialization(Predicates.alwaysTrue());
+ }
+
+ /*
+ * Tests for Predicates.alwaysFalse().
+ */
+
+ public void testAlwaysFalse_apply() throws Exception {
+ assertEvalsToFalse(Predicates.alwaysFalse());
+ }
+
+ public void testAlwaysFalse_equality() throws Exception {
+ new EqualsTester(FALSE)
+ .addEqualObject(Predicates.alwaysFalse())
+ .addNotEqualObject(isOdd())
+ .addNotEqualObject(Predicates.alwaysTrue())
+ .testEquals();
+ }
+
+ public void testAlwaysFalse_serialization() {
+ checkSerialization(Predicates.alwaysFalse());
+ }
+
+ /*
+ * Tests for Predicates.not(predicate).
+ */
+
+ public void testNot_apply() {
+ assertEvalsToTrue(Predicates.not(FALSE));
+ assertEvalsToFalse(Predicates.not(TRUE));
+ assertEvalsLikeOdd(Predicates.not(Predicates.not(isOdd())));
+ }
+
+ public void testNot_equality() {
+ new EqualsTester(Predicates.not(isOdd()))
+ .addEqualObject(Predicates.not(isOdd()))
+ .addNotEqualObject(Predicates.not(TRUE))
+ .addNotEqualObject(isOdd())
+ .testEquals();
+ }
+
+ public void testNot_equalityForNotOfKnownValues() {
+ /* Would be nice to have .addEqualObject(Predicates.not(FALSE)). */
+ new EqualsTester(TRUE)
+ .addEqualObject(Predicates.alwaysTrue())
+ .addNotEqualObject(FALSE)
+ .addNotEqualObject(Predicates.not(TRUE))
+ .testEquals();
+
+ /* Would be nice to have .addEqualObject(Predicates.not(TRUE)). */
+ new EqualsTester(FALSE)
+ .addEqualObject(Predicates.alwaysFalse())
+ .addNotEqualObject(TRUE)
+ .addNotEqualObject(Predicates.not(FALSE))
+ .testEquals();
+
+ /* Would be nice to have .addEqualObject(Predicates.not(notNull())). */
+ new EqualsTester(Predicates.isNull())
+ .addEqualObject(Predicates.isNull())
+ .addNotEqualObject(Predicates.notNull())
+ .addNotEqualObject(Predicates.not(Predicates.isNull()))
+ .testEquals();
+
+ /* Would be nice to have .addEqualObject(Predicates.not(isNull())). */
+ new EqualsTester(Predicates.notNull())
+ .addEqualObject(Predicates.notNull())
+ .addNotEqualObject(Predicates.isNull())
+ .addNotEqualObject(Predicates.not(Predicates.notNull()))
+ .testEquals();
+ }
+
+ public void testNot_serialization() {
+ checkSerialization(Predicates.not(isOdd()));
+ }
+
+ /*
+ * Tests for all the different flavors of Predicates.and().
+ */
+
+ @SuppressWarnings("unchecked")
+ public void testAnd_applyNoArgs() {
+ assertEvalsToTrue(Predicates.and());
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testAnd_equalityNoArgs() {
+ new EqualsTester(Predicates.and())
+ .addEqualObject(Predicates.and())
+ .addNotEqualObject(Predicates.and(FALSE))
+ .addNotEqualObject(Predicates.or())
+ .testEquals();
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testAnd_serializationNoArgs() {
+ checkSerialization(Predicates.and());
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testAnd_applyOneArg() {
+ assertEvalsLikeOdd(Predicates.and(isOdd()));
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testAnd_equalityOneArg() {
+ new EqualsTester(Predicates.and(NEVER_REACHED))
+ .addEqualObject(Predicates.and(NEVER_REACHED))
+ .addNotEqualObject(Predicates.and(NEVER_REACHED, FALSE))
+ .addNotEqualObject(Predicates.and(isOdd()))
+ .addNotEqualObject(Predicates.and())
+ .addNotEqualObject(Predicates.or(NEVER_REACHED))
+ .testEquals();
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testAnd_serializationOneArg() {
+ checkSerialization(Predicates.and(isOdd()));
+ }
+
+ public void testAnd_applyBinary() {
+ assertEvalsLikeOdd(Predicates.and(isOdd(), TRUE));
+ assertEvalsLikeOdd(Predicates.and(TRUE, isOdd()));
+ assertEvalsToFalse(Predicates.and(FALSE, NEVER_REACHED));
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testAnd_equalityBinary() {
+ new EqualsTester(Predicates.and(TRUE, NEVER_REACHED))
+ .addEqualObject(Predicates.and(TRUE, NEVER_REACHED))
+ .addNotEqualObject(Predicates.and(NEVER_REACHED, TRUE))
+ .addNotEqualObject(Predicates.and(TRUE))
+ .addNotEqualObject(Predicates.or(TRUE, NEVER_REACHED))
+ .testEquals();
+ }
+
+ public void testAnd_serializationBinary() {
+ checkSerialization(Predicates.and(TRUE, isOdd()));
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testAnd_applyTernary() {
+ assertEvalsLikeOdd(Predicates.and(isOdd(), TRUE, TRUE));
+ assertEvalsLikeOdd(Predicates.and(TRUE, isOdd(), TRUE));
+ assertEvalsLikeOdd(Predicates.and(TRUE, TRUE, isOdd()));
+ assertEvalsToFalse(Predicates.and(TRUE, FALSE, NEVER_REACHED));
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testAnd_equalityTernary() {
+ new EqualsTester(Predicates.and(TRUE, isOdd(), NEVER_REACHED))
+ .addEqualObject(Predicates.and(TRUE, isOdd(), NEVER_REACHED))
+ .addNotEqualObject(Predicates.and(isOdd(), NEVER_REACHED, TRUE))
+ .addNotEqualObject(Predicates.and(TRUE))
+ .addNotEqualObject(Predicates.or(TRUE, isOdd(), NEVER_REACHED))
+ .testEquals();
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testAnd_serializationTernary() {
+ checkSerialization(Predicates.and(TRUE, isOdd(), FALSE));
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testAnd_applyIterable() {
+ Collection<Predicate<Integer>> empty = Arrays.asList();
+ assertEvalsToTrue(Predicates.and(empty));
+ assertEvalsLikeOdd(Predicates.and(Arrays.asList(isOdd())));
+ assertEvalsLikeOdd(Predicates.and(Arrays.asList(TRUE, isOdd())));
+ assertEvalsToFalse(Predicates.and(Arrays.asList(FALSE, NEVER_REACHED)));
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testAnd_equalityIterable() {
+ new EqualsTester(Predicates.and(Arrays.asList(TRUE, NEVER_REACHED)))
+ .addEqualObject(Predicates.and(Arrays.asList(TRUE, NEVER_REACHED)))
+ .addEqualObject(Predicates.and(TRUE, NEVER_REACHED))
+ .addNotEqualObject(Predicates.and(FALSE, NEVER_REACHED))
+ .addNotEqualObject(Predicates.or(TRUE, NEVER_REACHED))
+ .testEquals();
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testAnd_serializationIterable() {
+ checkSerialization(Predicates.and(Arrays.asList(TRUE, FALSE)));
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testAnd_arrayDefensivelyCopied() {
+ Predicate[] array = {Predicates.alwaysFalse()};
+ Predicate<Object> predicate = Predicates.and(array);
+ assertFalse(predicate.apply(1));
+ array[0] = Predicates.alwaysTrue();
+ assertFalse(predicate.apply(1));
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testAnd_listDefensivelyCopied() {
+ List list = new ArrayList<Predicate>();
+ Predicate<Object> predicate = Predicates.and(list);
+ assertTrue(predicate.apply(1));
+ list.add(Predicates.alwaysFalse());
+ assertTrue(predicate.apply(1));
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testAnd_iterableDefensivelyCopied() {
+ final List list = new ArrayList<Predicate>();
+ Iterable iterable = new Iterable<Predicate>() {
+ public Iterator<Predicate> iterator() {
+ return list.iterator();
+ }
+ };
+ Predicate<Object> predicate = Predicates.and(iterable);
+ assertTrue(predicate.apply(1));
+ list.add(Predicates.alwaysFalse());
+ assertTrue(predicate.apply(1));
+ }
+
+ /*
+ * Tests for all the different flavors of Predicates.or().
+ */
+
+ @SuppressWarnings("unchecked")
+ public void testOr_applyNoArgs() {
+ assertEvalsToFalse(Predicates.or());
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testOr_equalityNoArgs() {
+ new EqualsTester(Predicates.or())
+ .addEqualObject(Predicates.or())
+ .addNotEqualObject(Predicates.or(TRUE))
+ .addNotEqualObject(Predicates.and())
+ .testEquals();
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testOr_serializationNoArgs() {
+ checkSerialization(Predicates.or());
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testOr_applyOneArg() {
+ assertEvalsToTrue(Predicates.or(TRUE));
+ assertEvalsToFalse(Predicates.or(FALSE));
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testOr_equalityOneArg() {
+ new EqualsTester(Predicates.or(NEVER_REACHED))
+ .addEqualObject(Predicates.or(NEVER_REACHED))
+ .addNotEqualObject(Predicates.or(NEVER_REACHED, TRUE))
+ .addNotEqualObject(Predicates.or(TRUE))
+ .addNotEqualObject(Predicates.or())
+ .addNotEqualObject(Predicates.and(NEVER_REACHED))
+ .testEquals();
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testOr_serializationOneArg() {
+ checkSerialization(Predicates.or(isOdd()));
+ }
+
+ public void testOr_applyBinary() {
+ Predicate<Integer> falseOrFalse = Predicates.or(FALSE, FALSE);
+ Predicate<Integer> falseOrTrue = Predicates.or(FALSE, TRUE);
+ Predicate<Integer> trueOrAnything = Predicates.or(TRUE, NEVER_REACHED);
+
+ assertEvalsToFalse(falseOrFalse);
+ assertEvalsToTrue(falseOrTrue);
+ assertEvalsToTrue(trueOrAnything);
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testOr_equalityBinary() {
+ new EqualsTester(Predicates.or(FALSE, NEVER_REACHED))
+ .addEqualObject(Predicates.or(FALSE, NEVER_REACHED))
+ .addNotEqualObject(Predicates.or(NEVER_REACHED, FALSE))
+ .addNotEqualObject(Predicates.or(TRUE))
+ .addNotEqualObject(Predicates.and(FALSE, NEVER_REACHED))
+ .testEquals();
+ }
+
+ public void testOr_serializationBinary() {
+ checkSerialization(Predicates.or(isOdd(), TRUE));
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testOr_applyTernary() {
+ assertEvalsLikeOdd(Predicates.or(isOdd(), FALSE, FALSE));
+ assertEvalsLikeOdd(Predicates.or(FALSE, isOdd(), FALSE));
+ assertEvalsLikeOdd(Predicates.or(FALSE, FALSE, isOdd()));
+ assertEvalsToTrue(Predicates.or(FALSE, TRUE, NEVER_REACHED));
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testOr_equalityTernary() {
+ new EqualsTester(Predicates.or(FALSE, NEVER_REACHED, TRUE))
+ .addEqualObject(Predicates.or(FALSE, NEVER_REACHED, TRUE))
+ .addNotEqualObject(Predicates.or(TRUE, NEVER_REACHED, FALSE))
+ .addNotEqualObject(Predicates.or(TRUE))
+ .addNotEqualObject(Predicates.and(FALSE, NEVER_REACHED, TRUE))
+ .testEquals();
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testOr_serializationTernary() {
+ checkSerialization(Predicates.or(FALSE, isOdd(), TRUE));
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testOr_applyIterable() {
+ Predicate<Integer> vacuouslyFalse =
+ Predicates.or(Collections.<Predicate<Integer>>emptyList());
+ Predicate<Integer> troo = Predicates.or(Collections.singletonList(TRUE));
+ /*
+ * newLinkedList() takes varargs. TRUE and FALSE are both instances of
+ * Predicate<Integer>, so the call is safe.
+ */
+ Predicate<Integer> trueAndFalse = Predicates.or(Arrays.asList(TRUE, FALSE));
+
+ assertEvalsToFalse(vacuouslyFalse);
+ assertEvalsToTrue(troo);
+ assertEvalsToTrue(trueAndFalse);
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testOr_equalityIterable() {
+ new EqualsTester(Predicates.or(Arrays.asList(FALSE, NEVER_REACHED)))
+ .addEqualObject(Predicates.or(Arrays.asList(FALSE, NEVER_REACHED)))
+ .addEqualObject(Predicates.or(FALSE, NEVER_REACHED))
+ .addNotEqualObject(Predicates.or(TRUE, NEVER_REACHED))
+ .addNotEqualObject(Predicates.and(FALSE, NEVER_REACHED))
+ .testEquals();
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testOr_serializationIterable() {
+ Predicate<Integer> pre = Predicates.or(Arrays.asList(TRUE, FALSE));
+ Predicate<Integer> post = SerializableTester.reserializeAndAssert(pre);
+ assertEquals(pre.apply(0), post.apply(0));
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testOr_arrayDefensivelyCopied() {
+ Predicate[] array = {Predicates.alwaysFalse()};
+ Predicate<Object> predicate = Predicates.or(array);
+ assertFalse(predicate.apply(1));
+ array[0] = Predicates.alwaysTrue();
+ assertFalse(predicate.apply(1));
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testOr_listDefensivelyCopied() {
+ List list = new ArrayList<Predicate>();
+ Predicate<Object> predicate = Predicates.or(list);
+ assertFalse(predicate.apply(1));
+ list.add(Predicates.alwaysTrue());
+ assertFalse(predicate.apply(1));
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testOr_iterableDefensivelyCopied() {
+ final List list = new ArrayList<Predicate>();
+ Iterable iterable = new Iterable<Predicate>() {
+ public Iterator<Predicate> iterator() {
+ return list.iterator();
+ }
+ };
+ Predicate<Object> predicate = Predicates.or(iterable);
+ assertFalse(predicate.apply(1));
+ list.add(Predicates.alwaysTrue());
+ assertFalse(predicate.apply(1));
+ }
+
+ /*
+ * Tests for Predicates.equalTo(x).
+ */
+
+ public void testIsEqualTo_apply() {
+ Predicate<Integer> isOne = Predicates.equalTo(1);
+
+ assertTrue(isOne.apply(1));
+ assertFalse(isOne.apply(2));
+ assertFalse(isOne.apply(null));
+ }
+
+ public void testIsEqualTo_equality() {
+ new EqualsTester(Predicates.equalTo(1))
+ .addEqualObject(Predicates.equalTo(1))
+ .addNotEqualObject(Predicates.equalTo(2))
+ .addNotEqualObject(Predicates.equalTo(null))
+ .testEquals();
+ }
+
+ public void testIsEqualTo_serialization() {
+ checkSerialization(Predicates.equalTo(1));
+ }
+
+ public void testIsEqualToNull_apply() {
+ Predicate<Integer> isNull = Predicates.equalTo(null);
+ assertTrue(isNull.apply(null));
+ assertFalse(isNull.apply(1));
+ }
+
+ public void testIsEqualToNull_equality() {
+ new EqualsTester(Predicates.equalTo(null))
+ .addEqualObject(Predicates.equalTo(null))
+ .addNotEqualObject(Predicates.equalTo(1))
+ .addNotEqualObject(Predicates.equalTo("null"))
+ .testEquals();
+ }
+
+ public void testIsEqualToNull_serialization() {
+ checkSerialization(Predicates.equalTo(null));
+ }
+
+ /*
+ * Tests for Predicates.instanceOf(x).
+ */
+
+ public void testIsInstanceOf_apply() {
+ Predicate<Object> isInteger = Predicates.instanceOf(Integer.class);
+
+ assertTrue(isInteger.apply(1));
+ assertFalse(isInteger.apply(2.0f));
+ assertFalse(isInteger.apply(""));
+ assertFalse(isInteger.apply(null));
+ }
+
+ public void testIsInstanceOf_subclass() {
+ Predicate<Object> isNumber = Predicates.instanceOf(Number.class);
+
+ assertTrue(isNumber.apply(1));
+ assertTrue(isNumber.apply(2.0f));
+ assertFalse(isNumber.apply(""));
+ assertFalse(isNumber.apply(null));
+ }
+
+ public void testIsInstanceOf_interface() {
+ Predicate<Object> isComparable = Predicates.instanceOf(Comparable.class);
+
+ assertTrue(isComparable.apply(1));
+ assertTrue(isComparable.apply(2.0f));
+ assertTrue(isComparable.apply(""));
+ assertFalse(isComparable.apply(null));
+ }
+
+ public void testIsInstanceOf_equality() {
+ new EqualsTester(Predicates.instanceOf(Integer.class))
+ .addEqualObject(Predicates.instanceOf(Integer.class))
+ .addNotEqualObject(Predicates.instanceOf(Number.class))
+ .addNotEqualObject(Predicates.instanceOf(Float.class))
+ .testEquals();
+ }
+
+ public void testIsInstanceOf_serialization() {
+ checkSerialization(Predicates.instanceOf(Integer.class));
+ }
+
+ /*
+ * Tests for Predicates.isNull()
+ */
+
+ public void testIsNull_apply() {
+ Predicate<Integer> isNull = Predicates.isNull();
+ assertTrue(isNull.apply(null));
+ assertFalse(isNull.apply(1));
+ }
+
+ public void testIsNull_equality() {
+ new EqualsTester(Predicates.isNull())
+ .addEqualObject(Predicates.isNull())
+ .addNotEqualObject(Predicates.notNull())
+ .testEquals();
+ }
+
+ public void testIsNull_serialization() {
+ Predicate<String> pre = Predicates.isNull();
+ Predicate<String> post = SerializableTester.reserializeAndAssert(pre);
+ assertEquals(pre.apply("foo"), post.apply("foo"));
+ assertEquals(pre.apply(null), post.apply(null));
+ }
+
+ public void testNotNull_apply() {
+ Predicate<Integer> notNull = Predicates.notNull();
+ assertFalse(notNull.apply(null));
+ assertTrue(notNull.apply(1));
+ }
+
+ public void testNotNull_equality() {
+ new EqualsTester(Predicates.notNull())
+ .addEqualObject(Predicates.notNull())
+ .addNotEqualObject(Predicates.isNull())
+ .testEquals();
+ }
+
+ public void testNotNull_serialization() {
+ checkSerialization(Predicates.notNull());
+ }
+
+ public void testIn_apply() {
+ Collection<Integer> nums = Arrays.asList(1, 5);
+ Predicate<Integer> isOneOrFive = Predicates.in(nums);
+
+ assertTrue(isOneOrFive.apply(1));
+ assertTrue(isOneOrFive.apply(5));
+ assertFalse(isOneOrFive.apply(3));
+ assertFalse(isOneOrFive.apply(null));
+ }
+
+ public void testIn_equality() {
+ Collection<Integer> nums = ImmutableSet.of(1, 5);
+ Collection<Integer> sameOrder = ImmutableSet.of(1, 5);
+ Collection<Integer> differentOrder = ImmutableSet.of(5, 1);
+ Collection<Integer> differentNums = ImmutableSet.of(1, 3, 5);
+
+ new EqualsTester(Predicates.in(nums))
+ .addEqualObject(Predicates.in(nums))
+ .addEqualObject(Predicates.in(sameOrder))
+ .addEqualObject(Predicates.in(differentOrder))
+ .addNotEqualObject(Predicates.in(differentNums))
+ .testEquals();
+ }
+
+ public void testIn_serialization() {
+ checkSerialization(Predicates.in(Arrays.asList(1, 2, 3, null)));
+ }
+
+ public void testIn_handlesNullPointerException() {
+ class CollectionThatThrowsNPE<T> extends ArrayList<T> {
+ private static final long serialVersionUID = 1L;
+
+ @Override public boolean contains(Object element) {
+ Preconditions.checkNotNull(element);
+ return super.contains(element);
+ }
+ }
+ Collection<Integer> nums = new CollectionThatThrowsNPE<Integer>();
+ Predicate<Integer> isFalse = Predicates.in(nums);
+ assertFalse(isFalse.apply(null));
+ }
+
+ public void testIn_handlesClassCastException() {
+ class CollectionThatThrowsCCE<T> extends ArrayList<T> {
+ private static final long serialVersionUID = 1L;
+
+ @Override public boolean contains(Object element) {
+ throw new ClassCastException("");
+ }
+ }
+ Collection<Integer> nums = new CollectionThatThrowsCCE<Integer>();
+ nums.add(3);
+ Predicate<Integer> isThree = Predicates.in(nums);
+ assertFalse(isThree.apply(3));
+ }
+
+ /*
+ * Tests that compilation will work when applying explicit types.
+ */
+ public void testIn_compilesWithExplicitSupertype() {
+ Collection<Number> nums = ImmutableSet.of();
+ Predicate<Number> p1 = Predicates.in(nums);
+ Predicate<Object> p2 = Predicates.<Object>in(nums);
+ // The next two lines are not expected to compile.
+ // Predicate<Integer> p3 = Predicates.in(nums);
+ // Predicate<Integer> p4 = Predicates.<Integer>in(nums);
+ }
+
+ public void testNullPointerExceptions() throws Exception {
+ NullPointerTester tester = new NullPointerTester();
+ tester.testAllPublicStaticMethods(Predicates.class);
+ }
+
+ @SuppressWarnings("unchecked") // varargs
+ public void testCascadingSerialization() throws Exception {
+ // Eclipse says Predicate<Integer>; javac says Predicate<Object>.
+ Predicate<? super Integer> nasty = Predicates.not(Predicates.and(
+ Predicates.or(
+ Predicates.equalTo((Object) 1), Predicates.equalTo(null),
+ Predicates.alwaysFalse(), Predicates.alwaysTrue(),
+ Predicates.isNull(), Predicates.notNull(),
+ Predicates.in(Arrays.asList(1)))));
+ assertEvalsToFalse(nasty);
+
+ Predicate<? super Integer> stillNasty =
+ SerializableTester.reserializeAndAssert(nasty);
+
+ assertEvalsToFalse(stillNasty);
+ }
+
+ // enum singleton pattern
+ private enum TrimStringFunction implements Function<String, String> {
+ INSTANCE;
+
+ public String apply(String string) {
+ return string.trim();
+ }
+ }
+
+ public void testCompose() {
+ Function<String, String> trim = TrimStringFunction.INSTANCE;
+ Predicate<String> equalsFoo = Predicates.equalTo("Foo");
+ Predicate<String> equalsBar = Predicates.equalTo("Bar");
+ Predicate<String> trimEqualsFoo = Predicates.compose(equalsFoo, trim);
+ Function<String, String> identity = Functions.identity();
+
+ assertTrue(trimEqualsFoo.apply("Foo"));
+ assertTrue(trimEqualsFoo.apply(" Foo "));
+ assertFalse(trimEqualsFoo.apply("Foo-b-que"));
+
+ new EqualsTester(trimEqualsFoo)
+ .addEqualObject(Predicates.compose(equalsFoo, trim))
+ .addNotEqualObject(equalsFoo)
+ .addNotEqualObject(trim)
+ .addNotEqualObject(Predicates.compose(equalsFoo, identity))
+ .addNotEqualObject(Predicates.compose(equalsBar, trim))
+ .testEquals();
+
+ SerializableTester.reserializeAndAssert(trimEqualsFoo);
+ }
+
+ public void checkConsistency(
+ Predicate<? super Integer> expected, Predicate<? super Integer> actual) {
+ assertEvalsLike(expected, actual);
+ assertEquals(actual.toString() + " should hash like " + expected.toString(),
+ expected.hashCode(), actual.hashCode());
+ }
+
+ public void testHashCodeForBooleanOperationsIsConsistentWithBooleanLogic() {
+ /*
+ * This isn't a "requirement" yet, as much as it's a "nice to have for
+ * future design."
+ *
+ * Maybe it will be possible to eventually have these predicates do
+ * certain simplifying logical transformations to simpler equivalent
+ * forms. If so, this checks that the hash codes have been chosen in such
+ * a way that the fundamental building-block operations:
+ *
+ * alwaysTrue()
+ * alwaysFalse()
+ * not(p)
+ * and(p1, p2)
+ * or(p1, p2)
+ *
+ * have hashCode() calculations that coincidentally cause equivalent logical
+ * expressions to have equivalent hashCode() values.
+ */
+ Predicate<Integer> p1 = Predicates.isNull();
+ Predicate<Integer> p2 = isOdd();
+ Predicate<Integer> p3 = new Predicate<Integer>() {
+ public boolean apply(Integer i) {
+ return (Integer.bitCount(i) & 1) == 1;
+ }
+ @Override public String toString() {
+ return "oddBitCount";
+ }
+ };
+
+ checkConsistency(
+ p1,
+ Predicates.not(Predicates.not(p1)));
+
+ checkConsistency(
+ Predicates.and(Predicates.not(p1), Predicates.not(p2)),
+ Predicates.not(Predicates.or(p1, p2)));
+
+ checkConsistency(
+ Predicates.or(Predicates.not(p1), Predicates.not(p2)),
+ Predicates.not(Predicates.and(p1, p2)));
+
+ checkConsistency(
+ Predicates.and(Predicates.and(p1, p2), p3),
+ Predicates.and(p1, Predicates.and(p2, p3)));
+
+ checkConsistency(
+ Predicates.or(Predicates.or(p1, p2), p3),
+ Predicates.or(p1, Predicates.or(p2, p3)));
+
+ checkConsistency(
+ Predicates.or(Predicates.and(p1, p2), p3),
+ Predicates.and(Predicates.or(p1, p3), Predicates.or(p2, p3)));
+
+ checkConsistency(
+ Predicates.and(Predicates.or(p1, p2), p3),
+ Predicates.or(Predicates.and(p1, p3), Predicates.and(p2, p3)));
+
+ /*
+ * Now that alwaysFalse and alwaysTrue follow the enum singleton pattern,
+ * the following tests can't call checkConsistency to compare the hash
+ * codes.
+ */
+
+ assertEvalsLike(
+ Predicates.alwaysTrue(),
+ Predicates.not(Predicates.alwaysFalse()));
+
+ assertEvalsLike(
+ Predicates.alwaysFalse(),
+ Predicates.not(Predicates.alwaysTrue()));
+
+ assertEvalsLike(
+ Predicates.alwaysFalse(),
+ Predicates.and(p1, Predicates.not(p1)));
+
+ assertEvalsLike(
+ Predicates.alwaysTrue(),
+ Predicates.or(p1, Predicates.not(p1)));
+ }
+
+ private static void assertEvalsToTrue(Predicate<? super Integer> predicate) {
+ assertTrue(predicate.apply(0));
+ assertTrue(predicate.apply(1));
+ assertTrue(predicate.apply(null));
+ }
+
+ private static void assertEvalsToFalse(Predicate<? super Integer> predicate) {
+ assertFalse(predicate.apply(0));
+ assertFalse(predicate.apply(1));
+ assertFalse(predicate.apply(null));
+ }
+
+ private static void assertEvalsLikeOdd(Predicate<? super Integer> predicate) {
+ assertEvalsLike(isOdd(), predicate);
+ }
+
+ private static void assertEvalsLike(
+ Predicate<? super Integer> expected,
+ Predicate<? super Integer> actual) {
+ assertEvalsLike(expected, actual, 0);
+ assertEvalsLike(expected, actual, 1);
+ assertEvalsLike(expected, actual, null);
+ }
+
+ private static void assertEvalsLike(
+ Predicate<? super Integer> expected,
+ Predicate<? super Integer> actual,
+ Integer input) {
+ Boolean expectedResult = null;
+ RuntimeException expectedRuntimeException = null;
+ try {
+ expectedResult = expected.apply(input);
+ } catch (RuntimeException e) {
+ expectedRuntimeException = e;
+ }
+
+ Boolean actualResult = null;
+ RuntimeException actualRuntimeException = null;
+ try {
+ actualResult = actual.apply(input);
+ } catch (RuntimeException e) {
+ actualRuntimeException = e;
+ }
+
+ assertEquals(expectedResult, actualResult);
+ if (expectedRuntimeException != null) {
+ assertNotNull(actualRuntimeException);
+ assertEquals(
+ expectedRuntimeException.getClass(),
+ actualRuntimeException.getClass());
+ }
+ }
+
+ private static void checkSerialization(Predicate<? super Integer> predicate) {
+ Predicate<? super Integer> reserialized =
+ SerializableTester.reserializeAndAssert(predicate);
+ assertEvalsLike(predicate, reserialized);
+ }
+}
diff --git a/test/com/google/common/base/SuppliersTest.java b/test/com/google/common/base/SuppliersTest.java
new file mode 100644
index 0000000..5d7694f
--- /dev/null
+++ b/test/com/google/common/base/SuppliersTest.java
@@ -0,0 +1,203 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.base;
+
+import com.google.common.collect.Lists;
+import static com.google.common.testutils.SerializableTester.reserialize;
+
+import junit.framework.TestCase;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Tests com.google.common.base.Suppliers.
+ *
+ * @author Laurence Gonsalves
+ * @author Harry Heymann
+ */
+public class SuppliersTest extends TestCase {
+ public void testCompose() {
+ Supplier<Integer> fiveSupplier = new Supplier<Integer>() {
+ public Integer get() {
+ return 5;
+ }
+ };
+
+ Function<Number,Integer> intValueFunction =
+ new Function<Number,Integer>() {
+ public Integer apply(Number x) {
+ return x.intValue();
+ }
+ };
+
+ Supplier<Integer> squareSupplier = Suppliers.compose(intValueFunction,
+ fiveSupplier);
+
+ assertEquals(Integer.valueOf(5), squareSupplier.get());
+ }
+
+ public void testComposeWithLists() {
+ Supplier<ArrayList<Integer>> listSupplier
+ = new Supplier<ArrayList<Integer>>() {
+ public ArrayList<Integer> get() {
+ return Lists.newArrayList(0);
+ }
+ };
+
+ Function<List<Integer>, List<Integer>> addElementFunction =
+ new Function<List<Integer>, List<Integer>>() {
+ public List<Integer> apply(List<Integer> list) {
+ ArrayList<Integer> result = Lists.newArrayList(list);
+ result.add(1);
+ return result;
+ }
+ };
+
+ Supplier<List<Integer>> addSupplier = Suppliers.compose(addElementFunction,
+ listSupplier);
+
+ List<Integer> result = addSupplier.get();
+ assertEquals(Integer.valueOf(0), result.get(0));
+ assertEquals(Integer.valueOf(1), result.get(1));
+ }
+
+ private static class CountingSupplier
+ implements Supplier<Integer>, Serializable {
+ transient int calls = 0;
+ public Integer get() {
+ calls++;
+ return calls * 10;
+ }
+ }
+
+ public void testMemoize() {
+ CountingSupplier countingSupplier = new CountingSupplier();
+ Supplier<Integer> memoizedSupplier = Suppliers.memoize(countingSupplier);
+ checkMemoize(countingSupplier, memoizedSupplier);
+ }
+
+ public void testMemoizeSerialized() {
+ CountingSupplier countingSupplier = new CountingSupplier();
+ Supplier<Integer> memoizedSupplier = Suppliers.memoize(countingSupplier);
+ checkMemoize(countingSupplier, memoizedSupplier);
+ // Calls to the original memoized supplier shouldn't affect its copy.
+ memoizedSupplier.get();
+
+ Supplier<Integer> copy = reserialize(memoizedSupplier);
+ memoizedSupplier.get();
+
+ CountingSupplier countingCopy = (CountingSupplier)
+ ((Suppliers.MemoizingSupplier<Integer>) copy).delegate;
+ checkMemoize(countingCopy, copy);
+ }
+
+ private void checkMemoize(
+ CountingSupplier countingSupplier, Supplier<Integer> memoizedSupplier) {
+ // the underlying supplier hasn't executed yet
+ assertEquals(0, countingSupplier.calls);
+
+ assertEquals(10, (int) memoizedSupplier.get());
+
+ // now it has
+ assertEquals(1, countingSupplier.calls);
+
+ assertEquals(10, (int) memoizedSupplier.get());
+
+ // it still should only have executed once due to memoization
+ assertEquals(1, countingSupplier.calls);
+ }
+
+ public void testMemoizeExceptionThrown() {
+ Supplier<Integer> exceptingSupplier = new Supplier<Integer>() {
+ public Integer get() {
+ throw new NullPointerException();
+ }
+ };
+
+ Supplier<Integer> memoizedSupplier = Suppliers.memoize(exceptingSupplier);
+
+ // call get() twice to make sure that memoization doesn't interfere
+ // with throwing the exception
+ for (int i = 0; i < 2; i++) {
+ try {
+ memoizedSupplier.get();
+ fail("failed to throw NullPointerException");
+ } catch (NullPointerException e) {
+ // this is what should happen
+ }
+ }
+ }
+
+ public void testOfInstanceSuppliesSameInstance() {
+ Object toBeSupplied = new Object();
+ Supplier<Object> objectSupplier = Suppliers.ofInstance(toBeSupplied);
+ assertSame(toBeSupplied,objectSupplier.get());
+ assertSame(toBeSupplied,objectSupplier.get()); // idempotent
+ }
+
+ public void testOfInstanceSuppliesNull() {
+ Supplier<Integer> nullSupplier = Suppliers.ofInstance(null);
+ assertNull(nullSupplier.get());
+ }
+
+ public void testThreadSafe() throws InterruptedException {
+ final Supplier<Integer> nonThreadSafe = new Supplier<Integer>() {
+ int counter = 0;
+ public Integer get() {
+ int nextValue = counter + 1;
+ Thread.yield();
+ counter = nextValue;
+ return counter;
+ }
+ };
+
+ final int numThreads = 10;
+ final int iterations = 1000;
+ Thread[] threads = new Thread[numThreads];
+ for (int i = 0; i < numThreads; i++) {
+ threads[i] = new Thread() {
+ @Override
+ public void run() {
+ for (int j = 0; j < iterations; j++) {
+ Suppliers.synchronizedSupplier(nonThreadSafe).get();
+ }
+ }
+ };
+ }
+ for (Thread t : threads) {
+ t.start();
+ }
+ for (Thread t : threads) {
+ t.join();
+ }
+
+ assertEquals(new Integer(numThreads * iterations + 1), nonThreadSafe.get());
+ }
+
+ public void testSerialization() {
+ assertEquals(
+ Integer.valueOf(5), reserialize(Suppliers.ofInstance(5)).get());
+ assertEquals(Integer.valueOf(5), reserialize(Suppliers.compose(
+ Functions.identity(), Suppliers.ofInstance(5))).get());
+ assertEquals(Integer.valueOf(5),
+ reserialize(Suppliers.memoize(Suppliers.ofInstance(5))).get());
+ assertEquals(Integer.valueOf(5), reserialize(
+ Suppliers.synchronizedSupplier(Suppliers.ofInstance(5))).get());
+ }
+}
diff --git a/test/com/google/common/collect/AbstractBiMapTest.java b/test/com/google/common/collect/AbstractBiMapTest.java
new file mode 100644
index 0000000..b10196f
--- /dev/null
+++ b/test/com/google/common/collect/AbstractBiMapTest.java
@@ -0,0 +1,542 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.testutils.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+/**
+ * Common tests for any {@code BiMap}.
+ *
+ * @author Kevin Bourrillion
+ */
+public abstract class AbstractBiMapTest extends TestCase {
+
+ protected abstract BiMap<Integer, String> create();
+
+ protected BiMap<Integer, String> bimap;
+ protected Set<Entry<Integer, String>> entrySet;
+
+ @Override protected void setUp() throws Exception {
+ super.setUp();
+ bimap = create();
+ entrySet = bimap.entrySet();
+ }
+
+ public void testClear() {
+ bimap.clear();
+ assertTrue(bimap.isEmpty());
+ putOneTwoThree();
+ bimap.clear();
+ assertTrue(bimap.isEmpty());
+ }
+
+ public void testContainsKey() {
+ assertFalse(bimap.containsKey(null));
+ assertFalse(bimap.containsKey(1));
+ assertFalse(bimap.containsKey("one"));
+
+ bimap.put(1, "one");
+ assertTrue(bimap.containsKey(1));
+
+ bimap.put(null, null);
+ assertTrue(bimap.containsKey(null));
+ }
+
+ public void testContainsValue() {
+ assertFalse(bimap.containsValue(null));
+ assertFalse(bimap.containsValue(1));
+ assertFalse(bimap.containsValue("one"));
+
+ bimap.put(1, "one");
+ assertTrue(bimap.containsValue("one"));
+
+ bimap.put(null, null);
+ assertTrue(bimap.containsValue(null));
+ }
+
+ public void testEquals() {
+ BiMap<Integer, String> biMap = create();
+ assertEquals(biMap, biMap);
+ assertEquals(create(), biMap);
+ biMap.put(1, null);
+ assertFalse(create().equals(biMap));
+ }
+
+ public void testGet() {
+ assertNull(bimap.get(1));
+ assertNull(bimap.get(null));
+ assertNull(bimap.get("bad"));
+
+ bimap.put(1, "one");
+ bimap.put(0, null);
+ bimap.put(null, "nothing");
+ assertEquals("one", bimap.get(1));
+ assertNull(bimap.get(0));
+ assertEquals("nothing", bimap.get(null));
+ assertNull(bimap.get("bad"));
+
+ bimap.forcePut(null, null);
+ assertNull(bimap.get(null));
+ bimap.remove(null);
+ assertNull(bimap.get(null));
+ }
+
+ public void testInverseSimple() {
+ BiMap<String, Integer> inverse = bimap.inverse();
+ bimap.put(1, "one");
+ bimap.put(2, "two");
+ assertEquals(ImmutableMap.of("one", 1, "two", 2), inverse);
+ // see InverseBiMapTest
+
+ assertSame(bimap, inverse.inverse());
+ }
+
+ public void testInversePut() {
+ BiMap<String, Integer> inverse = bimap.inverse();
+ bimap.put(1, "one");
+ bimap.inverse().put("two", 2);
+ assertEquals(ImmutableMap.of("one", 1, "two", 2), inverse);
+ assertEquals(ImmutableMap.of(1, "one", 2, "two"), bimap);
+ }
+
+ public void testIsEmpty() {
+ assertTrue(bimap.isEmpty());
+ bimap.put(1, "one");
+ assertFalse(bimap.isEmpty());
+ bimap.remove(1);
+ assertTrue(bimap.isEmpty());
+ }
+
+ public void testPut() {
+ bimap.put(1, "one");
+ assertEquals(ImmutableMap.of(1, "one"), bimap);
+
+ bimap.put(2, "two");
+ assertEquals(ImmutableMap.of(1, "one", 2, "two"), bimap);
+
+ bimap.put(2, "two");
+ assertEquals(ImmutableMap.of(1, "one", 2, "two"), bimap);
+
+ bimap.put(1, "ONE");
+ assertEquals(ImmutableMap.of(1, "ONE", 2, "two"), bimap);
+
+ try {
+ bimap.put(3, "two");
+ fail();
+ } catch (IllegalArgumentException e) {
+ }
+ assertEquals(ImmutableMap.of(1, "ONE", 2, "two"), bimap);
+
+ bimap.put(-1, null);
+ bimap.put(null, "null");
+ Map<Integer, String> expected = Maps.newHashMap();
+ expected.put(1, "ONE");
+ expected.put(2, "two");
+ expected.put(-1, null);
+ expected.put(null, "null");
+
+ assertEquals(expected, bimap);
+
+ bimap.remove(-1);
+ bimap.put(null, null);
+
+ expected.remove(-1);
+ expected.put(null, null);
+
+ assertEquals(expected, bimap);
+ }
+
+ public void testPutNull() {
+ bimap.put(-1, null);
+ assertTrue(bimap.containsValue(null));
+ bimap.put(1, "one");
+ assertTrue(bimap.containsValue(null));
+ }
+
+ public void testPutAll() {
+ bimap.put(1, "one");
+ Map<Integer,String> newEntries = ImmutableMap.of(2, "two", 3, "three");
+ bimap.putAll(newEntries);
+ assertEquals(ImmutableMap.of(1, "one", 2, "two", 3, "three"), bimap);
+ }
+
+ public void testForcePut() {
+ assertNull(bimap.forcePut(1, "one"));
+ assertEquals(ImmutableMap.of(1, "one"), bimap);
+ assertEquals("one", bimap.forcePut(1, "one"));
+ assertEquals(ImmutableMap.of(1, "one"), bimap);
+ assertEquals("one", bimap.forcePut(1, "ONE"));
+ assertEquals(ImmutableMap.of(1, "ONE"), bimap);
+ assertNull(bimap.forcePut(-1, "ONE")); // key 1 disappears without a trace
+ assertEquals(ImmutableMap.of(-1, "ONE"), bimap);
+ assertNull(bimap.forcePut(2, "two"));
+ assertEquals(ImmutableMap.of(-1, "ONE", 2, "two"), bimap);
+ assertEquals("two", bimap.forcePut(2, "ONE"));
+ assertEquals(ImmutableMap.of(2, "ONE"), bimap);
+ }
+
+ public void testRemove() {
+ Map<Integer, String> map = Maps.newHashMap();
+ map.put(0, null);
+ map.put(1, "one");
+ map.put(null, "null");
+
+ bimap.putAll(map);
+ assertNull(bimap.remove(0));
+
+ map.remove(0);
+ assertEquals(map, bimap);
+
+ assertEquals("null", bimap.remove(null));
+ assertEquals(Collections.singletonMap(1, "one"), bimap);
+
+ assertNull(bimap.remove(15));
+
+ assertEquals("one", bimap.remove(1));
+ assertTrue(bimap.isEmpty());
+ }
+
+ public void testSize() {
+ assertEquals(0, bimap.size());
+ bimap.put(1, "one");
+ assertEquals(1, bimap.size());
+ bimap.put(1, "ONE");
+ assertEquals(1, bimap.size());
+ bimap.put(2, "two");
+ assertEquals(2, bimap.size());
+ bimap.forcePut(1, "two");
+ assertEquals(1, bimap.size());
+ }
+
+ public void testToString() {
+ bimap.put(1, "one");
+ bimap.put(2, "two");
+
+ String string = bimap.toString();
+ String expected = string.startsWith("{1")
+ ? "{1=one, 2=two}"
+ : "{2=two, 1=one}";
+ assertEquals(expected, bimap.toString());
+ }
+
+ // Entry Set
+
+ public void testEntrySetAdd() {
+ try {
+ entrySet.add(Maps.immutableEntry(1, "one"));
+ fail();
+ } catch (UnsupportedOperationException expected) {
+ }
+ }
+
+ public void testEntrySetAddAll() {
+ try {
+ entrySet.addAll(Collections.singleton(Maps.immutableEntry(1, "one")));
+ fail();
+ } catch (UnsupportedOperationException expected) {
+ }
+ }
+
+ public void testEntrySetClear() {
+ entrySet.clear();
+ assertTrue(entrySet.isEmpty());
+ assertTrue(bimap.isEmpty());
+ putOneTwoThree();
+ entrySet.clear();
+ assertTrue(entrySet.isEmpty());
+ assertTrue(bimap.isEmpty());
+ }
+
+ public void testEntrySetContains() {
+ assertFalse(entrySet.contains(Maps.immutableEntry(1, "one")));
+ bimap.put(1, "one");
+ assertTrue(entrySet.contains(Maps.immutableEntry(1, "one")));
+ assertFalse(entrySet.contains(Maps.immutableEntry(1, "")));
+ assertFalse(entrySet.contains(Maps.immutableEntry(0, "one")));
+ assertFalse(entrySet.contains(Maps.immutableEntry(1, null)));
+ assertFalse(entrySet.contains(Maps.immutableEntry(null, "one")));
+ assertFalse(entrySet.contains(Maps.immutableEntry(null, null)));
+
+ bimap.put(null, null);
+ assertTrue(entrySet.contains(Maps.immutableEntry(1, "one")));
+ assertTrue(entrySet.contains(Maps.immutableEntry(null, null)));
+ assertFalse(entrySet.contains(Maps.immutableEntry(1, "")));
+ assertFalse(entrySet.contains(Maps.immutableEntry(0, "one")));
+ assertFalse(entrySet.contains(Maps.immutableEntry(1, null)));
+ assertFalse(entrySet.contains(Maps.immutableEntry(null, "one")));
+
+ bimap.put(null, "null");
+ bimap.put(0, null);
+ assertTrue(entrySet.contains(Maps.immutableEntry(1, "one")));
+ assertTrue(entrySet.contains(Maps.immutableEntry(null, "null")));
+ assertTrue(entrySet.contains(Maps.immutableEntry(0, null)));
+ assertFalse(entrySet.contains(Maps.immutableEntry(1, "")));
+ assertFalse(entrySet.contains(Maps.immutableEntry(0, "one")));
+ assertFalse(entrySet.contains(Maps.immutableEntry(1, null)));
+ assertFalse(entrySet.contains(Maps.immutableEntry(null, "one")));
+ assertFalse(entrySet.contains(Maps.immutableEntry(null, null)));
+ }
+
+ public void testEntrySetIsEmpty() {
+ assertTrue(entrySet.isEmpty());
+ bimap.put(1, "one");
+ assertFalse(entrySet.isEmpty());
+ bimap.remove(1);
+ assertTrue(entrySet.isEmpty());
+ }
+
+ public void testEntrySetRemove() {
+ putOneTwoThree();
+ assertTrue(bimap.containsKey(1));
+ assertTrue(bimap.containsValue("one"));
+ assertTrue(entrySet.remove(Maps.immutableEntry(1, "one")));
+ assertFalse(bimap.containsKey(1));
+ assertFalse(bimap.containsValue("one"));
+ assertEquals(2, bimap.size());
+ assertEquals(2, bimap.inverse().size());
+ assertFalse(entrySet.remove(Maps.immutableEntry(2, "three")));
+ assertFalse(entrySet.remove(3));
+ assertEquals(2, bimap.size());
+ assertEquals(2, bimap.inverse().size());
+ }
+
+ public void testEntrySetRemoveAll() {
+ putOneTwoThree();
+ assertTrue(bimap.containsKey(1));
+ assertTrue(bimap.containsValue("one"));
+ assertTrue(entrySet.removeAll(
+ Collections.singleton(Maps.immutableEntry(1, "one"))));
+ assertFalse(bimap.containsKey(1));
+ assertFalse(bimap.containsValue("one"));
+ assertEquals(2, bimap.size());
+ assertEquals(2, bimap.inverse().size());
+ }
+
+ public void testEntrySetValue() {
+ bimap.put(1, "one");
+ Entry<Integer, String> entry = bimap.entrySet().iterator().next();
+ bimap.put(2, "two");
+ assertEquals("one", entry.getValue());
+ bimap.put(1, "one");
+ assertEquals("one", entry.getValue());
+ assertEquals("one", bimap.get(1));
+ assertEquals(Integer.valueOf(1), bimap.inverse().get("one"));
+ bimap.put(1, "uno");
+ assertEquals("uno", entry.getValue());
+ assertEquals("uno", bimap.get(1));
+ assertEquals(Integer.valueOf(1), bimap.inverse().get("uno"));
+ assertEquals(2, bimap.size());
+ assertEquals(2, bimap.inverse().size());
+ try {
+ entry.setValue("two");
+ fail();
+ } catch (IllegalArgumentException expected) {}
+ assertEquals("uno", entry.getValue());
+ assertEquals("uno", bimap.get(1));
+ assertEquals(Integer.valueOf(1), bimap.inverse().get("uno"));
+ assertEquals(2, bimap.size());
+ assertEquals(2, bimap.inverse().size());
+ }
+
+ public void testEntrySetValueRemovedEntry() {
+ bimap.put(1, "a");
+ Entry<Integer, String> entry = bimap.entrySet().iterator().next();
+ bimap.clear();
+ try {
+ entry.setValue("b");
+ fail();
+ } catch (IllegalStateException expected) {}
+ assertEquals(0, bimap.size());
+ assertEquals(0, bimap.inverse().size());
+ }
+
+ public void testEntrySetValueRemovedEntryNullOldValue() {
+ bimap.put(1, null);
+ Entry<Integer, String> entry = bimap.entrySet().iterator().next();
+ bimap.clear();
+ try {
+ entry.setValue("b");
+ fail();
+ } catch (IllegalStateException expected) {}
+ assertEquals(0, bimap.size());
+ assertEquals(0, bimap.inverse().size());
+ }
+
+ public void testEntrySetValueRemovedEntryAddedEqualEntry() {
+ bimap.put(1, "a");
+ Entry<Integer, String> entry = bimap.entrySet().iterator().next();
+ bimap.clear();
+ bimap.put(1, "a");
+ try {
+ entry.setValue("b");
+ fail();
+ } catch (IllegalStateException expected) {}
+ assertEquals(1, bimap.size());
+ assertEquals("a", bimap.get(1));
+ assertEquals(1, bimap.inverse().size());
+ assertEquals((Integer) 1, bimap.inverse().get("a"));
+ }
+
+ public void testKeySetIteratorRemove() {
+ putOneTwoThree();
+ Iterator<Integer> iterator = bimap.keySet().iterator();
+ iterator.next();
+ iterator.remove();
+ assertEquals(2, bimap.size());
+ assertEquals(2, bimap.inverse().size());
+ }
+
+ public void testKeySetRemoveAll() {
+ putOneTwoThree();
+ Set<Integer> keySet = bimap.keySet();
+ assertTrue(keySet.removeAll(Arrays.asList(1, 3)));
+ assertEquals(1, bimap.size());
+ assertTrue(keySet.contains(2));
+ }
+
+ public void testKeySetRetainAll() {
+ putOneTwoThree();
+ Set<Integer> keySet = bimap.keySet();
+ assertTrue(keySet.retainAll(Collections.singleton(2)));
+ assertEquals(1, bimap.size());
+ assertTrue(keySet.contains(2));
+ }
+
+ public void testEntriesIteratorRemove() {
+ putOneTwoThree();
+ Iterator<Entry<Integer, String>> iterator = bimap.entrySet().iterator();
+ iterator.next();
+ iterator.remove();
+ assertEquals(2, bimap.size());
+ assertEquals(2, bimap.inverse().size());
+ }
+
+ public void testEntriesRetainAll() {
+ putOneTwoThree();
+ Set<Map.Entry<Integer, String>> entries = bimap.entrySet();
+ Map.Entry<Integer, String> entry = Maps.immutableEntry(2, "two");
+ assertTrue(entries.retainAll(Collections.singleton(entry)));
+ assertEquals(1, bimap.size());
+ assertTrue(bimap.containsKey(2));
+ }
+
+ public void testValuesIteratorRemove() {
+ putOneTwoThree();
+ Iterator<String> iterator = bimap.values().iterator();
+ iterator.next();
+ iterator.remove();
+ assertEquals(2, bimap.size());
+ assertEquals(2, bimap.inverse().size());
+ }
+
+ public void testValuesToArray() {
+ bimap.put(1, "one");
+ String[] array = new String[3];
+ array[1] = "garbage";
+ assertSame(array, bimap.values().toArray(array));
+ assertEquals("one", array[0]);
+ assertNull(array[1]);
+ }
+
+ public void testValuesToString() {
+ bimap.put(1, "one");
+ assertEquals("[one]", bimap.values().toString());
+ }
+
+ public void testSerialization() {
+ bimap.put(1, "one");
+ bimap.put(2, "two");
+ bimap.put(3, "three");
+ bimap.put(null, null);
+
+ BiMap<Integer, String> copy =
+ SerializableTester.reserializeAndAssert(bimap);
+ assertEquals(bimap.inverse(), copy.inverse());
+ }
+
+ void putOneTwoThree() {
+ bimap.put(1, "one");
+ bimap.put(2, "two");
+ bimap.put(3, "three");
+ }
+
+ private static class BiMapPair implements Serializable {
+ final BiMap<Integer, String> forward;
+ final BiMap<String, Integer> backward;
+
+ BiMapPair(BiMap<Integer, String> original) {
+ this.forward = original;
+ this.backward = original.inverse();
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ public void testSerializationWithInverseEqual() {
+ bimap.put(1, "one");
+ bimap.put(2, "two");
+ bimap.put(3, "three");
+ bimap.put(null, null);
+
+ BiMapPair pair = new BiMapPair(bimap);
+ BiMapPair copy = SerializableTester.reserialize(pair);
+ assertEquals(pair.forward, copy.forward);
+ assertEquals(pair.backward, copy.backward);
+
+ copy.forward.put(4, "four");
+ copy.backward.put("five", 5);
+ assertEquals(copy.backward, copy.forward.inverse());
+ assertEquals(copy.forward, copy.backward.inverse());
+
+ assertTrue(copy.forward.containsKey(4));
+ assertTrue(copy.forward.containsKey(5));
+ assertTrue(copy.backward.containsValue(4));
+ assertTrue(copy.backward.containsValue(5));
+ assertTrue(copy.forward.containsValue("four"));
+ assertTrue(copy.forward.containsValue("five"));
+ assertTrue(copy.backward.containsKey("four"));
+ assertTrue(copy.backward.containsKey("five"));
+ }
+
+ /**
+ * The sameness checks ensure that a bimap and its inverse remain consistent,
+ * even after the deserialized instances are updated. Also, the relationship
+ * {@code a == b.inverse()} should continue to hold after both bimaps are
+ * serialized and deserialized together.
+ */
+ public void testSerializationWithInverseSame() {
+ bimap.put(1, "one");
+ bimap.put(2, "two");
+ bimap.put(3, "three");
+ bimap.put(null, null);
+
+ BiMapPair pair = new BiMapPair(bimap);
+ BiMapPair copy = SerializableTester.reserialize(pair);
+ assertSame(copy.backward, copy.forward.inverse());
+ assertSame(copy.forward, copy.backward.inverse());
+ }
+}
diff --git a/test/com/google/common/collect/AbstractCollectionTest.java b/test/com/google/common/collect/AbstractCollectionTest.java
new file mode 100644
index 0000000..bca9d36
--- /dev/null
+++ b/test/com/google/common/collect/AbstractCollectionTest.java
@@ -0,0 +1,228 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.testutils.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import static java.util.Arrays.asList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Common tests for a {@code Collection}.
+ *
+ * @author Kevin Bourrillion
+ * @author Mike Bostock
+ */
+public abstract class AbstractCollectionTest extends TestCase {
+
+ protected abstract <E> Collection<E> create();
+
+ protected Collection<String> c;
+
+ @Override protected void setUp() throws Exception {
+ super.setUp();
+ c = create();
+ }
+
+ public void testIsEmptyYes() {
+ assertTrue(c.isEmpty());
+ }
+
+ public void testIsEmptyNo() {
+ c.add("a");
+ assertFalse(c.isEmpty());
+ }
+
+ public void testAddOne() {
+ assertTrue(c.add("a"));
+ assertContents("a");
+ }
+
+ public void testAddSeveralTimes() {
+ assertTrue(c.add("a"));
+ assertTrue(c.add("b"));
+ c.add("a");
+ c.add("b");
+ assertTrue(c.contains("a"));
+ assertTrue(c.contains("b"));
+ }
+
+ public void testRemoveOneFromNoneStandard() {
+ assertFalse(c.remove("a"));
+ assertContents();
+ }
+
+ public void testRemoveOneFromOneStandard() {
+ c.add("a");
+ assertTrue(c.remove("a"));
+ assertContents();
+ }
+
+ public void testContainsNo() {
+ c.add("a");
+ assertFalse(c.contains("b"));
+ }
+
+ public void testContainsOne() {
+ c.add("a");
+ assertTrue(c.contains(new String("a")));
+ }
+
+ public void testContainsAfterRemoval() {
+ c.add("a");
+ c.remove("a");
+ assertFalse(c.contains("a"));
+ }
+
+ public void testContainsAllVacuous() {
+ assertTrue(c.containsAll(Collections.emptySet()));
+ }
+
+ public void testRemoveAllVacuous() {
+ assertFalse(c.removeAll(Collections.emptySet()));
+ }
+
+ public void testRetainAllVacuous() {
+ assertFalse(c.retainAll(asList("a")));
+ assertContents();
+ }
+
+ public void testRetainAllOfNothing() {
+ c.add("a");
+ assertTrue(c.retainAll(Collections.emptySet()));
+ assertContents();
+ }
+
+ public void testClearNothing() {
+ c.clear();
+ assertContents();
+ }
+
+ public void testClear() {
+ c = createSample();
+ c.clear();
+ assertContents();
+ }
+
+ public void testEqualsNo() {
+ c.add("a");
+
+ Collection<String> c2 = create();
+ c2.add("b");
+
+ assertFalse(c.equals(c2));
+ }
+
+ public void testEqualsYes() {
+ c.add("a");
+ c.add("b");
+ c.add("b");
+
+ Collection<String> c2 = create();
+ c2.add("a");
+ c2.add("b");
+ c2.add("b");
+
+ assertEquals(c, c2);
+ }
+
+ public void testEqualsSelf() {
+ c.add("a");
+ c.add("b");
+ c.add("b");
+
+ assertEquals(c, c);
+ }
+
+ public void testEqualsTricky() {
+ c.add("a");
+ c.add("a");
+
+ Collection<String> c2 = create();
+ c2.add("a");
+ c2.add("a");
+ c2.add("b");
+ c2.add("b");
+ c2.remove("b");
+ c2.remove("b");
+
+ assertEquals(c, c2);
+ }
+
+ public void testEqualsPartial() {
+ c.add("a");
+ c.add("b");
+
+ Collection<String> c2 = create();
+ c2.add("a");
+ c2.add("c");
+
+ assertFalse(c.equals(c2));
+
+ Collection<String> c3 = create();
+ c2.add("b");
+ c2.add("c");
+
+ assertFalse(c2.equals(c3));
+ }
+
+ public void testEqualsDifferentTypes() {
+ c.add("a");
+ assertFalse(c.equals("a"));
+ }
+
+ public void testToArrayOne() {
+ c.add("a");
+ String[] array = new String[3];
+ assertSame(array, c.toArray(array));
+ assertEquals("a", array[0]);
+ assertNull(array[1]);
+ }
+
+ public void testNullPointerExceptions() throws Exception {
+ NullPointerTester tester = new NullPointerTester();
+ tester.testAllPublicInstanceMethods(c);
+ }
+
+ protected Collection<String> createSample() {
+ @SuppressWarnings("hiding")
+ Collection<String> c = create();
+ c.add("a");
+ c.add("b");
+ c.add("b");
+ c.add("c");
+ c.add("d");
+ c.add("d");
+ c.add("d");
+ return c;
+ }
+
+ protected void assertContents(String... expected) {
+ List<String> expectedList = asList(expected);
+ Collections.sort(expectedList);
+
+ List<String> actualList = Lists.newArrayList(c);
+ Collections.sort(actualList);
+
+ assertEquals(expectedList, actualList);
+ }
+
+}
diff --git a/test/com/google/common/collect/AbstractConcurrentHashMultisetTest.java b/test/com/google/common/collect/AbstractConcurrentHashMultisetTest.java
new file mode 100644
index 0000000..7c42be7
--- /dev/null
+++ b/test/com/google/common/collect/AbstractConcurrentHashMultisetTest.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import static java.util.Arrays.asList;
+
+/**
+ * Unit test for {@link ConcurrentHashMultiset}.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ */
+public abstract class AbstractConcurrentHashMultisetTest
+ extends AbstractMultisetTest {
+ // we don't support null
+ @Override public void testToStringNull() {}
+
+ // our entries are snapshots, not live views. at least for now.
+
+ @Override public void testEntryAfterRemove() {}
+ @Override public void testEntryAfterClear() {}
+ @Override public void testEntryAfterEntrySetClear() {}
+ @Override public void testEntryAfterEntrySetIteratorRemove() {}
+ @Override public void testEntryAfterElementSetIteratorRemove() {}
+
+ public void testCopyConstructor() {
+ ms = ConcurrentHashMultiset.create(asList("a", "b", "a", "c"));
+ assertEquals(4, ms.size());
+ assertEquals(2, ms.count("a"));
+ assertEquals(1, ms.count("b"));
+ assertEquals(1, ms.count("c"));
+ }
+
+ public void testSetCount() {
+ ConcurrentHashMultiset<String> cms = ConcurrentHashMultiset.create();
+ cms.add("a", 2);
+ cms.add("b", 3);
+
+ try {
+ cms.setCount("a", -1);
+ fail();
+ } catch (IllegalArgumentException expected) {}
+ assertEquals(2, cms.count("a"));
+
+ assertEquals(2, cms.setCount("a", 0));
+ assertEquals(0, cms.count("a"));
+ assertEquals(3, cms.setCount("b", 4));
+ assertEquals(4, cms.count("b"));
+ assertEquals(0, cms.setCount("c", 5));
+ assertEquals(5, cms.count("c"));
+ }
+
+ public void testSetCountConditional() {
+ ConcurrentHashMultiset<String> cms = ConcurrentHashMultiset.create();
+ cms.add("a", 2);
+ cms.add("b", 3);
+
+ try {
+ cms.setCount("a", -1, 1);
+ fail();
+ } catch (IllegalArgumentException expected) {}
+ try {
+ cms.setCount("a", 1, -1);
+ fail();
+ } catch (IllegalArgumentException expected) {}
+ assertEquals(2, cms.count("a"));
+
+ assertTrue(cms.setCount("c", 0, 0));
+ assertEquals(0, cms.count("c"));
+ assertFalse(cms.setCount("c", 1, 0));
+ assertEquals(0, cms.count("c"));
+ assertFalse(cms.setCount("a", 0, 0));
+ assertEquals(2, cms.count("a"));
+ assertFalse(cms.setCount("a", 1, 0));
+ assertEquals(2, cms.count("a"));
+ assertTrue(cms.setCount("a", 2, 0));
+ assertEquals(0, cms.count("a"));
+
+ assertTrue(cms.setCount("d", 0, 4));
+ assertEquals(4, cms.count("d"));
+ assertFalse(cms.setCount("b", 0, 5));
+ assertEquals(3, cms.count("b"));
+ assertFalse(cms.setCount("b", 1, 5));
+ assertEquals(3, cms.count("b"));
+ assertTrue(cms.setCount("b", 3, 5));
+ assertEquals(5, cms.count("b"));
+ }
+
+ public void testRemoveExactly() {
+ ConcurrentHashMultiset<String> cms = ConcurrentHashMultiset.create();
+ cms.add("a", 2);
+ cms.add("b", 3);
+
+ try {
+ cms.removeExactly("a", -2);
+ } catch (IllegalArgumentException expected) {}
+
+ assertTrue(cms.removeExactly("a", 0));
+ assertEquals(2, cms.count("a"));
+ assertTrue(cms.removeExactly("c", 0));
+ assertEquals(0, cms.count("c"));
+
+ assertFalse(cms.removeExactly("a", 4));
+ assertEquals(2, cms.count("a"));
+ assertTrue(cms.removeExactly("a", 2));
+ assertEquals(0, cms.count("a"));
+ assertTrue(cms.removeExactly("b", 2));
+ assertEquals(1, cms.count("b"));
+ }
+}
diff --git a/test/com/google/common/collect/AbstractImmutableSetTest.java b/test/com/google/common/collect/AbstractImmutableSetTest.java
new file mode 100644
index 0000000..87c7111
--- /dev/null
+++ b/test/com/google/common/collect/AbstractImmutableSetTest.java
@@ -0,0 +1,421 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.testing.IteratorFeature.UNMODIFIABLE;
+import com.google.common.collect.testing.IteratorTester;
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.MinimalIterable;
+import com.google.common.testing.junit3.JUnitAsserts;
+
+import junit.framework.TestCase;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Base class for {@link ImmutableSet} and {@link ImmutableSortedSet} tests.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ */
+public abstract class AbstractImmutableSetTest extends TestCase {
+
+ protected abstract Set<String> of();
+ protected abstract Set<String> of(String e);
+ protected abstract Set<String> of(String e1, String e2);
+ protected abstract Set<String> of(String e1, String e2, String e3);
+ protected abstract Set<String> of(String e1, String e2, String e3, String e4);
+ protected abstract Set<String> of(
+ String e1, String e2, String e3, String e4, String e5);
+ protected abstract Set<String> of(String... elements);
+ protected abstract Set<String> copyOf(Iterable<String> elements);
+ protected abstract Set<String> copyOf(Iterator<String> elements);
+
+ public void testCreation_noArgs() {
+ Set<String> set = of();
+ assertEquals(Collections.<String>emptySet(), set);
+ assertSame(of(), set);
+ }
+
+ public void testCreation_oneElement() {
+ Set<String> set = of("a");
+ assertEquals(Collections.singleton("a"), set);
+ }
+
+ public void testCreation_twoElements() {
+ Set<String> set = of("a", "b");
+ assertEquals(Sets.newHashSet("a", "b"), set);
+ }
+
+ public void testCreation_threeElements() {
+ Set<String> set = of("a", "b", "c");
+ assertEquals(Sets.newHashSet("a", "b", "c"), set);
+ }
+
+ public void testCreation_fourElements() {
+ Set<String> set = of("a", "b", "c", "d");
+ assertEquals(Sets.newHashSet("a", "b", "c", "d"), set);
+ }
+
+ public void testCreation_fiveElements() {
+ Set<String> set = of("a", "b", "c", "d", "e");
+ assertEquals(Sets.newHashSet("a", "b", "c", "d", "e"), set);
+ }
+
+ public void testCreation_emptyArray() {
+ String[] array = new String[0];
+ Set<String> set = of(array);
+ assertEquals(Collections.<String>emptySet(), set);
+ assertSame(of(), set);
+ }
+
+ public void testCreation_arrayOfOneElement() {
+ String[] array = new String[] { "a" };
+ Set<String> set = of(array);
+ assertEquals(Collections.singleton("a"), set);
+ }
+
+ public void testCreation_arrayContainingOnlyNull() {
+ String[] array = new String[] { null };
+ try {
+ of(array);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testCopyOf_collection_empty() {
+ // "<String>" is required to work around a javac 1.5 bug.
+ Collection<String> c = MinimalCollection.<String>of();
+ Set<String> set = copyOf(c);
+ assertEquals(Collections.<String>emptySet(), set);
+ assertSame(of(), set);
+ }
+
+ public void testCopyOf_collection_oneElement() {
+ Collection<String> c = MinimalCollection.of("a");
+ Set<String> set = copyOf(c);
+ assertEquals(Collections.singleton("a"), set);
+ }
+
+ public void testCopyOf_collection_oneElementRepeated() {
+ Collection<String> c = MinimalCollection.of("a", "a", "a");
+ Set<String> set = copyOf(c);
+ assertEquals(Collections.singleton("a"), set);
+ }
+
+ public void testCopyOf_collection_general() {
+ Collection<String> c = MinimalCollection.of("a", "b", "a");
+ Set<String> set = copyOf(c);
+ assertEquals(2, set.size());
+ assertTrue(set.contains("a"));
+ assertTrue(set.contains("b"));
+ }
+
+ public void testCopyOf_collectionContainingNull() {
+ Collection<String> c = MinimalCollection.of("a", null, "b");
+ try {
+ copyOf(c);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testCopyOf_iterator_empty() {
+ Iterator<String> iterator = Iterators.emptyIterator();
+ Set<String> set = copyOf(iterator);
+ assertEquals(Collections.<String>emptySet(), set);
+ assertSame(of(), set);
+ }
+
+ public void testCopyOf_iterator_oneElement() {
+ Iterator<String> iterator = Iterators.singletonIterator("a");
+ Set<String> set = copyOf(iterator);
+ assertEquals(Collections.singleton("a"), set);
+ }
+
+ public void testCopyOf_iterator_oneElementRepeated() {
+ Iterator<String> iterator = Arrays.asList("a", "a", "a").iterator();
+ Set<String> set = copyOf(iterator);
+ assertEquals(Collections.singleton("a"), set);
+ }
+
+ public void testCopyOf_iterator_general() {
+ Iterator<String> iterator = Arrays.asList("a", "b", "a").iterator();
+ Set<String> set = copyOf(iterator);
+ assertEquals(2, set.size());
+ assertTrue(set.contains("a"));
+ assertTrue(set.contains("b"));
+ }
+
+ public void testCopyOf_iteratorContainingNull() {
+ Iterator<String> c = Arrays.asList("a", null, "b").iterator();
+ try {
+ copyOf(c);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ private static class CountingIterable implements Iterable<String> {
+ int count = 0;
+ public Iterator<String> iterator() {
+ count++;
+ return Arrays.asList("a", "b", "a").iterator();
+ }
+ }
+
+ public void testCopyOf_plainIterable() {
+ CountingIterable iterable = new CountingIterable();
+ Set<String> set = copyOf(iterable);
+ assertEquals(2, set.size());
+ assertTrue(set.contains("a"));
+ assertTrue(set.contains("b"));
+ }
+
+ public void testCopyOf_plainIterable_iteratesOnce() {
+ CountingIterable iterable = new CountingIterable();
+ Set<String> set = copyOf(iterable);
+ assertEquals(1, iterable.count);
+ }
+
+ public void testCopyOf_shortcut_empty() {
+ Collection<String> c = of();
+ assertEquals(Collections.<String>emptySet(), copyOf(c));
+ assertSame(c, copyOf(c));
+ }
+
+ public void testCopyOf_shortcut_singleton() {
+ Collection<String> c = of("a");
+ assertEquals(Collections.singleton("a"), copyOf(c));
+ assertSame(c, copyOf(c));
+ }
+
+ public void testCopyOf_shortcut_sameType() {
+ Collection<String> c = of("a", "b", "c");
+ assertSame(c, copyOf(c));
+ }
+
+ public void testToString() {
+ Set<String> set = of("a", "b", "c", "d", "e", "f", "g");
+ assertEquals("[a, b, c, d, e, f, g]", set.toString());
+ }
+
+ public void testIterator_oneElement() throws Exception {
+ new IteratorTester<String>(5, UNMODIFIABLE, Collections.singleton("a"),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<String> newTargetIterator() {
+ return of("a").iterator();
+ }
+ }.test();
+ }
+
+ public void testIterator_general() throws Exception {
+ new IteratorTester<String>(5, UNMODIFIABLE, Arrays.asList("a", "b", "c"),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<String> newTargetIterator() {
+ return of("a", "b", "c").iterator();
+ }
+ }.test();
+ }
+
+ public void testContainsAll_sameType() {
+ Collection<String> c = of("a", "b", "c");
+ assertFalse(c.containsAll(of("a", "b", "c", "d")));
+ assertFalse(c.containsAll(of("a", "d")));
+ assertTrue(c.containsAll(of("a", "c")));
+ assertTrue(c.containsAll(of("a", "b", "c")));
+ }
+
+ public void testEquals_sameType() {
+ Collection<String> c = of("a", "b", "c");
+ assertEquals(c, of("a", "b", "c"));
+ JUnitAsserts.assertNotEqual(c, of("a", "b", "d"));
+ }
+
+ abstract <E extends Comparable<E>> ImmutableSet.Builder<E> builder();
+
+ public void testBuilderWithNonDuplicateElements() {
+ ImmutableSet<String> set = this.<String>builder()
+ .add("a")
+ .add("b", "c")
+ .add("d", "e", "f")
+ .add("g", "h", "i", "j")
+ .build();
+ assertTrue("a not found", set.contains("a"));
+ assertTrue("b not found", set.contains("b"));
+ assertTrue("c not found", set.contains("c"));
+ assertTrue("d not found", set.contains("d"));
+ assertTrue("e not found", set.contains("e"));
+ assertTrue("f not found", set.contains("f"));
+ assertTrue("g not found", set.contains("g"));
+ assertTrue("h not found", set.contains("h"));
+ assertTrue("i not found", set.contains("i"));
+ assertTrue("j not found", set.contains("j"));
+ assertFalse("k found", set.contains("k"));
+ assertEquals(10, set.size());
+ List<String> elems = new ArrayList<String>(set);
+ List<String> expected =
+ Arrays.asList("a", "b", "c", "d", "e", "f", "g", "h", "i", "j");
+ assertEquals(expected, elems);
+ }
+
+ public void testBuilderWithDuplicateElements() {
+ ImmutableSet<String> set = this.<String>builder()
+ .add("a")
+ .add("a", "a")
+ .add("a", "a", "a")
+ .add("a", "a", "a", "a")
+ .build();
+ assertTrue(set.contains("a"));
+ assertFalse(set.contains("b"));
+ assertEquals(1, set.size());
+ }
+
+ public void testBuilderAddAll() {
+ List<String> a = Arrays.asList("a", "b", "c");
+ List<String> b = Arrays.asList("c", "d", "e");
+ ImmutableSet<String> set = this.<String>builder()
+ .addAll(a)
+ .addAll(b)
+ .build();
+ assertTrue(set.contains("a"));
+ assertTrue(set.contains("b"));
+ assertTrue(set.contains("c"));
+ assertTrue(set.contains("d"));
+ assertTrue(set.contains("e"));
+ assertEquals(5, set.size());
+ }
+
+ static final int LAST_COLOR_ADDED = 0x00BFFF;
+
+ public void testComplexBuilder() {
+ List<Integer> colorElem = Arrays.asList(0x00, 0x33, 0x66, 0x99, 0xCC, 0xFF);
+ // javac won't compile this without "this.<Integer>"
+ ImmutableSet.Builder<Integer> webSafeColorsBuilder
+ = this.<Integer>builder();
+ for (Integer red : colorElem) {
+ for (Integer green : colorElem) {
+ for (Integer blue : colorElem) {
+ webSafeColorsBuilder.add((red << 16) + (green << 8) + blue);
+ }
+ }
+ }
+ ImmutableSet<Integer> webSafeColors = webSafeColorsBuilder.build();
+ assertEquals(216, webSafeColors.size());
+ Integer[] webSafeColorArray =
+ webSafeColors.toArray(new Integer[webSafeColors.size()]);
+ assertEquals(0x000000, (int) webSafeColorArray[0]);
+ assertEquals(0x000033, (int) webSafeColorArray[1]);
+ assertEquals(0x000066, (int) webSafeColorArray[2]);
+ assertEquals(0x003300, (int) webSafeColorArray[6]);
+ assertEquals(0x330000, (int) webSafeColorArray[36]);
+ ImmutableSet<Integer> addedColor
+ = webSafeColorsBuilder.add(LAST_COLOR_ADDED).build();
+ assertEquals(
+ "Modifying the builder should not have changed any already built sets",
+ 216, webSafeColors.size());
+ assertEquals("the new array should be one bigger than webSafeColors",
+ 217, addedColor.size());
+ Integer[] appendColorArray =
+ addedColor.toArray(new Integer[addedColor.size()]);
+ assertEquals(
+ getComplexBuilderSetLastElement(), (int) appendColorArray[216]);
+ }
+
+ abstract int getComplexBuilderSetLastElement();
+
+ public void testBuilderAddHandlesNullsCorrectly() {
+ ImmutableSet.Builder<String> builder = this.<String>builder();
+ try {
+ builder.add((String) null);
+ fail("expected NullPointerException"); // COV_NF_LINE
+ } catch (NullPointerException expected) {
+ }
+
+ builder = this.<String>builder();
+ try {
+ builder.add((String[]) null);
+ fail("expected NullPointerException"); // COV_NF_LINE
+ } catch (NullPointerException expected) {
+ }
+
+ builder = this.<String>builder();
+ try {
+ builder.add("a", (String) null);
+ fail("expected NullPointerException"); // COV_NF_LINE
+ } catch (NullPointerException expected) {
+ }
+
+ builder = this.<String>builder();
+ try {
+ builder.add("a", "b", (String) null);
+ fail("expected NullPointerException"); // COV_NF_LINE
+ } catch (NullPointerException expected) {
+ }
+
+ builder = this.<String>builder();
+ try {
+ builder.add("a", "b", "c", null);
+ fail("expected NullPointerException"); // COV_NF_LINE
+ } catch (NullPointerException expected) {
+ }
+
+ builder = this.<String>builder();
+ try {
+ builder.add("a", "b", null, "c");
+ fail("expected NullPointerException"); // COV_NF_LINE
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testBuilderAddAllHandlesNullsCorrectly() {
+ ImmutableSet.Builder<String> builder = this.<String>builder();
+ try {
+ builder.addAll((Iterable<String>) null);
+ fail("expected NullPointerException"); // COV_NF_LINE
+ } catch (NullPointerException expected) {
+ }
+
+ try {
+ builder.addAll((Iterator<String>) null);
+ fail("expected NullPointerException"); // COV_NF_LINE
+ } catch (NullPointerException expected) {
+ }
+
+ builder = this.<String>builder();
+ List<String> listWithNulls = Arrays.asList("a", null, "b");
+ try {
+ builder.addAll(listWithNulls);
+ fail("expected NullPointerException"); // COV_NF_LINE
+ } catch (NullPointerException expected) {
+ }
+
+ Iterable<String> iterableWithNulls = MinimalIterable.of("a", null, "b");
+ try {
+ builder.addAll(iterableWithNulls);
+ fail("expected NullPointerException"); // COV_NF_LINE
+ } catch (NullPointerException expected) {
+ }
+ }
+}
diff --git a/test/com/google/common/collect/AbstractIteratorTest.java b/test/com/google/common/collect/AbstractIteratorTest.java
new file mode 100644
index 0000000..e2fc8d4
--- /dev/null
+++ b/test/com/google/common/collect/AbstractIteratorTest.java
@@ -0,0 +1,279 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import junit.framework.TestCase;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+/**
+ * Unit test for {@code AbstractIterator}.
+ *
+ * @author Kevin Bourrillion
+ */
+@SuppressWarnings("serial") // No serialization is used in this test
+public class AbstractIteratorTest extends TestCase {
+
+ public void testDefaultBehaviorOfNextAndHasNext() {
+
+ // This sample AbstractIterator returns 0 on the first call, 1 on the
+ // second, then signals that it's reached the end of the data
+ Iterator<Integer> iter = new AbstractIterator<Integer>() {
+ private int rep;
+ @Override public Integer computeNext() {
+ switch (rep++) {
+ case 0:
+ return 0;
+ case 1:
+ return 1;
+ case 2:
+ return endOfData();
+ default:
+ fail("Should not have been invoked again");
+ return null;
+ }
+ }
+ };
+
+ assertTrue(iter.hasNext());
+ assertEquals(0, (int) iter.next());
+
+ // verify idempotence of hasNext()
+ assertTrue(iter.hasNext());
+ assertTrue(iter.hasNext());
+ assertTrue(iter.hasNext());
+ assertEquals(1, (int) iter.next());
+
+ assertFalse(iter.hasNext());
+
+ // Make sure computeNext() doesn't get invoked again
+ assertFalse(iter.hasNext());
+
+ try {
+ iter.next();
+ fail("no exception thrown");
+ } catch (NoSuchElementException expected) {
+ }
+ }
+
+ public void testDefaultBehaviorOfPeek() {
+ /*
+ * This sample AbstractIterator returns 0 on the first call, 1 on the
+ * second, then signals that it's reached the end of the data
+ */
+ AbstractIterator<Integer> iter = new AbstractIterator<Integer>() {
+ private int rep;
+ @Override public Integer computeNext() {
+ switch (rep++) {
+ case 0:
+ return 0;
+ case 1:
+ return 1;
+ case 2:
+ return endOfData();
+ default:
+ fail("Should not have been invoked again");
+ return null;
+ }
+ }
+ };
+
+ assertEquals(0, (int) iter.peek());
+ assertEquals(0, (int) iter.peek());
+ assertTrue(iter.hasNext());
+ assertEquals(0, (int) iter.peek());
+ assertEquals(0, (int) iter.next());
+
+ assertEquals(1, (int) iter.peek());
+ assertEquals(1, (int) iter.next());
+
+ try {
+ iter.peek();
+ fail("peek() should throw NoSuchElementException at end");
+ } catch (NoSuchElementException expected) {
+ }
+
+ try {
+ iter.peek();
+ fail("peek() should continue to throw NoSuchElementException at end");
+ } catch (NoSuchElementException expected) {
+ }
+
+ try {
+ iter.next();
+ fail("next() should throw NoSuchElementException as usual");
+ } catch (NoSuchElementException expected) {
+ }
+
+ try {
+ iter.peek();
+ fail("peek() should still throw NoSuchElementException after next()");
+ } catch (NoSuchElementException expected) {
+ }
+ }
+
+ public void testDefaultBehaviorOfPeekForEmptyIteration() {
+
+ AbstractIterator<Integer> empty = new AbstractIterator<Integer>() {
+ private boolean alreadyCalledEndOfData;
+ @Override public Integer computeNext() {
+ if (alreadyCalledEndOfData) {
+ fail("Should not have been invoked again");
+ }
+ alreadyCalledEndOfData = true;
+ return endOfData();
+ }
+ };
+
+ try {
+ empty.peek();
+ fail("peek() should throw NoSuchElementException at end");
+ } catch (NoSuchElementException expected) {
+ }
+
+ try {
+ empty.peek();
+ fail("peek() should continue to throw NoSuchElementException at end");
+ } catch (NoSuchElementException expected) {
+ }
+ }
+
+ public void testSneakyThrow() throws Exception {
+ Iterator<Integer> iter = new AbstractIterator<Integer>() {
+ boolean haveBeenCalled;
+ @Override public Integer computeNext() {
+ if (haveBeenCalled) {
+ fail("Should not have been called again");
+ } else {
+ haveBeenCalled = true;
+ SneakyThrower.sneakyThrow();
+ }
+ return null; // never reached
+ }
+ };
+
+ // The first time, the sneakily-thrown exception comes out
+ try {
+ iter.hasNext();
+ fail("No exception thrown");
+ } catch (Exception e) {
+ if (!(e instanceof SomeCheckedException)) {
+ throw e;
+ }
+ }
+
+ // But the second time, AbstractIterator itself throws an ISE
+ try {
+ iter.hasNext();
+ fail("No exception thrown");
+ } catch (IllegalStateException expected) {
+ }
+ }
+
+ public void testException() {
+ final SomeUncheckedException exception = new SomeUncheckedException();
+ Iterator<Integer> iter = new AbstractIterator<Integer>() {
+ @Override public Integer computeNext() {
+ throw exception;
+ }
+ };
+
+ // It should pass through untouched
+ try {
+ iter.hasNext();
+ fail("No exception thrown");
+ } catch (SomeUncheckedException e) {
+ assertSame(exception, e);
+ }
+ }
+
+ public void testExceptionAfterEndOfData() {
+ Iterator<Integer> iter = new AbstractIterator<Integer>() {
+ @Override public Integer computeNext() {
+ endOfData();
+ throw new SomeUncheckedException();
+ }
+ };
+ try {
+ iter.hasNext();
+ fail("No exception thrown");
+ } catch (SomeUncheckedException expected) {
+ }
+ }
+
+ public void testCantRemove() {
+ Iterator<Integer> iter = new AbstractIterator<Integer>() {
+ boolean haveBeenCalled;
+ @Override public Integer computeNext() {
+ if (haveBeenCalled) {
+ endOfData();
+ }
+ haveBeenCalled = true;
+ return 0;
+ }
+ };
+
+ assertEquals(0, (int) iter.next());
+
+ try {
+ iter.remove();
+ fail("No exception thrown");
+ } catch (UnsupportedOperationException expected) {
+ }
+ }
+
+ public void testReentrantHasNext() {
+ Iterator<Integer> iter = new AbstractIterator<Integer>() {
+ @Override protected Integer computeNext() {
+ hasNext();
+ return null;
+ }
+ };
+ try {
+ iter.hasNext();
+ fail();
+ } catch (IllegalStateException expected) {
+ }
+ }
+
+ // Technically we should test other reentrant scenarios (9 combinations of
+ // hasNext/next/peek), but we'll cop out for now, knowing that peek() and
+ // next() both start by invoking hasNext() anyway.
+
+ /**
+ * Throws a undeclared checked exception.
+ */
+ private static class SneakyThrower {
+ SneakyThrower() throws SomeCheckedException {
+ throw new SomeCheckedException();
+ }
+ private static void sneakyThrow() {
+ try {
+ SneakyThrower.class.newInstance();
+ } catch (IllegalAccessException e) {
+ } catch (InstantiationException e) {
+ }
+ }
+ }
+
+ private static class SomeCheckedException extends Exception {
+ }
+
+ private static class SomeUncheckedException extends RuntimeException {
+ }
+}
diff --git a/test/com/google/common/collect/AbstractListMultimapTest.java b/test/com/google/common/collect/AbstractListMultimapTest.java
new file mode 100644
index 0000000..39f31e1
--- /dev/null
+++ b/test/com/google/common/collect/AbstractListMultimapTest.java
@@ -0,0 +1,510 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.testing.IteratorFeature.MODIFIABLE;
+import com.google.common.collect.testing.ListIteratorTester;
+import static com.google.common.testing.junit3.JUnitAsserts.assertContentsInOrder;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+
+/**
+ * Tests for {@code ListMultimap} implementations.
+ *
+ * @author Jared Levy
+ */
+public abstract class AbstractListMultimapTest extends AbstractMultimapTest {
+
+ @Override protected abstract ListMultimap<String, Integer> create();
+
+ /**
+ * Test adding duplicate key-value pairs to multimap.
+ */
+ public void testDuplicates() {
+ Multimap<String, Integer> multimap = create();
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ multimap.put("bar", 3);
+ multimap.put("foo", 1);
+ assertEquals(4, multimap.size());
+ assertTrue(multimap.containsEntry("foo", 1));
+ multimap.remove("foo", 1);
+ assertEquals(3, multimap.size());
+ assertTrue(multimap.containsEntry("foo", 1));
+ }
+
+ /**
+ * Test returned boolean when adding duplicate key-value pairs to multimap.
+ */
+ public void testPutReturn() {
+ Multimap<String, Integer> multimap = create();
+ assertTrue(multimap.put("foo", 1));
+ assertTrue(multimap.put("foo", 1));
+ assertTrue(multimap.put("foo", 3));
+ assertTrue(multimap.put("bar", 5));
+ }
+
+ public void testPutAllReturn_existingElements() {
+ Multimap<String, Integer> multimap = create();
+ assertTrue(multimap.putAll("foo", Arrays.asList(1, 2, 3)));
+ assertTrue(multimap.put("foo", 1));
+ assertTrue(multimap.putAll("foo", Arrays.asList(1, 2, 3)));
+ assertTrue(multimap.putAll("foo", Arrays.asList(1, 3)));
+
+ Multimap<String, Integer> other = create();
+ other.putAll("foo", Arrays.asList(1, 2));
+ assertTrue(multimap.putAll(other));
+
+ other.putAll("bar", Arrays.asList(1, 2));
+ assertTrue(multimap.putAll(other));
+ assertTrue(other.putAll(multimap));
+ }
+
+ /**
+ * Confirm that get() returns a collection equal to a List.
+ */
+ public void testGetEquals() {
+ Multimap<String, Integer> multimap = create();
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ assertEquals(ImmutableList.of(1, 3), multimap.get("foo"));
+ }
+
+ public void testAsMapEquals() {
+ Multimap<String, Integer> multimap = getMultimap();
+ multimap.put("foo", 1);
+ multimap.put("foo", nullValue());
+ multimap.put(nullKey(), 3);
+ Map<String, Collection<Integer>> map = multimap.asMap();
+
+ Map<String, Collection<Integer>> equalMap = Maps.newHashMap();
+ equalMap.put("foo", Arrays.asList(1, nullValue()));
+ equalMap.put(nullKey(), Arrays.asList(3));
+ assertEquals(map, equalMap);
+ assertEquals(equalMap, map);
+ assertEquals(equalMap.hashCode(), multimap.hashCode());
+
+ Map<String, Collection<Integer>> unequalMap = Maps.newHashMap();
+ equalMap.put("foo", Arrays.asList(3, nullValue()));
+ equalMap.put(nullKey(), Arrays.asList(1));
+ assertFalse(map.equals(unequalMap));
+ assertFalse(unequalMap.equals(map));
+ }
+
+ /**
+ * Confirm that asMap().entrySet() returns values equal to a List.
+ */
+ public void testAsMapEntriesEquals() {
+ Multimap<String, Integer> multimap = create();
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ Iterator<Map.Entry<String,Collection<Integer>>> i =
+ multimap.asMap().entrySet().iterator();
+ Map.Entry<String,Collection<Integer>> entry = i.next();
+ assertEquals("foo", entry.getKey());
+ assertEquals(ImmutableList.of(1, 3), entry.getValue());
+ assertFalse(i.hasNext());
+ }
+
+ public void testAsMapValuesRemove() {
+ Multimap<String, Integer> multimap = create();
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ multimap.put("bar", 3);
+ Collection<Collection<Integer>> asMapValues = multimap.asMap().values();
+ assertFalse(asMapValues.remove(Arrays.asList(3, 1)));
+ assertEquals(3, multimap.size());
+ assertTrue(asMapValues.remove(Arrays.asList(1, 3)));
+ assertEquals(1, multimap.size());
+ }
+
+ /**
+ * Test multimap.equals() for multimaps with different insertion orderings.
+ */
+ public void testEqualsOrdering() {
+ Multimap<String, Integer> multimap = create();
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ multimap.put("bar", 3);
+ Multimap<String, Integer> multimap2 = create();
+ multimap2.put("foo", 3);
+ multimap2.put("foo", 1);
+ multimap2.put("bar", 3);
+ assertFalse(multimap.equals(multimap2));
+ }
+
+ /**
+ * Test the ordering of the values returned by multimap.get().
+ */
+ public void testPutGetOrdering() {
+ Multimap<String, Integer> multimap = create();
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ multimap.put("bar", 3);
+ Iterator<Integer> values = multimap.get("foo").iterator();
+ assertEquals(Integer.valueOf(1), values.next());
+ assertEquals(Integer.valueOf(3), values.next());
+ }
+
+ /**
+ * Test List-specific methods on List returned by get().
+ */
+ public void testListMethods() {
+ ListMultimap<String, Integer> multimap = create();
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ multimap.put("foo", 5);
+ List<Integer> list = multimap.get("foo");
+
+ list.add(1, 2);
+ assertEquals(4, multimap.size());
+ assertContentsInOrder(multimap.get("foo"), 1, 2, 3, 5);
+
+ list.addAll(3, Arrays.asList(4, 8));
+ assertEquals(6, multimap.size());
+ assertContentsInOrder(multimap.get("foo"), 1, 2, 3, 4, 8, 5);
+
+ assertEquals(8, list.get(4).intValue());
+ assertEquals(4, list.indexOf(8));
+ assertEquals(4, list.lastIndexOf(8));
+
+ list.remove(4);
+ assertEquals(5, multimap.size());
+ assertContentsInOrder(multimap.get("foo"), 1, 2, 3, 4, 5);
+
+ list.set(4, 10);
+ assertEquals(5, multimap.size());
+ assertContentsInOrder(multimap.get("foo"), 1, 2, 3, 4, 10);
+
+ List<Integer> sublist = list.subList(1, 4);
+ assertContentsInOrder(sublist, 2, 3, 4);
+ list.set(3, 6);
+ assertContentsInOrder(multimap.get("foo"), 1, 2, 3, 6, 10);
+ }
+
+ /**
+ * Test sublist of List returned by get() after the original list is updated.
+ */
+ public void testSublistAfterListUpdate() {
+ ListMultimap<String, Integer> multimap = create();
+ multimap.put("foo", 1);
+ multimap.put("foo", 2);
+ multimap.put("foo", 3);
+ multimap.put("foo", 4);
+ multimap.put("foo", 5);
+
+ List<Integer> list = multimap.get("foo");
+ List<Integer> sublist = list.subList(1, 4);
+ assertContentsInOrder(sublist, 2, 3, 4);
+ list.set(3, 6);
+ assertContentsInOrder(multimap.get("foo"), 1, 2, 3, 6, 5);
+ assertContentsInOrder(sublist, 2, 3, 6);
+ }
+
+ /**
+ * Test ListIterator methods that don't change the multimap.
+ */
+ public void testListIteratorNavigate() {
+ ListMultimap<String, Integer> multimap = create();
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ List<Integer> list = multimap.get("foo");
+ ListIterator<Integer> iterator = list.listIterator();
+
+ assertFalse(iterator.hasPrevious());
+ assertTrue(iterator.hasNext());
+ assertEquals(0, iterator.nextIndex());
+ assertEquals(-1, iterator.previousIndex());
+
+ assertEquals(1, iterator.next().intValue());
+ assertEquals(3, iterator.next().intValue());
+ assertTrue(iterator.hasPrevious());
+ assertFalse(iterator.hasNext());
+
+ assertEquals(3, iterator.previous().intValue());
+ assertEquals(1, iterator.previous().intValue());
+ }
+
+ /**
+ * Test ListIterator methods that change the multimap.
+ */
+ public void testListIteratorUpdate() {
+ ListMultimap<String, Integer> multimap = create();
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ multimap.put("foo", 5);
+ List<Integer> list = multimap.get("foo");
+ ListIterator<Integer> iterator = list.listIterator();
+
+ assertEquals(1, iterator.next().intValue());
+ iterator.set(2);
+ assertContentsInOrder(multimap.get("foo"), 2, 3, 5);
+
+ assertEquals(3, iterator.next().intValue());
+ iterator.remove();
+ assertContentsInOrder(multimap.get("foo"), 2, 5);
+ }
+
+ /**
+ * Test calling toString() on the multimap, which does not have a
+ * deterministic iteration order for keys but does for values.
+ */
+ public void testToString() {
+ String s = createSample().toString();
+ assertTrue(s.equals("{foo=[3, -1, 2, 4, 1], bar=[1, 2, 3, 1]}")
+ || s.equals("{bar=[1, 2, 3, 1], foo=[3, -1, 2, 4, 1]}"));
+ }
+
+ /**
+ * Test calling set() on a sublist.
+ */
+ public void testSublistSet() {
+ ListMultimap<String, Integer> multimap = create();
+ multimap.putAll("foo", Arrays.asList(1, 2, 3, 4, 5));
+ List<Integer> list = multimap.get("foo");
+ assertContentsInOrder(multimap.get("foo"), 1, 2, 3, 4, 5);
+ List<Integer> sublist = list.subList(1, 4);
+ assertContentsInOrder(sublist, 2, 3, 4);
+
+ sublist.set(1, 6);
+ assertContentsInOrder(multimap.get("foo"), 1, 2, 6, 4, 5);
+ }
+
+ /**
+ * Test removing elements from a sublist.
+ */
+ public void testSublistRemove() {
+ ListMultimap<String, Integer> multimap = create();
+ multimap.putAll("foo", Arrays.asList(1, 2, 3, 4, 5));
+ List<Integer> list = multimap.get("foo");
+ assertContentsInOrder(multimap.get("foo"), 1, 2, 3, 4, 5);
+ List<Integer> sublist = list.subList(1, 4);
+ assertContentsInOrder(sublist, 2, 3, 4);
+
+ sublist.remove(1);
+ assertEquals(4, multimap.size());
+ assertContentsInOrder(multimap.get("foo"), 1, 2, 4, 5);
+
+ sublist.removeAll(Collections.singleton(4));
+ assertEquals(3, multimap.size());
+ assertContentsInOrder(multimap.get("foo"), 1, 2, 5);
+
+ sublist.remove(0);
+ assertEquals(2, multimap.size());
+ assertContentsInOrder(multimap.get("foo"), 1, 5);
+ }
+
+ /**
+ * Test adding elements to a sublist.
+ */
+ public void testSublistAdd() {
+ ListMultimap<String, Integer> multimap = create();
+ multimap.putAll("foo", Arrays.asList(1, 2, 3, 4, 5));
+ List<Integer> list = multimap.get("foo");
+ assertContentsInOrder(multimap.get("foo"), 1, 2, 3, 4, 5);
+ List<Integer> sublist = list.subList(1, 4);
+ assertContentsInOrder(sublist, 2, 3, 4);
+
+ sublist.add(6);
+ assertEquals(6, multimap.size());
+ assertContentsInOrder(multimap.get("foo"), 1, 2, 3, 4, 6, 5);
+
+ sublist.add(0, 7);
+ assertEquals(7, multimap.size());
+ assertContentsInOrder(multimap.get("foo"), 1, 7, 2, 3, 4, 6, 5);
+ }
+
+ /**
+ * Test clearing a sublist.
+ */
+ public void testSublistClear() {
+ ListMultimap<String, Integer> multimap = create();
+ multimap.putAll("foo", Arrays.asList(1, 2, 3, 4, 5));
+ List<Integer> list = multimap.get("foo");
+ assertContentsInOrder(multimap.get("foo"), 1, 2, 3, 4, 5);
+ List<Integer> sublist = list.subList(1, 4);
+ assertContentsInOrder(sublist, 2, 3, 4);
+
+ sublist.clear();
+ assertEquals(2, multimap.size());
+ assertContentsInOrder(multimap.get("foo"), 1, 5);
+ }
+
+ /**
+ * Test adding elements to an empty sublist with an empty ancestor.
+ */
+ public void testSublistAddToEmpty() {
+ ListMultimap<String, Integer> multimap = create();
+ multimap.putAll("foo", Arrays.asList(1, 2, 3, 4, 5));
+ List<Integer> list = multimap.get("foo");
+ assertContentsInOrder(multimap.get("foo"), 1, 2, 3, 4, 5);
+ List<Integer> sublist = list.subList(0, 5);
+ assertContentsInOrder(sublist, 1, 2, 3, 4, 5);
+
+ sublist.retainAll(Collections.EMPTY_LIST);
+ assertTrue(multimap.isEmpty());
+
+ sublist.add(6);
+ assertEquals(1, multimap.size());
+ assertTrue(multimap.containsEntry("foo", 6));
+ }
+
+ /**
+ * Test updates through a list iterator retrieved by
+ * multimap.get(key).listIterator(index).
+ */
+ public void testListIteratorIndexUpdate() {
+ ListMultimap<String, Integer> multimap = create();
+ multimap.putAll("foo", Arrays.asList(1, 2, 3, 4, 5));
+ ListIterator<Integer> iterator = multimap.get("foo").listIterator(1);
+
+ assertEquals(2, iterator.next().intValue());
+ iterator.set(6);
+ assertContentsInOrder(multimap.get("foo"), 1, 6, 3, 4, 5);
+
+ assertTrue(iterator.hasNext());
+ assertEquals(3, iterator.next().intValue());
+ iterator.remove();
+ assertContentsInOrder(multimap.get("foo"), 1, 6, 4, 5);
+ assertEquals(4, multimap.size());
+ }
+
+ public void testGetIteration() throws Exception {
+ List<Integer> addItems = ImmutableList.of(99, 88, 77);
+
+ for (final int startIndex : new int[] {0, 3, 5}) {
+ new ListIteratorTester<Integer>(3, addItems, MODIFIABLE,
+ Lists.newArrayList(2, 3, 4, 7, 8), startIndex) {
+ private ListMultimap<String, Integer> multimap;
+
+ @Override protected ListIterator<Integer> newTargetIterator() {
+ multimap = create();
+ multimap.put("bar", 1);
+ multimap.putAll("foo", Arrays.asList(2, 3, 4));
+ multimap.putAll("bar", Arrays.asList(5, 6));
+ multimap.putAll("foo", Arrays.asList(7, 8));
+ return multimap.get("foo").listIterator(startIndex);
+ }
+
+ @Override protected void verify(List<Integer> elements) {
+ assertEquals(elements, multimap.get("foo"));
+ }
+ }.test();
+ }
+ }
+
+ public void testListGetSet() {
+ ListMultimap<String, Integer> map = create();
+ map.put("bar", 1);
+ map.get("bar").set(0, 2);
+ assertEquals("{bar=[2]}", map.toString());
+ assertEquals("[bar=2]", map.entries().toString());
+ }
+
+ public void testListPutAllIterable() {
+ Multimap<String, Integer> map = create();
+ map.putAll("foo", Arrays.asList(1, 2));
+ assertEquals("{foo=[1, 2]}", map.toString());
+ assertEquals("[foo=1, foo=2]", map.entries().toString());
+ }
+
+ public void testListRemoveAll() {
+ Multimap<String, Integer> map = create();
+ map.put("bar", 1);
+ map.put("foo", 2);
+ map.put("bar", 3);
+ map.put("bar", 4);
+ map.removeAll("foo");
+ assertEquals("[bar=1, bar=3, bar=4]", map.entries().toString());
+ assertEquals("{bar=[1, 3, 4]}", map.toString());
+ map.removeAll("bar");
+ assertEquals("[]", map.entries().toString());
+ assertEquals("{}", map.toString());
+ }
+
+ public void testListEquals() {
+ Multimap<String, Integer> map1 = create();
+ map1.put("bar", 1);
+ map1.put("foo", 2);
+ map1.put("bar", 3);
+ Multimap<String, Integer> map2 = ArrayListMultimap.create();
+ map2.putAll(map1);
+ assertTrue(map1.equals(map2));
+ assertTrue(map2.equals(map1));
+ assertFalse(map1.equals(null));
+ assertFalse(map1.equals(new Object()));
+ }
+
+ public void testListHashCode() {
+ Multimap<String, Integer> map1 = create();
+ map1.put("bar", 1);
+ map1.put("foo", 2);
+ map1.put("bar", 3);
+ Multimap<String, Integer> map2 = ArrayListMultimap.create();
+ map2.putAll(map1);
+ assertEquals(map1.hashCode(), map2.hashCode());
+ }
+
+ public void testListAddIndex() {
+ ListMultimap<String, Integer> multimap = create();
+ multimap.put("bar", 11);
+ multimap.put("bar", 12);
+ multimap.get("bar").add(0, 13);
+ assertEquals(Arrays.asList(13, 11, 12), multimap.get("bar"));
+ }
+
+ /**
+ * According to the AbstractCollection.retainAll() implementation,
+ * {@code A.retainAll(B)} should keep all occurrences of each object in B,
+ * so even though the collection that this test passes to retainAll() has
+ * fewer occurrences of 2 than the multimap has, all of the 2s should be
+ * retained.
+ */
+ public void testGetRetainAll() {
+ // TODO: test this logic in ListRetainAllTester
+ ListMultimap<String, Integer> multimap = create();
+ multimap.putAll("foo", Arrays.asList(1, 2, 2, 3, 3, 3));
+
+ multimap.get("foo").retainAll(Arrays.asList(1, 2, 4));
+ assertContentsInOrder("get().retainAll should keep duplicates",
+ multimap.get("foo"), 1, 2, 2);
+ }
+
+ /**
+ * According to the AbstractCollection.removeAll() implementation,
+ * {@code A.removeAll(B)} should remove all occurrences of each object in B,
+ * so even though the collection that this test passes to removeAll() has
+ * fewer occurrences of 2 and 3 than the multimap has, there should be no
+ * 2s or 3s remaining in the collection.
+ */
+ public void testGetRemoveAll_someValuesRemain() {
+ // TODO: test this logic in ListRemoveAllTester
+ ListMultimap<String, Integer> multimap = create();
+ multimap.putAll("foo", Arrays.asList(1, 2, 2, 3, 3, 3));
+
+ multimap.get("foo").removeAll(Arrays.asList(2, 3, 3, 4));
+ assertContentsInOrder(
+ "get().removeAll should remove all occurrences",
+ multimap.get("foo"), 1);
+ }
+}
diff --git a/test/com/google/common/collect/AbstractMapEntryTest.java b/test/com/google/common/collect/AbstractMapEntryTest.java
new file mode 100644
index 0000000..1ac0ab9
--- /dev/null
+++ b/test/com/google/common/collect/AbstractMapEntryTest.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import junit.framework.TestCase;
+
+import java.util.Collections;
+import java.util.Map.Entry;
+
+/**
+ * Tests for {@code AbstractMapEntry}.
+ *
+ * @author Mike Bostock
+ */
+public class AbstractMapEntryTest extends TestCase {
+ private static final String NK = null;
+ private static final Integer NV = null;
+
+ private static <K,V> Entry<K,V> entry(final K key, final V value) {
+ return new AbstractMapEntry<K,V>() {
+ @Override public K getKey() {
+ return key;
+ }
+ @Override public V getValue() {
+ return value;
+ }
+ };
+ }
+
+ private static <K,V> Entry<K,V> control(K key, V value) {
+ return Collections.singletonMap(key, value).entrySet().iterator().next();
+ }
+
+ public void testToString() {
+ assertEquals("foo=1", entry("foo", 1).toString());
+ }
+
+ public void testToStringNull() {
+ assertEquals("null=1", entry(NK, 1).toString());
+ assertEquals("foo=null", entry("foo", NV).toString());
+ assertEquals("null=null", entry(NK, NV).toString());
+ }
+
+ public void testEquals() {
+ Entry<String, Integer> foo1 = entry("foo", 1);
+ assertEquals(foo1, foo1);
+ assertEquals(control("foo", 1), foo1);
+ assertEquals(control("bar", 2), entry("bar", 2));
+ assertFalse(control("foo", 1).equals(entry("foo", 2)));
+ assertFalse(foo1.equals(control("bar", 1)));
+ assertFalse(foo1.equals(new Object()));
+ assertFalse(foo1.equals(null));
+ }
+
+ public void testEqualsNull() {
+ assertEquals(control(NK, 1), entry(NK, 1));
+ assertEquals(control("bar", NV), entry("bar", NV));
+ assertFalse(control(NK, 1).equals(entry(NK, 2)));
+ assertFalse(entry(NK, 1).equals(control("bar", 1)));
+ assertFalse(entry(NK, 1).equals(new Object()));
+ assertFalse(entry(NK, 1).equals(null));
+ }
+
+ public void testHashCode() {
+ assertEquals(control("foo", 1).hashCode(), entry("foo", 1).hashCode());
+ assertEquals(control("bar", 2).hashCode(), entry("bar", 2).hashCode());
+ }
+
+ public void testHashCodeNull() {
+ assertEquals(control(NK, 1).hashCode(), entry(NK, 1).hashCode());
+ assertEquals(control("bar", NV).hashCode(), entry("bar", NV).hashCode());
+ assertEquals(control(NK, NV).hashCode(), entry(NK, NV).hashCode());
+ }
+}
diff --git a/test/com/google/common/collect/AbstractMultimapAsMapImplementsMapTest.java b/test/com/google/common/collect/AbstractMultimapAsMapImplementsMapTest.java
new file mode 100644
index 0000000..b3a7435
--- /dev/null
+++ b/test/com/google/common/collect/AbstractMultimapAsMapImplementsMapTest.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.testing.MapInterfaceTest;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Test {@link Multimap#asMap()} for an arbitrary multimap with
+ * {@link MapInterfaceTest}.
+ *
+ * @author George van den Driessche
+ * @author Jared Levy
+ */
+public abstract class AbstractMultimapAsMapImplementsMapTest
+ extends MapInterfaceTest<String, Collection<Integer>> {
+
+ public AbstractMultimapAsMapImplementsMapTest(
+ boolean modifiable, boolean allowsNulls) {
+ super(allowsNulls, allowsNulls, false, modifiable, modifiable);
+ }
+
+ protected void populate(Multimap<String, Integer> multimap) {
+ multimap.put("one", 1);
+ multimap.put("two", 2);
+ multimap.put("two", 22);
+ multimap.put("three", 3);
+ multimap.put("three", 33);
+ multimap.put("three", 333);
+ }
+
+ @Override protected String getKeyNotInPopulatedMap()
+ throws UnsupportedOperationException {
+ return "zero";
+ }
+
+ @Override protected Collection<Integer> getValueNotInPopulatedMap()
+ throws UnsupportedOperationException {
+ return Lists.newArrayList(0);
+ }
+
+ /**
+ * The version of this test supplied by {@link MapInterfaceTest} fails for
+ * this particular Map implementation, because {@code map.get()} returns a
+ * view collection that changes in the course of a call to {@code remove()}.
+ * Thus, the expectation doesn't hold that {@code map.remove(x)} returns the
+ * same value which {@code map.get(x)} did immediately beforehand.
+ */
+ @Override public void testRemove() {
+ final Map<String, Collection<Integer>> map;
+ final String keyToRemove;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ keyToRemove = map.keySet().iterator().next();
+ if (supportsRemove) {
+ int initialSize = map.size();
+ map.get(keyToRemove);
+ map.remove(keyToRemove);
+ // This line doesn't hold - see the Javadoc comments above.
+ // assertEquals(expectedValue, oldValue);
+ assertFalse(map.containsKey(keyToRemove));
+ assertEquals(initialSize - 1, map.size());
+ } else {
+ try {
+ map.remove(keyToRemove);
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+}
diff --git a/test/com/google/common/collect/AbstractMultimapTest.java b/test/com/google/common/collect/AbstractMultimapTest.java
new file mode 100644
index 0000000..32e0a92
--- /dev/null
+++ b/test/com/google/common/collect/AbstractMultimapTest.java
@@ -0,0 +1,1368 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.testing.Helpers;
+import com.google.common.collect.testing.MinimalIterable;
+import com.google.common.testutils.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import static java.util.Arrays.asList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+/**
+ * Tests for {@code Multimap} implementations. Caution: when subclassing avoid
+ * accidental naming collisions with tests in this class!
+ *
+ * @author Jared Levy
+ */
+public abstract class AbstractMultimapTest extends TestCase {
+
+ private Multimap<String, Integer> multimap;
+
+ protected abstract Multimap<String, Integer> create();
+
+ protected Multimap<String, Integer> createSample() {
+ Multimap<String, Integer> sample = create();
+ sample.putAll("foo", asList(3, -1, 2, 4, 1));
+ sample.putAll("bar", asList(1, 2, 3, 1));
+ return sample;
+ }
+
+ @Override protected void setUp() throws Exception {
+ super.setUp();
+ multimap = create();
+ }
+
+ protected Multimap<String, Integer> getMultimap() {
+ return multimap;
+ }
+
+ /**
+ * Returns the key to use as a null placeholder in tests. The default
+ * implementation returns {@code null}, but tests for multimaps that don't
+ * support null keys should override it.
+ */
+ protected String nullKey() {
+ return null;
+ }
+
+ /**
+ * Returns the value to use as a null placeholder in tests. The default
+ * implementation returns {@code null}, but tests for multimaps that don't
+ * support null values should override it.
+ */
+ protected Integer nullValue() {
+ return null;
+ }
+
+ /**
+ * Validate multimap size by calling {@code size()} and also by iterating
+ * through the entries. This tests cases where the {@code entries()} list is
+ * stored separately, such as the {@link LinkedHashMultimap}. It also
+ * verifies that the multimap contains every multimap entry.
+ */
+ protected void assertSize(int expectedSize) {
+ assertEquals(expectedSize, multimap.size());
+
+ int size = 0;
+ for (Entry<String, Integer> entry : multimap.entries()) {
+ assertTrue(multimap.containsEntry(entry.getKey(), entry.getValue()));
+ size++;
+ }
+ assertEquals(expectedSize, size);
+
+ int size2 = 0;
+ for (Entry<String, Collection<Integer>> entry2 :
+ multimap.asMap().entrySet()) {
+ size2 += entry2.getValue().size();
+ }
+ assertEquals(expectedSize, size2);
+ }
+
+ protected boolean removedCollectionsAreModifiable() {
+ return false;
+ }
+
+ public void testSize0() {
+ assertSize(0);
+ }
+
+ public void testSize1() {
+ multimap.put("foo", 1);
+ assertSize(1);
+ }
+
+ public void testSize2Keys() {
+ multimap.put("foo", 1);
+ multimap.put("bar", 5);
+ assertSize(2);
+ }
+
+ public void testSize2Values() {
+ multimap.put("foo", 1);
+ multimap.put("foo", 7);
+ assertSize(2);
+ }
+
+ public void testSizeNull() {
+ multimap.put("foo", 1);
+ multimap.put("bar", 5);
+ multimap.put(nullKey(), nullValue());
+ multimap.put("foo", nullValue());
+ multimap.put(nullKey(), 5);
+ assertSize(5);
+ }
+
+ public void testIsEmptyYes() {
+ assertTrue(multimap.isEmpty());
+ }
+
+ public void testIsEmptyNo() {
+ multimap.put("foo", 1);
+ assertFalse(multimap.isEmpty());
+ }
+
+ public void testIsEmptyNull() {
+ multimap.put(nullKey(), nullValue());
+ assertFalse(multimap.isEmpty());
+ }
+
+ public void testIsEmptyRemoved() {
+ multimap.put("foo", 1);
+ multimap.remove("foo", 1);
+ assertTrue(multimap.isEmpty());
+ }
+
+ public void testContainsKeyTrue() {
+ multimap.put("foo", 1);
+ assertTrue(multimap.containsKey("foo"));
+ }
+
+ public void testContainsKeyFalse() {
+ multimap.put("foo", 1);
+ assertFalse(multimap.containsKey("bar"));
+ assertFalse(multimap.containsKey(nullKey()));
+ }
+
+ public void testContainsKeyNull() {
+ multimap.put(nullKey(), 1);
+ assertTrue(multimap.containsKey(nullKey()));
+ }
+
+ public void testContainsValueTrue() {
+ multimap.put("foo", 1);
+ assertTrue(multimap.containsValue(1));
+ }
+
+ public void testContainsValueFalse() {
+ multimap.put("foo", 1);
+ assertFalse(multimap.containsValue(2));
+ assertFalse(multimap.containsValue(nullValue()));
+ }
+
+ public void testContainsValueNull() {
+ multimap.put("foo", nullValue());
+ assertTrue(multimap.containsValue(nullValue()));
+ }
+
+ public void testContainsKeyValueTrue() {
+ multimap.put("foo", 1);
+ assertTrue(multimap.containsEntry("foo", 1));
+ }
+
+ public void testContainsKeyValueRemoved() {
+ multimap.put("foo", 1);
+ multimap.remove("foo", 1);
+ assertFalse(multimap.containsEntry("foo", 1));
+ }
+
+ public void testGet0() {
+ multimap.put("foo", 1);
+ Collection<Integer> values = multimap.get("bar");
+ assertEquals(0, values.size());
+ }
+
+ public void testGet1() {
+ multimap.put("foo", 1);
+ multimap.put("bar", 3);
+ Collection<Integer> values = multimap.get("bar");
+ assertEquals(1, values.size());
+ assertTrue(values.contains(3));
+ assertFalse(values.contains(5));
+ }
+
+ public void testGet2() {
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ Collection<Integer> values = multimap.get("foo");
+ assertEquals(2, values.size());
+ assertTrue(values.contains(1));
+ assertTrue(values.contains(3));
+ }
+
+ public void testGetNull() {
+ multimap.put(nullKey(), nullValue());
+ multimap.put(nullKey(), 3);
+ Collection<Integer> values = multimap.get(nullKey());
+ assertEquals(2, values.size());
+ assertTrue(values.contains(nullValue()));
+ assertTrue(values.contains(3));
+ }
+
+ public void testPutAllIterable() {
+ Iterable<Integer> iterable = new Iterable<Integer>() {
+ public Iterator<Integer> iterator() {
+ return Lists.newArrayList(1, 3).iterator();
+ }
+ };
+ multimap.putAll("foo", iterable);
+ assertTrue(multimap.containsEntry("foo", 1));
+ assertTrue(multimap.containsEntry("foo", 3));
+ assertSize(2);
+
+ /*
+ * For some reason, javac says "unchecked generic array creation" without
+ * the second <Integer>:
+ */
+ Iterable<Integer> emptyIterable = MinimalIterable.<Integer>of();
+ multimap.putAll("bar", emptyIterable);
+ assertSize(2);
+ assertEquals(Collections.singleton("foo"), multimap.keySet());
+ }
+
+ public void testPutAllCollection() {
+ Collection<Integer> collection = Lists.newArrayList(1, 3);
+ multimap.putAll("foo", collection);
+ assertTrue(multimap.containsEntry("foo", 1));
+ assertTrue(multimap.containsEntry("foo", 3));
+ assertSize(2);
+
+ Collection<Integer> emptyCollection = Lists.newArrayList();
+ multimap.putAll("bar", emptyCollection);
+ assertSize(2);
+ assertEquals(Collections.singleton("foo"), multimap.keySet());
+ }
+
+ public void testPutAllCollectionNull() {
+ Collection<Integer> collection = Lists.newArrayList(1, nullValue());
+ multimap.putAll(nullKey(), collection);
+ assertTrue(multimap.containsEntry(nullKey(), 1));
+ assertTrue(multimap.containsEntry(nullKey(), nullValue()));
+ assertSize(2);
+ }
+
+ public void testPutAllEmptyCollection() {
+ Collection<Integer> collection = Lists.newArrayList();
+ multimap.putAll("foo", collection);
+ assertSize(0);
+ assertTrue(multimap.isEmpty());
+ }
+
+ public void testPutAllMultimap() {
+ multimap.put("foo", 2);
+ multimap.put("cow", 5);
+ multimap.put(nullKey(), 2);
+ Multimap<String, Integer> multimap2 = create();
+ multimap2.put("foo", 1);
+ multimap2.put("bar", 3);
+ multimap2.put(nullKey(), nullValue());
+ multimap.putAll(multimap2);
+ assertTrue(multimap.containsEntry("foo", 2));
+ assertTrue(multimap.containsEntry("cow", 5));
+ assertTrue(multimap.containsEntry("foo", 1));
+ assertTrue(multimap.containsEntry("bar", 3));
+ assertTrue(multimap.containsEntry(nullKey(), nullValue()));
+ assertTrue(multimap.containsEntry(nullKey(), 2));
+ assertSize(6);
+ }
+
+ public void testPutAllReturn_emptyCollection() {
+ assertFalse(multimap.putAll("foo", new ArrayList<Integer>()));
+ assertFalse(multimap.putAll(create()));
+ }
+
+ public void testPutAllReturn_nonEmptyCollection() {
+ assertTrue(multimap.putAll("foo", asList(1, 2, 3)));
+ assertTrue(multimap.putAll("foo", asList(4, 5, 6)));
+ assertFalse(multimap.putAll(create()));
+
+ Multimap<String,Integer> other = create();
+ other.putAll("bar", asList(7, 8, 9));
+ assertTrue(multimap.putAll(other));
+ }
+
+ private void checkRemovedCollection(Collection<Integer> collection) {
+ if (removedCollectionsAreModifiable()) {
+ collection.add(9876);
+ collection.remove(9876);
+ assertFalse(collection.contains(9876));
+ } else {
+ try {
+ collection.add(9876);
+ fail();
+ } catch (UnsupportedOperationException expected) {
+ }
+ }
+ }
+
+ public void testReplaceValues() {
+ multimap.put("foo", 1);
+ multimap.put("bar", 3);
+ Collection<Integer> values = asList(2, nullValue());
+ Collection<Integer> oldValues = multimap.replaceValues("foo", values);
+ assertTrue(multimap.containsEntry("foo", 2));
+ assertTrue(multimap.containsEntry("foo", nullValue()));
+ assertTrue(multimap.containsEntry("bar", 3));
+ assertSize(3);
+ assertTrue(oldValues.contains(1));
+ assertEquals(1, oldValues.size());
+ checkRemovedCollection(oldValues);
+ }
+
+ public void testReplaceValuesEmpty() {
+ multimap.put("foo", 1);
+ multimap.put("bar", 3);
+ // "<Integer>" for javac 1.5.
+ Collection<Integer> values = Arrays.<Integer>asList();
+ Collection<Integer> oldValues = multimap.replaceValues("foo", values);
+ assertFalse(multimap.containsKey("foo"));
+ assertTrue(multimap.containsEntry("bar", 3));
+ assertSize(1);
+ assertTrue(oldValues.contains(1));
+ assertEquals(1, oldValues.size());
+ checkRemovedCollection(oldValues);
+ }
+
+ public void testReplaceValuesNull() {
+ multimap.put(nullKey(), 1);
+ multimap.put("bar", 3);
+ Collection<Integer> values = asList(2, nullValue());
+ Collection<Integer> oldValues = multimap.replaceValues(nullKey(), values);
+ assertTrue(multimap.containsEntry(nullKey(), 2));
+ assertTrue(multimap.containsEntry(nullKey(), nullValue()));
+ assertTrue(multimap.containsEntry("bar", 3));
+ assertSize(3);
+ assertTrue(oldValues.contains(1));
+ assertEquals(1, oldValues.size());
+ checkRemovedCollection(oldValues);
+ }
+
+ public void testReplaceValuesNotPresent() {
+ multimap.put("bar", 3);
+ Collection<Integer> values = asList(2, 4);
+ Collection<Integer> oldValues = multimap.replaceValues("foo", values);
+ assertTrue(multimap.containsEntry("foo", 2));
+ assertTrue(multimap.containsEntry("foo", 4));
+ assertTrue(multimap.containsEntry("bar", 3));
+ assertSize(3);
+ assertNotNull(oldValues);
+ assertTrue(oldValues.isEmpty());
+ checkRemovedCollection(oldValues);
+ }
+
+ public void testReplaceValuesDuplicates() {
+ Collection<Integer> values = Lists.newArrayList(1, 2, 3, 2, 1);
+ multimap.put("bar", 3);
+ Collection<Integer> oldValues = multimap.replaceValues("bar", values);
+ Collection<Integer> replacedValues = multimap.get("bar");
+ assertSize(multimap.size());
+ assertEquals(replacedValues.size(), multimap.size());
+ assertEquals(1, oldValues.size());
+ assertTrue(oldValues.contains(3));
+ checkRemovedCollection(oldValues);
+ }
+
+ public void testRemove() {
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+
+ assertTrue(multimap.remove("foo", 1));
+ assertFalse(multimap.containsEntry("foo", 1));
+ assertTrue(multimap.containsEntry("foo", 3));
+ assertSize(1);
+
+ assertFalse(multimap.remove("bar", 3));
+ assertTrue(multimap.containsEntry("foo", 3));
+ assertSize(1);
+
+ assertFalse(multimap.remove("foo", 2));
+ assertTrue(multimap.containsEntry("foo", 3));
+ assertSize(1);
+
+ assertTrue(multimap.remove("foo", 3));
+ assertFalse(multimap.containsKey("foo"));
+ assertSize(0);
+ }
+
+ public void testRemoveNull() {
+ multimap.put(nullKey(), 1);
+ multimap.put(nullKey(), 3);
+ multimap.put(nullKey(), nullValue());
+
+ assertTrue(multimap.remove(nullKey(), 1));
+ assertFalse(multimap.containsEntry(nullKey(), 1));
+ assertTrue(multimap.containsEntry(nullKey(), 3));
+ assertTrue(multimap.containsEntry(nullKey(), nullValue()));
+ assertSize(2);
+
+ assertTrue(multimap.remove(nullKey(), nullValue()));
+ assertFalse(multimap.containsEntry(nullKey(), 1));
+ assertTrue(multimap.containsEntry(nullKey(), 3));
+ assertFalse(multimap.containsEntry(nullKey(), nullValue()));
+ assertSize(1);
+ }
+
+ public void testRemoveAll() {
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ Collection<Integer> removed = multimap.removeAll("foo");
+ assertFalse(multimap.containsKey("foo"));
+ assertSize(0);
+ assertTrue(removed.contains(1));
+ assertTrue(removed.contains(3));
+ assertEquals(2, removed.size());
+ checkRemovedCollection(removed);
+ }
+
+ public void testRemoveAllNull() {
+ multimap.put(nullKey(), 1);
+ multimap.put(nullKey(), nullValue());
+ Collection<Integer> removed = multimap.removeAll(nullKey());
+ assertFalse(multimap.containsKey(nullKey()));
+ assertSize(0);
+ assertTrue(removed.contains(1));
+ assertTrue(removed.contains(nullValue()));
+ assertEquals(2, removed.size());
+ checkRemovedCollection(removed);
+ }
+
+ public void testRemoveAllNotPresent() {
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ Collection<Integer> removed = multimap.removeAll("bar");
+ assertSize(2);
+ assertNotNull(removed);
+ assertTrue(removed.isEmpty());
+ checkRemovedCollection(removed);
+ }
+
+ public void testClear() {
+ multimap.put("foo", 1);
+ multimap.put("bar", 3);
+ multimap.clear();
+ assertEquals(0, multimap.keySet().size());
+ assertSize(0);
+ }
+
+ public void testKeySet() {
+ multimap.put("foo", 1);
+ multimap.put("foo", nullValue());
+ multimap.put(nullKey(), 3);
+ Set<String> keys = multimap.keySet();
+ assertEquals(2, keys.size());
+ assertTrue(keys.contains("foo"));
+ assertTrue(keys.contains(nullKey()));
+ assertTrue(keys.containsAll(Lists.newArrayList("foo", nullKey())));
+ assertFalse(keys.containsAll(Lists.newArrayList("foo", "bar")));
+ }
+
+ public void testValues() {
+ multimap.put("foo", 1);
+ multimap.put("foo", nullValue());
+ multimap.put(nullKey(), 3);
+ Collection<Integer> values = multimap.values();
+ assertEquals(3, values.size());
+ assertTrue(values.contains(1));
+ assertTrue(values.contains(3));
+ assertTrue(values.contains(nullValue()));
+ assertFalse(values.contains(5));
+ }
+
+ public void testValuesClear() {
+ multimap.put("foo", 1);
+ multimap.put("foo", nullValue());
+ multimap.put(nullKey(), 3);
+ Collection<Integer> values = multimap.values();
+ values.clear();
+ assertTrue(multimap.isEmpty());
+ assertTrue(values.isEmpty());
+ assertFalse(multimap.containsEntry("foo", 1));
+ }
+
+ public void testValuesRemoveAllNullFromEmpty() {
+ try {
+ multimap.values().removeAll(null);
+ // Returning successfully is not ideal, but tolerated.
+ } catch (NullPointerException expected) {}
+ }
+
+ public void testValuesRetainAllNullFromEmpty() {
+ try {
+ multimap.values().retainAll(null);
+ // Returning successfully is not ideal, but tolerated.
+ } catch (NullPointerException expected) {}
+ }
+
+ // the entries collection is more thoroughly tested in MultimapCollectionTest
+ public void testEntries() {
+ multimap.put("foo", 1);
+ multimap.put("foo", nullValue());
+ multimap.put(nullKey(), 3);
+ Collection<Entry<String, Integer>> entries = multimap.entries();
+ Helpers.assertContentsAnyOrder(entries,
+ Maps.immutableEntry("foo", 1),
+ Maps.immutableEntry("foo", nullValue()),
+ Maps.immutableEntry(nullKey(), 3));
+ }
+
+ public void testNoSuchElementException() {
+ Iterator<Entry<String, Integer>> entries =
+ multimap.entries().iterator();
+ try {
+ entries.next();
+ fail();
+ } catch (NoSuchElementException expected) {}
+ }
+
+ public void testAsMap() {
+ multimap.put("foo", 1);
+ multimap.put("foo", nullValue());
+ multimap.put(nullKey(), 3);
+ Map<String, Collection<Integer>> map = multimap.asMap();
+
+ assertEquals(2, map.size());
+ Helpers.assertContentsAnyOrder(map.get("foo"), 1, nullValue());
+ Helpers.assertContentsAnyOrder(map.get(nullKey()), 3);
+ assertNull(map.get("bar"));
+ assertTrue(map.containsKey("foo"));
+ assertTrue(map.containsKey(nullKey()));
+ assertFalse(multimap.containsKey("bar"));
+
+ Helpers.assertContentsAnyOrder(map.remove("foo"), 1, nullValue());
+ assertFalse(multimap.containsKey("foo"));
+ assertEquals(1, multimap.size());
+ assertNull(map.remove("bar"));
+ multimap.get(nullKey()).add(5);
+ assertTrue(multimap.containsEntry(nullKey(), 5));
+ assertEquals(2, multimap.size());
+ multimap.get(nullKey()).clear();
+ assertTrue(multimap.isEmpty());
+ assertEquals(0, multimap.size());
+
+ try {
+ map.put("bar", asList(4, 8));
+ fail("Expected UnsupportedOperationException");
+ } catch (UnsupportedOperationException expected) {}
+
+ multimap.put("bar", 5);
+ assertSize(1);
+ map.clear();
+ assertSize(0);
+ }
+
+ public void testAsMapEntries() {
+ multimap.put("foo", 1);
+ multimap.put("foo", nullValue());
+ multimap.put(nullKey(), 3);
+ Collection<Entry<String, Collection<Integer>>> entries =
+ multimap.asMap().entrySet();
+ assertEquals(2, entries.size());
+
+ assertTrue(entries.contains(
+ Maps.immutableEntry("foo", multimap.get("foo"))));
+ assertFalse(entries.contains(
+ Maps.immutableEntry("bar", multimap.get("foo"))));
+ assertFalse(entries.contains(
+ Maps.immutableEntry("bar", null)));
+ assertFalse(entries.contains(
+ Maps.immutableEntry("foo", null)));
+ assertFalse(entries.contains(
+ Maps.immutableEntry("foo", asList(1, 4))));
+ assertFalse(entries.contains("foo"));
+
+ Iterator<Entry<String, Collection<Integer>>> iterator =
+ entries.iterator();
+ for (int i = 0; i < 2; i++) {
+ assertTrue(iterator.hasNext());
+ Entry<String, Collection<Integer>> entry = iterator.next();
+ if ("foo".equals(entry.getKey())) {
+ assertEquals(2, entry.getValue().size());
+ assertTrue(entry.getValue().contains(1));
+ assertTrue(entry.getValue().contains(nullValue()));
+ } else {
+ assertEquals(nullKey(), entry.getKey());
+ assertEquals(1, entry.getValue().size());
+ assertTrue(entry.getValue().contains(3));
+ }
+ }
+ assertFalse(iterator.hasNext());
+ }
+
+ public void testAsMapToString() {
+ multimap.put("foo", 1);
+ assertEquals("{foo=[1]}", multimap.asMap().toString());
+ }
+
+ public void testKeys() {
+ multimap.put("foo", 1);
+ multimap.put("foo", 5);
+ multimap.put("foo", nullValue());
+ multimap.put(nullKey(), 3);
+ Multiset<String> multiset = multimap.keys();
+ assertEquals(3, multiset.count("foo"));
+ assertEquals(1, multiset.count(nullKey()));
+ Helpers.assertContentsAnyOrder(multiset.elementSet(), "foo", nullKey());
+ assertEquals(2, multiset.entrySet().size());
+ assertEquals(4, multiset.size());
+
+ Set<Multiset.Entry<String>> entries = multimap.keys().entrySet();
+ assertTrue(entries.contains(Multisets.immutableEntry("foo", 3)));
+ assertFalse(entries.contains(Multisets.immutableEntry("foo", 2)));
+ assertFalse(entries.contains(Maps.immutableEntry("foo", 3)));
+
+ Multiset<String> foo3null1 =
+ HashMultiset.create(asList("foo", "foo", nullKey(), "foo"));
+ assertEquals(foo3null1, multiset);
+ assertEquals(multiset, foo3null1);
+ assertFalse(multiset.equals(
+ HashMultiset.create(asList("foo", "foo", nullKey(), nullKey()))));
+ assertEquals(foo3null1.hashCode(), multiset.hashCode());
+ assertEquals(foo3null1.entrySet(), multiset.entrySet());
+ assertEquals(multiset.entrySet(), foo3null1.entrySet());
+ assertEquals(foo3null1.entrySet().hashCode(),
+ multiset.entrySet().hashCode());
+
+ assertEquals(0, multiset.remove("bar", 1));
+ assertEquals(1, multiset.remove(nullKey(), 4));
+ assertFalse(multimap.containsKey(nullKey()));
+ assertSize(3);
+ assertEquals("foo", entries.iterator().next().getElement());
+
+ assertEquals(3, multiset.remove("foo", 1));
+ assertTrue(multimap.containsKey("foo"));
+ assertSize(2);
+ assertEquals(2, multiset.setCount("foo", 0));
+ assertEquals(0, multiset.setCount("bar", 0));
+ }
+
+ public void testKeysAdd() {
+ multimap.put("foo", 1);
+ Multiset<String> multiset = multimap.keys();
+
+ try {
+ multiset.add("bar");
+ fail();
+ } catch (UnsupportedOperationException expected) {}
+
+ try {
+ multiset.add("bar", 2);
+ fail();
+ } catch (UnsupportedOperationException expected) {}
+ }
+
+ public void testKeysContainsAll() {
+ multimap.put("foo", 1);
+ multimap.put("foo", 5);
+ multimap.put("foo", nullValue());
+ multimap.put(nullKey(), 3);
+ Multiset<String> multiset = multimap.keys();
+
+ assertTrue(multiset.containsAll(asList("foo", nullKey())));
+ assertFalse(multiset.containsAll(asList("foo", "bar")));
+ }
+
+ public void testKeysClear() {
+ multimap.put("foo", 1);
+ multimap.put("foo", 5);
+ multimap.put("foo", nullValue());
+ multimap.put(nullKey(), 3);
+ Multiset<String> multiset = multimap.keys();
+
+ multiset.clear();
+ assertTrue(multiset.isEmpty());
+ assertTrue(multimap.isEmpty());
+ assertSize(0);
+ assertFalse(multimap.containsKey("foo"));
+ assertFalse(multimap.containsKey(nullKey()));
+ }
+
+ public void testKeysToString() {
+ multimap.put("foo", 7);
+ multimap.put("foo", 8);
+ assertEquals("[foo x 2]", multimap.keys().toString());
+ }
+
+ public void testKeysEntrySetIterator() {
+ multimap.put("foo", 7);
+ multimap.put("foo", 8);
+ Iterator<Multiset.Entry<String>> iterator
+ = multimap.keys().entrySet().iterator();
+ assertTrue(iterator.hasNext());
+ assertEquals(Multisets.immutableEntry("foo", 2), iterator.next());
+ iterator.remove();
+ assertFalse(iterator.hasNext());
+ assertSize(0);
+ }
+
+ public void testKeysEntrySetToString() {
+ multimap.put("foo", 7);
+ multimap.put("foo", 8);
+ assertEquals("[foo x 2]", multimap.keys().entrySet().toString());
+ }
+
+ public void testKeysEntrySetRemove() {
+ multimap.putAll("foo", asList(1, 2, 3));
+ multimap.putAll("bar", asList(4, 5));
+ Set<Multiset.Entry<String>> entries = multimap.keys().entrySet();
+ assertTrue(entries.remove(Multisets.immutableEntry("bar", 2)));
+ assertEquals("[foo x 3]", multimap.keys().entrySet().toString());
+
+ // doesn't exist in entries, should have no effect
+ assertFalse(entries.remove(Multisets.immutableEntry("foo", 2)));
+ assertEquals("[foo x 3]", multimap.keys().entrySet().toString());
+ assertEquals("Multimap size after keys().entrySet().remove(entry)",
+ 3, multimap.size());
+ }
+
+ public void testEqualsTrue() {
+ multimap.put("foo", 1);
+ multimap.put("foo", nullValue());
+ multimap.put(nullKey(), 3);
+ assertEquals(multimap, multimap);
+
+ Multimap<String, Integer> multimap2 = create();
+ multimap2.put(nullKey(), 3);
+ multimap2.put("foo", 1);
+ multimap2.put("foo", nullValue());
+
+ assertEquals(multimap, multimap2);
+ assertEquals(multimap.hashCode(), multimap2.hashCode());
+ }
+
+ public void testEqualsFalse() {
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ multimap.put("bar", 3);
+
+ Multimap<String, Integer> multimap2 = create();
+ multimap2.put("bar", 3);
+ multimap2.put("bar", 1);
+ assertFalse(multimap.equals(multimap2));
+
+ multimap2.put("foo", 3);
+ assertFalse(multimap.equals(multimap2));
+
+ assertFalse(multimap.equals(nullValue()));
+ assertFalse(multimap.equals("foo"));
+ }
+
+ public void testValuesIterator() {
+ multimap.put("foo", 1);
+ multimap.put("foo", 2);
+ multimap.put(nullKey(), 4);
+ int sum = 0;
+ for (int i : multimap.values()) {
+ sum += i;
+ }
+ assertEquals(7, sum);
+ }
+
+ public void testValuesIteratorEmpty() {
+ int sum = 0;
+ for (int i : multimap.values()) {
+ sum += i;
+ }
+ assertEquals(0, sum);
+ }
+
+ public void testGetAddQuery() {
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ multimap.put("bar", 4);
+ Collection<Integer> values = multimap.get("foo");
+ multimap.put("foo", 5);
+ multimap.put("bar", 6);
+
+ /* Verify that values includes effect of put. */
+ assertEquals(3, values.size());
+ assertTrue(values.contains(1));
+ assertTrue(values.contains(5));
+ assertFalse(values.contains(6));
+ Helpers.assertContentsAnyOrder(values, 1, 3, 5);
+ assertTrue(values.containsAll(asList(3, 5)));
+ assertFalse(values.isEmpty());
+ assertEquals(multimap.get("foo"), values);
+ assertEquals(multimap.get("foo").hashCode(), values.hashCode());
+ assertEquals(multimap.get("foo").toString(), values.toString());
+ }
+
+ public void testGetAddAll() {
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ multimap.get("foo").addAll(asList(5, 7));
+ multimap.get("bar").addAll(asList(6, 8));
+ multimap.get("cow").addAll(Arrays.<Integer>asList());
+ assertSize(6);
+ Helpers.assertContentsAnyOrder(multimap.get("foo"), 1, 3, 5, 7);
+ Helpers.assertContentsAnyOrder(multimap.get("bar"), 6, 8);
+ Helpers.assertContentsAnyOrder(multimap.get("cow"));
+ }
+
+ public void testGetRemoveAddQuery() {
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ multimap.put("bar", 4);
+ Collection<Integer> values = multimap.get("foo");
+ Iterator<Integer> iterator = values.iterator();
+ multimap.remove("foo", 1);
+ multimap.remove("foo", 3);
+
+ /* Verify that values includes effect of remove */
+ assertEquals(0, values.size());
+ assertFalse(values.contains(1));
+ assertFalse(values.contains(6));
+ assertTrue(values.isEmpty());
+ assertEquals(multimap.get("foo"), values);
+ assertEquals(multimap.get("foo").hashCode(), values.hashCode());
+ assertEquals(multimap.get("foo").toString(), values.toString());
+
+ multimap.put("foo", 5);
+
+ /* Verify that values includes effect of put. */
+ assertEquals(1, values.size());
+ assertFalse(values.contains(1));
+ assertTrue(values.contains(5));
+ assertFalse(values.contains(6));
+ assertEquals(5, values.iterator().next().intValue());
+ assertFalse(values.isEmpty());
+ assertEquals(multimap.get("foo"), values);
+ assertEquals(multimap.get("foo").hashCode(), values.hashCode());
+ assertEquals(multimap.get("foo").toString(), values.toString());
+
+ try {
+ iterator.hasNext();
+ } catch (ConcurrentModificationException expected) {}
+ }
+
+ public void testModifyCollectionFromGet() {
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ multimap.put("bar", 4);
+ Collection<Integer> values = multimap.get("foo");
+
+ assertTrue(values.add(5));
+ assertSize(4);
+ assertEquals(3, multimap.get("foo").size());
+ assertTrue(multimap.containsEntry("foo", 5));
+
+ values.clear();
+ assertSize(1);
+ assertFalse(multimap.containsKey("foo"));
+
+ assertTrue(values.addAll(asList(7, 9)));
+ assertSize(3);
+ assertEquals(2, multimap.get("foo").size());
+ assertTrue(multimap.containsEntry("foo", 7));
+ assertTrue(multimap.containsEntry("foo", 9));
+ assertFalse(values.addAll(Collections.<Integer>emptyList()));
+ assertSize(3);
+
+ assertTrue(values.remove(7));
+ assertSize(2);
+ assertEquals(1, multimap.get("foo").size());
+ assertFalse(multimap.containsEntry("foo", 7));
+ assertTrue(multimap.containsEntry("foo", 9));
+ assertFalse(values.remove(77));
+ assertSize(2);
+
+ assertTrue(values.add(11));
+ assertTrue(values.add(13));
+ assertTrue(values.add(15));
+ assertTrue(values.add(17));
+
+ assertTrue(values.removeAll(asList(11, 15)));
+ assertSize(4);
+ Helpers.assertContentsAnyOrder(multimap.get("foo"), 9, 13, 17);
+ assertFalse(values.removeAll(asList(21, 25)));
+ assertSize(4);
+
+ assertTrue(values.retainAll(asList(13, 17, 19)));
+ assertSize(3);
+ Helpers.assertContentsAnyOrder(multimap.get("foo"), 13, 17);
+ assertFalse(values.retainAll(asList(13, 17, 19)));
+ assertSize(3);
+
+ values.remove(13);
+ values.remove(17);
+ assertTrue(multimap.get("foo").isEmpty());
+ assertSize(1);
+ assertFalse(multimap.containsKey("foo"));
+ }
+
+ public void testGetIterator() {
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ multimap.put("foo", 5);
+ multimap.put("bar", 4);
+ Collection<Integer> values = multimap.get("foo");
+
+ Iterator<Integer> iterator = values.iterator();
+ assertTrue(iterator.hasNext());
+ Integer v1 = iterator.next();
+ assertTrue(iterator.hasNext());
+ Integer v2 = iterator.next();
+ iterator.remove();
+ assertTrue(iterator.hasNext());
+ Integer v3 = iterator.next();
+ assertFalse(iterator.hasNext());
+
+ Helpers.assertContentsAnyOrder(asList(v1, v2, v3), 1, 3, 5);
+ assertSize(3);
+ assertTrue(multimap.containsEntry("foo", v1));
+ assertFalse(multimap.containsEntry("foo", v2));
+ assertTrue(multimap.containsEntry("foo", v3));
+
+ iterator = values.iterator();
+ assertTrue(iterator.hasNext());
+ Integer n1 = iterator.next();
+ iterator.remove();
+ assertTrue(iterator.hasNext());
+ Integer n3 = iterator.next();
+ iterator.remove();
+ assertFalse(iterator.hasNext());
+
+ Helpers.assertContentsAnyOrder(asList(n1, n3), v1, v3);
+ assertSize(1);
+ assertFalse(multimap.containsKey("foo"));
+ }
+
+ public void testGetClear() {
+ multimap.put("foo", 1);
+ multimap.put("bar", 3);
+ Collection<Integer> values = multimap.get("foo");
+ multimap.clear();
+ assertTrue(values.isEmpty());
+ }
+
+ public void testGetPutAllCollection() {
+ Collection<Integer> values = multimap.get("foo");
+ Collection<Integer> collection = Lists.newArrayList(1, 3);
+ multimap.putAll("foo", collection);
+ Helpers.assertContentsAnyOrder(values, 1, 3);
+ }
+
+ public void testGetPutAllMultimap() {
+ multimap.put("foo", 2);
+ multimap.put("cow", 5);
+ multimap.put(nullKey(), 2);
+ Collection<Integer> valuesFoo = multimap.get("foo");
+ Collection<Integer> valuesBar = multimap.get("bar");
+ Collection<Integer> valuesCow = multimap.get("cow");
+ Collection<Integer> valuesNull = multimap.get(nullKey());
+ Multimap<String, Integer> multimap2 = create();
+ multimap2.put("foo", 1);
+ multimap2.put("bar", 3);
+ multimap2.put(nullKey(), nullValue());
+ multimap.putAll(multimap2);
+
+ Helpers.assertContentsAnyOrder(valuesFoo, 1, 2);
+ Helpers.assertContentsAnyOrder(valuesBar, 3);
+ Helpers.assertContentsAnyOrder(valuesCow, 5);
+ Helpers.assertContentsAnyOrder(valuesNull, nullValue(), 2);
+ }
+
+ public void testGetRemove() {
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ Collection<Integer> values = multimap.get("foo");
+ multimap.remove("foo", 1);
+ Helpers.assertContentsAnyOrder(values, 3);
+ }
+
+ public void testGetRemoveAll() {
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ Collection<Integer> values = multimap.get("foo");
+ multimap.removeAll("foo");
+ assertTrue(values.isEmpty());
+ }
+
+ public void testGetReplaceValues() {
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ Collection<Integer> values = multimap.get("foo");
+ multimap.replaceValues("foo", asList(1, 5));
+ Helpers.assertContentsAnyOrder(values, 1, 5);
+
+ multimap.replaceValues("foo", new ArrayList<Integer>());
+ assertTrue(multimap.isEmpty());
+ assertSize(0);
+ assertTrue(values.isEmpty());
+ }
+
+ public void testEntriesUpdate() {
+ multimap.put("foo", 1);
+ Collection<Entry<String, Integer>> entries = multimap.entries();
+ Iterator<Entry<String, Integer>> iterator = entries.iterator();
+
+ assertTrue(iterator.hasNext());
+ Entry<String, Integer> entry = iterator.next();
+ assertEquals("foo", entry.getKey());
+ assertEquals(1, entry.getValue().intValue());
+ iterator.remove();
+ assertFalse(iterator.hasNext());
+ assertTrue(multimap.isEmpty());
+ assertSize(0);
+
+ try {
+ entries.add(Maps.immutableEntry("bar", 2));
+ fail("UnsupportedOperationException expected");
+ } catch (UnsupportedOperationException expected) {}
+ assertSize(0);
+ assertFalse(multimap.containsEntry("bar", 2));
+
+ multimap.put("bar", 2);
+ assertSize(1);
+ assertTrue(entries.contains(Maps.immutableEntry("bar", 2)));
+
+ entries.clear();
+ assertTrue(multimap.isEmpty());
+ assertSize(0);
+ }
+
+ public void testEntriesRemove() {
+ multimap.put("foo", 1);
+ multimap.put("foo", nullValue());
+ multimap.put(nullKey(), 3);
+ Collection<Entry<String, Integer>> entries = multimap.entries();
+
+ assertTrue(entries.remove(Maps.immutableEntry("foo", nullValue())));
+ assertSize(2);
+ assertFalse(multimap.containsEntry("foo", nullValue()));
+
+ assertFalse(entries.remove(Maps.immutableEntry("foo", 3)));
+ assertFalse(entries.remove(3.5));
+ assertSize(2);
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testEntriesRemoveAll() {
+ multimap.put("foo", 1);
+ multimap.put("foo", 2);
+ multimap.put("bar", 3);
+
+ assertFalse(multimap.entries().removeAll(
+ Collections.singleton(Maps.immutableEntry("foo", 3))));
+ assertSize(3);
+
+ assertTrue(multimap.entries().removeAll(asList(
+ Maps.immutableEntry("foo", 3), Maps.immutableEntry("bar", 3))));
+ assertSize(2);
+ assertFalse(multimap.containsKey("bar"));
+ }
+
+ public void testEntriesRemoveAllNullFromEmpty() {
+ try {
+ multimap.entries().removeAll(null);
+ // Returning successfully is not ideal, but tolerated.
+ } catch (NullPointerException expected) {}
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testEntriesRetainAll() {
+ multimap.put("foo", 1);
+ multimap.put("foo", 2);
+ multimap.put("bar", 3);
+
+ assertFalse(multimap.entries().retainAll(asList(
+ Maps.immutableEntry("foo", 1), Maps.immutableEntry("foo", 2),
+ Maps.immutableEntry("foo", 3), Maps.immutableEntry("bar", 3))));
+ assertSize(3);
+
+ assertTrue(multimap.entries().retainAll(asList(
+ Maps.immutableEntry("foo", 3), Maps.immutableEntry("bar", 3))));
+ assertSize(1);
+ assertTrue(multimap.containsEntry("bar", 3));
+ }
+
+ public void testEntriesRetainAllNullFromEmpty() {
+ try {
+ multimap.entries().retainAll(null);
+ // Returning successfully is not ideal, but tolerated.
+ } catch (NullPointerException expected) {}
+ }
+
+ public void testEntriesIterator() {
+ multimap.put("foo", 3);
+ Iterator<Entry<String, Integer>> iterator
+ = multimap.entries().iterator();
+ assertTrue(iterator.hasNext());
+ assertEquals(Maps.immutableEntry("foo", 3), iterator.next());
+ iterator.remove();
+ assertFalse(iterator.hasNext());
+ assertSize(0);
+ }
+
+ public void testEntriesToString() {
+ multimap.put("foo", 3);
+ Collection<Entry<String, Integer>> entries = multimap.entries();
+ assertEquals("[foo=3]", entries.toString());
+ }
+
+ public void testEntriesToArray() {
+ multimap.put("foo", 3);
+ Collection<Entry<String, Integer>> entries = multimap.entries();
+ Entry<?, ?>[] array = new Entry<?, ?>[3];
+ assertSame(array, entries.toArray(array));
+ assertEquals(Maps.immutableEntry("foo", 3), array[0]);
+ assertNull(array[1]);
+ }
+
+ /**
+ * Test calling setValue() on an entry returned by multimap.entries().
+ */
+ public void testEntrySetValue() {
+ multimap.put("foo", 1);
+ multimap.put("bar", 1);
+ Collection<Entry<String, Integer>> entries = multimap.entries();
+ Iterator<Entry<String, Integer>> iterator = entries.iterator();
+ Entry<String, Integer> entrya = iterator.next();
+ Entry<String, Integer> entryb = iterator.next();
+ try {
+ entrya.setValue(3);
+ fail();
+ } catch (UnsupportedOperationException expected) {}
+ assertTrue(multimap.containsEntry("foo", 1));
+ assertTrue(multimap.containsEntry("bar", 1));
+ assertFalse(multimap.containsEntry("foo", 2));
+ assertFalse(multimap.containsEntry("bar", 2));
+ assertEquals(1, (int) entrya.getValue());
+ assertEquals(1, (int) entryb.getValue());
+ }
+
+ /** Verify that the entries remain valid after iterating past them. */
+ public void testEntriesCopy() {
+ multimap.put("foo", 1);
+ multimap.put("foo", 2);
+ multimap.put("bar", 3);
+
+ Set<Entry<String, Integer>> copy = Sets.newHashSet(multimap.entries());
+ assertEquals(3, copy.size());
+ assertTrue(copy.contains(Maps.immutableEntry("foo", 1)));
+ assertTrue(copy.contains(Maps.immutableEntry("foo", 2)));
+ assertTrue(copy.contains(Maps.immutableEntry("bar", 3)));
+ assertFalse(copy.contains(Maps.immutableEntry("bar", 1)));
+
+ multimap.removeAll("foo");
+ assertEquals(3, copy.size());
+ assertTrue(copy.contains(Maps.immutableEntry("foo", 1)));
+ assertTrue(copy.contains(Maps.immutableEntry("foo", 2)));
+ assertTrue(copy.contains(Maps.immutableEntry("bar", 3)));
+ assertFalse(copy.contains(Maps.immutableEntry("bar", 1)));
+ }
+
+ public void testKeySetRemove() {
+ multimap.put("foo", 1);
+ multimap.put("foo", nullValue());
+ multimap.put(nullKey(), 3);
+ Set<String> keys = multimap.keySet();
+ assertTrue(keys.remove("foo"));
+ assertFalse(keys.remove("bar"));
+ assertSize(1);
+ assertFalse(multimap.containsKey("foo"));
+ assertTrue(multimap.containsEntry(nullKey(), 3));
+ }
+
+ public void testKeySetRemoveAllNullFromEmpty() {
+ try {
+ multimap.keySet().removeAll(null);
+ fail();
+ } catch (NullPointerException expected) {}
+ }
+
+ public void testKeySetRetainAllNullFromEmpty() {
+ try {
+ multimap.keySet().retainAll(null);
+ // Returning successfully is not ideal, but tolerated.
+ } catch (NullPointerException expected) {}
+ }
+
+ public void testKeySetIterator() {
+ multimap.put("foo", 1);
+ multimap.put("foo", nullValue());
+ multimap.put(nullKey(), 3);
+
+ Iterator<String> iterator = multimap.keySet().iterator();
+ while (iterator.hasNext()) {
+ String key = iterator.next();
+ if ("foo".equals(key)) {
+ iterator.remove();
+ }
+ }
+ assertSize(1);
+ assertFalse(multimap.containsKey("foo"));
+ assertTrue(multimap.containsEntry(nullKey(), 3));
+
+ iterator = multimap.keySet().iterator();
+ assertEquals(nullKey(), iterator.next());
+ iterator.remove();
+ assertTrue(multimap.isEmpty());
+ assertSize(0);
+ }
+
+ public void testKeySetClear() {
+ multimap.put("foo", 1);
+ multimap.put("foo", nullValue());
+ multimap.put(nullKey(), 3);
+
+ multimap.keySet().clear();
+ assertTrue(multimap.isEmpty());
+ assertSize(0);
+ }
+
+ public void testValuesIteratorRemove() {
+ multimap.put("foo", 1);
+ multimap.put("foo", 2);
+ multimap.put(nullKey(), 4);
+
+ Iterator<Integer> iterator = multimap.values().iterator();
+ while (iterator.hasNext()) {
+ int value = iterator.next();
+ if ((value % 2) == 0) {
+ iterator.remove();
+ }
+ }
+
+ assertSize(1);
+ assertTrue(multimap.containsEntry("foo", 1));
+ }
+
+ public void testAsMapEntriesUpdate() {
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ Collection<Entry<String, Collection<Integer>>> entries =
+ multimap.asMap().entrySet();
+ Entry<String, Collection<Integer>> entry = entries.iterator().next();
+ Collection<Integer> values = entry.getValue();
+
+ multimap.put("foo", 5);
+ assertEquals(3, values.size());
+ assertTrue(values.contains(5));
+
+ values.add(7);
+ assertSize(4);
+ assertTrue(multimap.containsValue(7));
+
+ multimap.put("bar", 4);
+ assertEquals(2, entries.size());
+ assertSize(5);
+
+ assertTrue(entries.remove(entry));
+ assertSize(1);
+ assertFalse(multimap.containsKey("foo"));
+ assertTrue(multimap.containsKey("bar"));
+ assertFalse(entries.remove("foo"));
+ assertFalse(entries.remove(
+ Maps.immutableEntry("foo", Collections.singleton(2))));
+ assertSize(1);
+
+ Iterator<Entry<String, Collection<Integer>>> iterator =
+ entries.iterator();
+ assertTrue(iterator.hasNext());
+ iterator.next();
+ iterator.remove();
+ assertFalse(iterator.hasNext());
+ assertSize(0);
+ assertTrue(multimap.isEmpty());
+
+ multimap.put("bar", 8);
+ assertSize(1);
+ entries.clear();
+ assertSize(0);
+ }
+
+ public void testToStringNull() {
+ multimap.put("foo", 3);
+ multimap.put("foo", -1);
+ multimap.put(nullKey(), nullValue());
+ multimap.put("bar", 1);
+ multimap.put("foo", 2);
+ multimap.put(nullKey(), 0);
+ multimap.put("bar", 2);
+ multimap.put("bar", nullValue());
+ multimap.put("foo", nullValue());
+ multimap.put("foo", 4);
+ multimap.put(nullKey(), -1);
+ multimap.put("bar", 3);
+ multimap.put("bar", 1);
+ multimap.put("foo", 1);
+
+ // This test is brittle. The original test was meant to validate the
+ // contents of the string itself, but key and value ordering tend
+ // to change under unpredictable circumstances. Instead, we're just ensuring
+ // that the string not return null and, implicitly, not throw an exception.
+ assertNotNull(multimap.toString());
+ }
+
+ public void testSerializable() {
+ multimap = createSample();
+ assertEquals(multimap, SerializableTester.reserialize(multimap));
+ }
+
+ public void testEmptyToString() {
+ Multimap<String, Integer> map = create();
+ assertEquals("{}", map.toString());
+ assertEquals("[]", map.entries().toString());
+ }
+
+ public void testEmptyGetToString() {
+ Multimap<String, Integer> map = create();
+ map.get("foo"); // shouldn't have any side-effect
+ assertEquals("{}", map.toString());
+ assertEquals("[]", map.entries().toString());
+ }
+
+ public void testGetRemoveToString() {
+ Multimap<String, Integer> map = create();
+ map.put("bar", 1);
+ map.put("foo", 2);
+ map.put("bar", 3);
+ map.get("foo").remove(2);
+ map.get("bar").remove(1);
+ assertEquals("{bar=[3]}", map.toString());
+ assertEquals("[bar=3]", map.entries().toString());
+ }
+
+ public void testRemoveToString() {
+ Multimap<String, Integer> map = create();
+ map.put("foo", 1);
+ map.put("foo", 2);
+ map.remove("foo", 1);
+ assertEquals("[foo=2]", map.entries().toString());
+ }
+}
diff --git a/test/com/google/common/collect/AbstractMultisetTest.java b/test/com/google/common/collect/AbstractMultisetTest.java
new file mode 100644
index 0000000..5cc577f
--- /dev/null
+++ b/test/com/google/common/collect/AbstractMultisetTest.java
@@ -0,0 +1,684 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.Multiset.Entry;
+import com.google.common.collect.testing.google.UnmodifiableCollectionTests;
+import com.google.common.testutils.SerializableTester;
+
+import static java.util.Arrays.asList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+/**
+ * Common tests for a {@link Multiset}.
+ *
+ * @author Kevin Bourrillion
+ */
+public abstract class AbstractMultisetTest extends AbstractCollectionTest {
+
+ @Override protected abstract <E> Multiset<E> create();
+
+ protected Multiset<String> ms;
+
+ @Override protected void setUp() throws Exception {
+ super.setUp();
+ c = ms = create();
+ }
+
+ /**
+ * Validates that multiset size returned by {@code size()} is the same as the
+ * size generated by summing the counts of all multiset entries.
+ */
+ protected void assertSize(Multiset<String> multiset) {
+ long size = 0;
+ for (Multiset.Entry<String> entry : multiset.entrySet()) {
+ size += entry.getCount();
+ }
+ assertEquals((int) Math.min(size, Integer.MAX_VALUE), multiset.size());
+ }
+
+ protected void assertSize() {
+ assertSize(ms);
+ }
+
+ @Override protected void assertContents(String... expected) {
+ super.assertContents(expected);
+ assertSize();
+ }
+
+ /**
+ * Don't run {@code NullPointerTester} on multisets, since they fail with
+ * Java 6 due to a bug in the JDK, as illustrated in the commented out
+ * method {@code HashMultisetTest#testAnnotations()}.
+ */
+ @Override public void testNullPointerExceptions() throws Exception {}
+
+ public void testCountZero() {
+ assertEquals(0, ms.count("a"));
+ assertSize();
+ }
+
+ public void testCountOne() {
+ ms.add("a");
+ assertEquals(1, ms.count("a"));
+ assertSize();
+ }
+
+ public void testCountTwo() {
+ ms.add("a");
+ ms.add("a");
+ assertEquals(2, ms.count("a"));
+ assertSize();
+ }
+
+ public void testCountAfterRemoval() {
+ ms.add("a");
+ ms.remove("a");
+ assertEquals(0, ms.count("a"));
+ assertSize();
+ }
+
+ public void testCountNull() {
+ assertEquals(0, ms.count(null));
+ }
+
+ public void testCountWrongType() {
+ assertEquals(0, ms.count(new WrongType()));
+ }
+
+ static class WrongType {}
+
+ public void testAddNoneToNone() {
+ assertEquals(0, ms.add("a", 0));
+ assertContents();
+ }
+
+ public void testAddNoneToSome() {
+ ms.add("a");
+ assertEquals(1, ms.add("a", 0));
+ assertContents("a");
+ }
+
+ public void testAddSeveralAtOnce() {
+ assertEquals(0, ms.add("a", 3));
+ assertContents("a", "a", "a");
+ }
+
+ public void testAddSomeToSome() {
+ ms.add("a", 2);
+ assertEquals(2, ms.add("a", 3));
+ assertContents("a", "a", "a", "a", "a");
+ }
+
+ @Override public void testAddSeveralTimes() {
+ assertTrue(ms.add("a"));
+ assertTrue(ms.add("b"));
+ assertTrue(ms.add("a"));
+ assertTrue(ms.add("b"));
+ assertContents("a", "b", "a", "b");
+ }
+
+ public void testAddNegative() {
+ try {
+ ms.add("a", -1);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+ assertSize();
+ }
+
+ @Override public void testEqualsNo() {
+ ms.add("a");
+ ms.add("b");
+ ms.add("b");
+
+ Multiset<String> ms2 = create();
+ ms2.add("a", 2);
+ ms2.add("b");
+
+ assertFalse(ms.equals(ms2));
+ assertSize();
+ }
+
+ public void testAddTooMany() {
+ ms.add("a", Integer.MAX_VALUE); // so far so good
+ ms.add("b", Integer.MAX_VALUE); // so far so good
+ try {
+ ms.add("a");
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+ assertSize();
+ }
+
+ public void testAddAllEmptySet() {
+ c = ms = createSample();
+ assertFalse(ms.addAll(Collections.<String>emptySet()));
+ assertEquals(createSample(), ms);
+ assertSize();
+ }
+
+ public void testAddAllEmptyMultiset() {
+ c = ms = createSample();
+ Multiset<String> empty = create();
+ assertFalse(ms.addAll(empty));
+ assertEquals(createSample(), ms);
+ assertSize();
+ }
+
+ public void testAddAllSet() {
+ c = ms = createSample();
+ Set<String> more = ImmutableSet.of("c", "d", "e");
+ assertTrue(ms.addAll(more));
+ assertContents("a", "b", "b", "c", "c", "d", "d", "d", "d", "e");
+ }
+
+ public void testAddAllMultiset() {
+ c = ms = createSample();
+ Multiset<String> more = HashMultiset.create(
+ asList("c", "c", "d", "d", "e"));
+ assertTrue(ms.addAll(more));
+ assertContents("a", "b", "b", "c", "c", "c", "d", "d", "d", "d", "d", "e");
+ }
+
+ public void testRemoveNoneFromNone() {
+ assertEquals(0, ms.remove("a", 0));
+ assertContents();
+ }
+
+ public void testRemoveNoneFromSome() {
+ ms.add("a");
+ assertEquals(1, ms.remove("a", 0));
+ assertContents("a");
+ }
+
+ public void testRemoveOneFromNone() {
+ assertEquals(0, ms.remove("a", 1));
+ assertContents();
+ }
+
+ public void testRemoveOneFromOne() {
+ ms.add("a");
+ assertEquals(1, ms.remove("a", 1));
+ assertContents();
+ }
+
+ public void testRemoveSomeFromSome() {
+ ms.add("a", 5);
+ assertEquals(5, ms.remove("a", 3));
+ assertContents("a", "a");
+ }
+
+ public void testRemoveTooMany() {
+ ms.add("a", 3);
+ assertEquals(3, ms.remove("a", 5));
+ assertContents();
+ }
+
+ public void testRemoveNegative() {
+ try {
+ ms.remove("a", -1);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+ assertSize();
+ }
+
+ public void testContainsSeveral() {
+ ms.add("a", 3);
+ assertTrue(ms.contains(new String("a")));
+ assertSize();
+ }
+
+ public void testContainsAllNo() {
+ ms.add("a", 2);
+ ms.add("b", 3);
+ assertFalse(ms.containsAll(asList("a", "c")));
+ assertSize();
+ }
+
+ public void testContainsAllYes() {
+ ms.add("a", 2);
+ ms.add("b", 3);
+ ms.add("c", 4);
+ assertTrue(ms.containsAll(asList("a", "c")));
+ assertSize();
+ }
+
+ public void testRemoveAllOfOne() {
+ ms.add("a", 2);
+ ms.add("b");
+ assertTrue(ms.removeAll(asList("a", "c")));
+ assertContents("b");
+ }
+
+ public void testRemoveAllOfDisjoint() {
+ ms.add("a", 2);
+ ms.add("b");
+ assertFalse(ms.removeAll(asList("c", "d")));
+ assertContents("a", "a", "b");
+ }
+
+ public void testRemoveAllOfEverything() {
+ ms.add("a", 2);
+ ms.add("b");
+ assertTrue(ms.removeAll(asList("a", "b")));
+ assertContents();
+ }
+
+ public void testRetainAllOfOne() {
+ ms.add("a", 2);
+ ms.add("b");
+ assertTrue(ms.retainAll(asList("a", "c")));
+ assertContents("a", "a");
+ }
+
+ public void testRetainAllOfDisjoint() {
+ ms.add("a", 2);
+ ms.add("b");
+ assertTrue(ms.retainAll(asList("c", "d")));
+ assertContents();
+ }
+
+ public void testRetainAllOfEverything() {
+ ms.add("a", 2);
+ ms.add("b");
+ assertFalse(ms.retainAll(asList("a", "b")));
+ assertContents("a", "a", "b");
+ }
+
+ public void testContainsAllVacuousViaElementSet() {
+ assertTrue(ms.elementSet().containsAll(Collections.emptySet()));
+ }
+
+ public void testContainsAllNoViaElementSet() {
+ ms.add("a", 2);
+ ms.add("b", 3);
+ assertFalse(ms.elementSet().containsAll(asList("a", "c")));
+ assertSize();
+ }
+
+ public void testContainsAllYesViaElementSet() {
+ ms.add("a", 2);
+ ms.add("b", 3);
+ ms.add("c", 4);
+ assertTrue(ms.elementSet().containsAll(asList("a", "c")));
+ assertSize();
+ }
+
+ public void testRemoveAllVacuousViaElementSet() {
+ assertFalse(ms.elementSet().removeAll(Collections.emptySet()));
+ assertSize();
+ }
+
+ public void testRemoveAllOfOneViaElementSet() {
+ ms.add("a", 2);
+ ms.add("b");
+ assertTrue(ms.elementSet().removeAll(asList("a", "c")));
+ assertContents("b");
+ }
+
+ public void testRemoveAllOfDisjointViaElementSet() {
+ ms.add("a", 2);
+ ms.add("b");
+ assertFalse(ms.elementSet().removeAll(asList("c", "d")));
+ assertContents("a", "a", "b");
+ }
+
+ public void testRemoveAllOfEverythingViaElementSet() {
+ ms.add("a", 2);
+ ms.add("b");
+ assertTrue(ms.elementSet().removeAll(asList("a", "b")));
+ assertContents();
+ }
+
+ public void testRetainAllVacuousViaElementSet() {
+ assertFalse(ms.elementSet().retainAll(asList("a")));
+ assertContents();
+ }
+
+ public void testRetainAllOfNothingViaElementSet() {
+ ms.add("a");
+ assertTrue(ms.elementSet().retainAll(Collections.emptySet()));
+ assertContents();
+ }
+
+ public void testRetainAllOfOneViaElementSet() {
+ ms.add("a", 2);
+ ms.add("b");
+ assertTrue(ms.elementSet().retainAll(asList("a", "c")));
+ assertContents("a", "a");
+ }
+
+ public void testRetainAllOfDisjointViaElementSet() {
+ ms.add("a", 2);
+ ms.add("b");
+ assertTrue(ms.elementSet().retainAll(asList("c", "d")));
+ assertContents();
+ }
+
+ public void testRetainAllOfEverythingViaElementSet() {
+ ms.add("a", 2);
+ ms.add("b");
+ assertFalse(ms.elementSet().retainAll(asList("a", "b")));
+ assertContents("a", "a", "b");
+ }
+
+ public void testElementSetBasic() {
+ ms.add("a", 3);
+ ms.add("b", 2);
+ ms.add("c", 1);
+ HashSet<String> expected = Sets.newHashSet("a", "b", "c");
+ Set<String> actual = ms.elementSet();
+ assertEquals(expected, actual);
+ assertEquals(actual, expected);
+ assertSize();
+ }
+
+ public void testElementSetIsNotACopy() {
+ ms.add("a", 1);
+ ms.add("b", 2);
+ Set<String> elementSet = ms.elementSet();
+ ms.add("c", 3);
+ ms.setCount("b", 0);
+ assertEquals(Sets.newHashSet("a", "c"), elementSet);
+ assertSize();
+ }
+
+ public void testRemoveFromElementSetYes() {
+ ms.add("a", 1);
+ ms.add("b", 2);
+ Set<String> elementSet = ms.elementSet();
+ assertTrue(elementSet.remove("b"));
+ assertContents("a");
+ }
+
+ public void testRemoveFromElementSetNo() {
+ ms.add("a", 1);
+ Set<String> elementSet = ms.elementSet();
+ assertFalse(elementSet.remove("b"));
+ assertContents("a");
+ }
+
+ public void testRemoveFromElementSetNull() {
+ assertEquals(false, ms.elementSet().remove(null));
+ }
+
+ public void testRemoveFromElementSetWrongType() {
+ assertEquals(false, ms.elementSet().remove(new WrongType()));
+ }
+
+ public void testCantAddToElementSet() {
+ try {
+ ms.elementSet().add("a");
+ fail();
+ } catch (UnsupportedOperationException expected) {
+ }
+ assertSize();
+ }
+
+ public void testClearViaElementSet() {
+ ms = createSample();
+ ms.elementSet().clear();
+ assertContents();
+ }
+
+ public void testClearViaEntrySet() {
+ ms = createSample();
+ ms.entrySet().clear();
+ assertContents();
+ }
+
+ public void testEntrySet() {
+ ms = createSample();
+ for (Multiset.Entry<String> entry : ms.entrySet()) {
+ assertEquals(entry, entry);
+ String element = entry.getElement();
+ if (element.equals("a")) {
+ assertEquals(1, entry.getCount());
+ } else if (element.equals("b")) {
+ assertEquals(2, entry.getCount());
+ } else if (element.equals("c")) {
+ assertEquals(1, entry.getCount());
+ } else if (element.equals("d")) {
+ assertEquals(3, entry.getCount());
+ } else {
+ fail();
+ }
+ }
+ assertSize();
+ }
+
+ public void testEntrySetEmpty() {
+ assertEquals(Collections.emptySet(), ms.entrySet());
+ }
+
+ public void testReallyBig() {
+ ms.add("a", Integer.MAX_VALUE - 1);
+ assertEquals(Integer.MAX_VALUE - 1, ms.size());
+ ms.add("b", 3);
+
+ // See Collection.size() contract
+ assertEquals(Integer.MAX_VALUE, ms.size());
+
+ // Make sure we didn't forget our size
+ ms.remove("a", 4);
+ assertEquals(Integer.MAX_VALUE - 2, ms.size());
+ assertSize();
+ }
+
+ public void testToStringNull() {
+ ms.add("a", 3);
+ ms.add("c", 1);
+ ms.add("b", 2);
+ ms.add(null, 4);
+
+ // This test is brittle. The original test was meant to validate the
+ // contents of the string itself, but key ordering tended to change
+ // under unpredictable circumstances. Instead, we're just ensuring
+ // that the string not return null, and implicitly, not throw an exception.
+ assertNotNull(ms.toString());
+ assertSize();
+ }
+
+ public void testSerializable() {
+ ms = createSample();
+ assertEquals(ms, SerializableTester.reserialize(ms));
+ assertSize();
+ }
+
+ public void testIteratorRemove() {
+ ms.add("a");
+ ms.add("b");
+ ms.add("c");
+ Iterator<String> iterator = ms.iterator();
+ String element1 = iterator.next();
+ iterator.remove();
+ String element2 = iterator.next();
+ assertFalse(ms.contains(element1));
+ assertTrue(ms.contains(element2));
+ assertSize();
+ }
+
+ public void testIteratorRemoveRepeated() {
+ ms.add("a", 3);
+ ms.add("b", 1);
+ ms.add("c", 2);
+ Iterator<String> iterator = ms.iterator();
+ for (int i = 0; i < 6; i++) {
+ assertTrue(iterator.hasNext());
+ iterator.next();
+ iterator.remove();
+ }
+ assertFalse(iterator.hasNext());
+ assertTrue(ms.isEmpty());
+ assertSize();
+ }
+
+ public void testIteratorRemoveTooSoon() {
+ ms.add("a");
+ ms.add("b");
+ ms.add("c");
+ Iterator<String> iterator = ms.iterator();
+ try {
+ iterator.remove();
+ fail();
+ } catch (IllegalStateException expected) {}
+ assertSize();
+ }
+
+ public void testIteratorRemoveTwiceConsecutive() {
+ ms.add("a");
+ ms.add("b");
+ ms.add("c");
+ Iterator<String> iterator = ms.iterator();
+ iterator.next();
+ iterator.remove();
+ try {
+ iterator.remove();
+ fail();
+ } catch (IllegalStateException expected) {}
+ assertSize();
+ }
+
+ public void testIteratorNoSuchElementException() {
+ ms.add("a");
+ ms.add("b");
+ ms.add("c");
+ Iterator<String> iterator = ms.iterator();
+ iterator.next();
+ iterator.next();
+ iterator.next();
+ try {
+ iterator.next();
+ fail();
+ } catch (NoSuchElementException expected) {}
+ assertSize();
+ }
+
+ public void testEntryAfterRemove() {
+ ms.add("a", 8);
+ Multiset.Entry<String> entry = ms.entrySet().iterator().next();
+ assertEquals(8, entry.getCount());
+ ms.remove("a");
+ assertEquals(7, entry.getCount());
+ ms.remove("a", 4);
+ assertEquals(3, entry.getCount());
+ ms.elementSet().remove("a");
+ assertEquals(0, entry.getCount());
+ ms.add("a", 5);
+ assertEquals(5, entry.getCount());
+ }
+
+ public void testEntryAfterClear() {
+ ms.add("a", 3);
+ Multiset.Entry<String> entry = ms.entrySet().iterator().next();
+ ms.clear();
+ assertEquals(0, entry.getCount());
+ ms.add("a", 5);
+ assertEquals(5, entry.getCount());
+ }
+
+ public void testEntryAfterEntrySetClear() {
+ ms.add("a", 3);
+ Multiset.Entry<String> entry = ms.entrySet().iterator().next();
+ ms.entrySet().clear();
+ assertEquals(0, entry.getCount());
+ ms.add("a", 5);
+ assertEquals(5, entry.getCount());
+ }
+
+ public void testEntryAfterEntrySetIteratorRemove() {
+ ms.add("a", 3);
+ Iterator<Multiset.Entry<String>> iterator = ms.entrySet().iterator();
+ Multiset.Entry<String> entry = iterator.next();
+ iterator.remove();
+ assertEquals(0, entry.getCount());
+ try {
+ iterator.remove();
+ fail();
+ } catch (IllegalStateException expected) {}
+ ms.add("a", 5);
+ assertEquals(5, entry.getCount());
+ }
+
+ public void testEntryAfterElementSetIteratorRemove() {
+ ms.add("a", 3);
+ Multiset.Entry<String> entry = ms.entrySet().iterator().next();
+ Iterator<String> iterator = ms.elementSet().iterator();
+ iterator.next();
+ iterator.remove();
+ assertEquals(0, entry.getCount());
+ ms.add("a", 5);
+ assertEquals(5, entry.getCount());
+ }
+
+ public void testEntrySetContains() {
+ ms.add("a", 3);
+ Set<Entry<String>> es = ms.entrySet();
+ assertTrue(es.contains(Multisets.immutableEntry("a", 3)));
+ assertFalse(es.contains(null));
+ assertFalse(es.contains(Maps.immutableEntry("a", 3)));
+ assertFalse(es.contains(Multisets.immutableEntry("a", 2)));
+ assertFalse(es.contains(Multisets.immutableEntry("b", 3)));
+ assertFalse(es.contains(Multisets.immutableEntry("b", 0)));
+ }
+
+ public void testEntrySetRemove() {
+ ms.add("a", 3);
+ Set<Entry<String>> es = ms.entrySet();
+ assertFalse(es.remove(null));
+ assertFalse(es.remove(Maps.immutableEntry("a", 3)));
+ assertFalse(es.remove(Multisets.immutableEntry("a", 2)));
+ assertFalse(es.remove(Multisets.immutableEntry("b", 3)));
+ assertFalse(es.remove(Multisets.immutableEntry("b", 0)));
+ assertEquals(3, ms.count("a"));
+ assertTrue(es.remove(Multisets.immutableEntry("a", 3)));
+ assertEquals(0, ms.count("a"));
+ }
+
+ public void testEntrySetToArray() {
+ ms.add("a", 3);
+ Set<Multiset.Entry<String>> es = ms.entrySet();
+ Entry<?>[] array = new Entry<?>[3];
+ assertSame(array, es.toArray(array));
+ assertEquals(Multisets.immutableEntry("a", 3), array[0]);
+ assertNull(array[1]);
+ }
+
+ public void testUnmodifiableMultiset() {
+ ms.add("a", 3);
+ ms.add("b");
+ ms.add("c", 2);
+ Multiset<Object> unmodifiable = Multisets.<Object>unmodifiableMultiset(ms);
+ UnmodifiableCollectionTests.assertMultisetIsUnmodifiable(unmodifiable, "a");
+ }
+
+ @Override protected Multiset<String> createSample() {
+ @SuppressWarnings("hiding")
+ Multiset<String> ms = create();
+ ms.add("a", 1);
+ ms.add("b", 2);
+ ms.add("c", 1);
+ ms.add("d", 3);
+ return ms;
+ }
+}
diff --git a/test/com/google/common/collect/AbstractSetMultimapTest.java b/test/com/google/common/collect/AbstractSetMultimapTest.java
new file mode 100644
index 0000000..bf15cf8
--- /dev/null
+++ b/test/com/google/common/collect/AbstractSetMultimapTest.java
@@ -0,0 +1,183 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Tests for {@code SetMultimap} implementations.
+ *
+ * @author Jared Levy
+ */
+public abstract class AbstractSetMultimapTest extends AbstractMultimapTest {
+
+ public void testDuplicates() {
+ Multimap<String, Integer> multimap = getMultimap();
+ assertTrue(multimap.put("foo", 1));
+ assertTrue(multimap.put("foo", 3));
+ assertTrue(multimap.put("bar", 3));
+ assertFalse(multimap.put("foo", 1));
+ assertSize(3);
+ assertTrue(multimap.containsEntry("foo", 1));
+ assertTrue(multimap.remove("foo", 1));
+ assertSize(2);
+ assertFalse(multimap.containsEntry("foo", 1));
+ }
+
+ public void testGetEquals() {
+ Multimap<String, Integer> multimap = getMultimap();
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ assertEquals(ImmutableSet.of(1, 3), multimap.get("foo"));
+ }
+
+ public void testAsMapEquals() {
+ Multimap<String, Integer> multimap = getMultimap();
+ multimap.put("foo", 1);
+ multimap.put("foo", nullValue());
+ multimap.put(nullKey(), 3);
+ Map<String, Collection<Integer>> map = multimap.asMap();
+
+ Map<String, Collection<Integer>> equalMap = Maps.newHashMap();
+ equalMap.put("foo", Sets.newHashSet(1, nullValue()));
+ equalMap.put(nullKey(), Sets.newHashSet(3));
+ assertEquals(map, equalMap);
+ assertEquals(equalMap, map);
+ assertEquals(equalMap.hashCode(), multimap.hashCode());
+
+ Map<String, Collection<Integer>> unequalMap = Maps.newHashMap();
+ equalMap.put("foo", Sets.newHashSet(3, nullValue()));
+ equalMap.put(nullKey(), Sets.newHashSet(1));
+ assertFalse(map.equals(unequalMap));
+ assertFalse(unequalMap.equals(map));
+ }
+
+ public void testAsMapEntriesEquals() {
+ Multimap<String, Integer> multimap = getMultimap();
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ Set<Map.Entry<String, Collection<Integer>>> set
+ = multimap.asMap().entrySet();
+
+ Iterator<Map.Entry<String, Collection<Integer>>> i = set.iterator();
+ Map.Entry<String, Collection<Integer>> expected =
+ Maps.immutableEntry(
+ "foo", (Collection<Integer>) ImmutableSet.of(1, 3));
+ Map.Entry<String, Collection<Integer>> entry = i.next();
+ assertEquals(expected, entry);
+ assertFalse(i.hasNext());
+
+ assertTrue(Collections.singleton(expected).equals(set));
+ assertTrue(set.equals(Collections.singleton(expected)));
+
+ Map.Entry<?, ?>[] array = new Map.Entry<?, ?>[3];
+ array[1] = Maps.immutableEntry("another", "entry");
+ assertSame(array, set.toArray(array));
+ assertEquals(entry, array[0]);
+ assertNull(array[1]);
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testAsMapValues() {
+ Multimap<String, Integer> multimap = create();
+ Collection<Collection<Integer>> asMapValues = multimap.asMap().values();
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+
+ Collection<?>[] array = new Collection<?>[3];
+ array[1] = Collections.emptyList();
+ assertSame(array, asMapValues.toArray(array));
+ assertEquals(Sets.newHashSet(1, 3), array[0]);
+ assertNull(array[1]);
+
+ multimap.put("bar", 3);
+ assertTrue(asMapValues.containsAll(
+ Arrays.asList(Sets.newHashSet(1, 3), Sets.newHashSet(3))));
+ assertFalse(asMapValues.containsAll(
+ Arrays.asList(Sets.newHashSet(1, 3), Sets.newHashSet(1))));
+ assertFalse(asMapValues.remove(ImmutableSet.of(1, 2)));
+ assertEquals(3, multimap.size());
+ assertTrue(asMapValues.remove(ImmutableSet.of(1, 3)));
+ assertEquals(1, multimap.size());
+ }
+
+ public void testPutReturn() {
+ Multimap<String, Integer> multimap = getMultimap();
+ assertTrue(multimap.put("foo", 1));
+ assertFalse(multimap.put("foo", 1));
+ assertTrue(multimap.put("foo", 3));
+ assertTrue(multimap.put("bar", 5));
+ }
+
+ public void testPutAllReturn_existingElements() {
+ Multimap<String, Integer> multimap = create();
+ assertTrue(multimap.putAll("foo", Arrays.asList(1, 2, 3)));
+ assertFalse(multimap.put("foo", 1));
+ assertFalse(multimap.putAll("foo", Arrays.asList(1, 2, 3)));
+ assertFalse(multimap.putAll("foo", Arrays.asList(1, 3)));
+ assertTrue(multimap.putAll("foo", Arrays.asList(1, 2, 4)));
+
+ Multimap<String, Integer> other = create();
+ other.putAll("foo", Arrays.asList(1, 2));
+ assertFalse(multimap.putAll(other));
+
+ other.putAll("bar", Arrays.asList(1, 2));
+ assertTrue(multimap.putAll(other));
+ assertTrue(other.putAll(multimap));
+ assertTrue(other.equals(multimap));
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testEntriesEquals() {
+ Multimap<String, Integer> multimap = getMultimap();
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ multimap.put("bar", 3);
+ Collection<Map.Entry<String, Integer>> entries = multimap.entries();
+
+ Set<Map.Entry<String, Integer>> same = Sets.newHashSet(
+ Maps.immutableEntry("foo", 3),
+ Maps.immutableEntry("bar", 3),
+ Maps.immutableEntry("foo", 1));
+ assertEquals(entries, same);
+ assertEquals(same, entries);
+ assertEquals(entries.hashCode(), same.hashCode());
+
+ assertFalse(entries.equals(null));
+ assertFalse(entries.equals("foo"));
+
+ Set<Map.Entry<String, Integer>> different3 = Sets.newHashSet(
+ Maps.immutableEntry("foo", 3),
+ Maps.immutableEntry("bar", 3),
+ Maps.immutableEntry("bar", 1));
+ assertFalse(entries.equals(different3));
+ assertFalse(different3.equals(entries));
+
+ Set<Map.Entry<String, Integer>> different4 = Sets.newHashSet(
+ Maps.immutableEntry("foo", 3),
+ Maps.immutableEntry("bar", 3),
+ Maps.immutableEntry("bar", 1),
+ Maps.immutableEntry("foo", 1));
+ assertFalse(entries.equals(different4));
+ assertFalse(different4.equals(entries));
+ }
+}
diff --git a/test/com/google/common/collect/ArrayListMultimapTest.java b/test/com/google/common/collect/ArrayListMultimapTest.java
new file mode 100644
index 0000000..d5ef57e
--- /dev/null
+++ b/test/com/google/common/collect/ArrayListMultimapTest.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.testing.junit3.JUnitAsserts;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.ConcurrentModificationException;
+import java.util.List;
+import java.util.RandomAccess;
+
+/**
+ * Unit tests for {@code ArrayListMultimap}.
+ *
+ * @author Jared Levy
+ */
+public class ArrayListMultimapTest extends AbstractListMultimapTest {
+
+ @Override protected ListMultimap<String, Integer> create() {
+ return ArrayListMultimap.create();
+ }
+
+ /**
+ * Confirm that get() returns a List implementing RandomAccess.
+ */
+ public void testGetRandomAccess() {
+ Multimap<String, Integer> multimap = create();
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ assertTrue(multimap.get("foo") instanceof RandomAccess);
+ assertTrue(multimap.get("bar") instanceof RandomAccess);
+ }
+
+ /**
+ * Confirm that removeAll() returns a List implementing RandomAccess.
+ */
+ public void testRemoveAllRandomAccess() {
+ Multimap<String, Integer> multimap = create();
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ assertTrue(multimap.removeAll("foo") instanceof RandomAccess);
+ assertTrue(multimap.removeAll("bar") instanceof RandomAccess);
+ }
+
+ /**
+ * Confirm that replaceValues() returns a List implementing RandomAccess.
+ */
+ public void testReplaceValuesRandomAccess() {
+ Multimap<String, Integer> multimap = create();
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ assertTrue(multimap.replaceValues("foo", Arrays.asList(2, 4))
+ instanceof RandomAccess);
+ assertTrue(multimap.replaceValues("bar", Arrays.asList(2, 4))
+ instanceof RandomAccess);
+ }
+
+ /**
+ * Test throwing ConcurrentModificationException when a sublist's ancestor's
+ * delegate changes.
+ */
+ public void testSublistConcurrentModificationException() {
+ ListMultimap<String, Integer> multimap = create();
+ multimap.putAll("foo", Arrays.asList(1, 2, 3, 4, 5));
+ List<Integer> list = multimap.get("foo");
+ JUnitAsserts.assertContentsInOrder(multimap.get("foo"), 1, 2, 3, 4, 5);
+ List<Integer> sublist = list.subList(0, 5);
+ JUnitAsserts.assertContentsInOrder(sublist, 1, 2, 3, 4, 5);
+
+ sublist.retainAll(Collections.EMPTY_LIST);
+ assertTrue(sublist.isEmpty());
+ multimap.put("foo", 6);
+
+ try {
+ sublist.isEmpty();
+ fail("Expected ConcurrentModificationException");
+ } catch (ConcurrentModificationException expected) {}
+ }
+
+ public void testCreateFromMultimap() {
+ Multimap<String, Integer> multimap = createSample();
+ ArrayListMultimap<String, Integer> copy
+ = ArrayListMultimap.create(multimap);
+ assertEquals(multimap, copy);
+ }
+
+ public void testCreate() {
+ ArrayListMultimap<String, Integer> multimap
+ = ArrayListMultimap.create();
+ assertEquals(10, multimap.expectedValuesPerKey);
+ }
+
+ public void testCreateFromSizes() {
+ ArrayListMultimap<String, Integer> multimap
+ = ArrayListMultimap.create(15, 20);
+ assertEquals(20, multimap.expectedValuesPerKey);
+ }
+
+ public void testCreateFromIllegalSizes() {
+ try {
+ ArrayListMultimap.create(15, -2);
+ fail();
+ } catch (IllegalArgumentException expected) {}
+
+ try {
+ ArrayListMultimap.create(-15, 2);
+ fail();
+ } catch (IllegalArgumentException expected) {}
+ }
+
+ public void testCreateFromHashMultimap() {
+ Multimap<String, Integer> original = HashMultimap.create();
+ ArrayListMultimap<String, Integer> multimap
+ = ArrayListMultimap.create(original);
+ assertEquals(10, multimap.expectedValuesPerKey);
+ }
+
+ public void testCreateFromArrayListMultimap() {
+ ArrayListMultimap<String, Integer> original
+ = ArrayListMultimap.create(15, 20);
+ ArrayListMultimap<String, Integer> multimap
+ = ArrayListMultimap.create(original);
+ assertEquals(20, multimap.expectedValuesPerKey);
+ }
+
+ public void testTrimToSize() {
+ ArrayListMultimap<String, Integer> multimap
+ = ArrayListMultimap.create();
+ multimap.put("foo", 1);
+ multimap.put("foo", 2);
+ multimap.put("bar", 3);
+ multimap.trimToSize();
+ assertEquals(3, multimap.size());
+ assertEquals(Arrays.asList(1, 2), multimap.get("foo"));
+ assertEquals(Arrays.asList(3), multimap.get("bar"));
+ }
+}
diff --git a/test/com/google/common/collect/BiMapCollectionTest.java b/test/com/google/common/collect/BiMapCollectionTest.java
new file mode 100644
index 0000000..3e14d39
--- /dev/null
+++ b/test/com/google/common/collect/BiMapCollectionTest.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.testing.SetTestSuiteBuilder;
+import com.google.common.collect.testing.TestStringSetGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.SetFeature;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.Set;
+
+/**
+ * Collection tests for bimaps.
+ *
+ * @author Jared Levy
+ */
+public class BiMapCollectionTest extends TestCase {
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite();
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ BiMap<String, Integer> bimap = HashBiMap.create();
+ for (int i = 0; i < elements.length; i++) {
+ bimap.put(elements[i], i);
+ }
+ return bimap.keySet();
+ }
+ })
+ .named("HashBiMap.keySet")
+ .withFeatures(CollectionSize.ANY,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionFeature.REMOVE_OPERATIONS)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ BiMap<Integer, String> bimap = HashBiMap.create();
+ for (int i = 0; i < elements.length; i++) {
+ bimap.put(i, elements[i]);
+ }
+ return bimap.values();
+ }
+ })
+ .named("HashBiMap.values")
+ .withFeatures(CollectionSize.ANY,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionFeature.REMOVE_OPERATIONS,
+ SetFeature.REJECTS_DUPLICATES_AT_CREATION)
+ .createTestSuite());
+
+ return suite;
+ }
+}
diff --git a/test/com/google/common/collect/BiMapMapInterfaceTest.java b/test/com/google/common/collect/BiMapMapInterfaceTest.java
new file mode 100644
index 0000000..5ae906d
--- /dev/null
+++ b/test/com/google/common/collect/BiMapMapInterfaceTest.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.testing.MapInterfaceTest;
+
+import junit.framework.TestCase;
+
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * Map interface tests for bimaps.
+ *
+ * @author Jared Levy
+ */
+public class BiMapMapInterfaceTest extends TestCase {
+
+ private abstract static class AbstractMapInterfaceTest
+ extends MapInterfaceTest<String, Integer> {
+
+ protected AbstractMapInterfaceTest(boolean modifiable) {
+ super(true, true, modifiable, modifiable, modifiable);
+ }
+
+ @Override protected String getKeyNotInPopulatedMap() {
+ return "cat";
+ }
+
+ @Override protected Integer getValueNotInPopulatedMap() {
+ return 3;
+ }
+
+ @Override protected Map<String, Integer> makeEmptyMap() {
+ return HashBiMap.create();
+ }
+
+ @Override protected Map<String, Integer> makePopulatedMap() {
+ Map<String, Integer> map = makeEmptyMap();
+ map.put("foo", 1);
+ map.put("bar", 2);
+ return map;
+ }
+
+ @Override protected void assertMoreInvariants(Map<String, Integer> map) {
+ BiMap<String, Integer> bimap = (BiMap<String, Integer>) map;
+ BiMap<Integer, String> inverse = bimap.inverse();
+ assertEquals(bimap.size(), inverse.size());
+ for (Entry<String, Integer> entry : bimap.entrySet()) {
+ assertEquals(entry.getKey(), inverse.get(entry.getValue()));
+ }
+ for (Entry<Integer, String> entry : inverse.entrySet()) {
+ assertEquals(entry.getKey(), bimap.get(entry.getValue()));
+ }
+ }
+ }
+
+ public static class HashBiMapInterfaceTest extends AbstractMapInterfaceTest {
+ public HashBiMapInterfaceTest() {
+ super(true);
+ }
+ @Override protected Map<String, Integer> makeEmptyMap() {
+ return HashBiMap.create();
+ }
+ }
+
+ public static class InverseBiMapInterfaceTest
+ extends AbstractMapInterfaceTest {
+ public InverseBiMapInterfaceTest() {
+ super(true);
+ }
+ @Override protected Map<String, Integer> makeEmptyMap() {
+ return HashBiMap.<Integer, String>create().inverse();
+ }
+ }
+
+ public static class UnmodifiableBiMapInterfaceTest
+ extends AbstractMapInterfaceTest {
+ public UnmodifiableBiMapInterfaceTest() {
+ super(false);
+ }
+ @Override protected Map<String, Integer> makeEmptyMap() {
+ return Maps.unmodifiableBiMap(HashBiMap.<String, Integer>create());
+ }
+ @Override protected Map<String, Integer> makePopulatedMap() {
+ BiMap<String, Integer> bimap = HashBiMap.create();
+ bimap.put("foo", 1);
+ bimap.put("bar", 2);
+ return Maps.unmodifiableBiMap(bimap);
+ }
+ }
+
+ public static class SynchronizedBiMapInterfaceTest
+ extends AbstractMapInterfaceTest {
+ public SynchronizedBiMapInterfaceTest() {
+ super(true);
+ }
+ @Override protected Map<String, Integer> makeEmptyMap() {
+ return Maps.synchronizedBiMap(HashBiMap.<String, Integer>create());
+ }
+ }
+}
diff --git a/test/com/google/common/collect/CollectTestSuite.java b/test/com/google/common/collect/CollectTestSuite.java
new file mode 100644
index 0000000..295fa94
--- /dev/null
+++ b/test/com/google/common/collect/CollectTestSuite.java
@@ -0,0 +1,172 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import java.lang.reflect.Method;
+
+/**
+ * Test suite for Google Collections.
+ *
+ * @author Chris Povirk
+ */
+public class CollectTestSuite {
+ public static TestSuite suite() throws Exception {
+ TestSuite suite = new TestSuite(CollectTestSuite.class.getName());
+
+ for (String className : CLASS_NAMES) {
+ Class<?> testClass = Class.forName(className);
+
+ try {
+ Method suiteMethod = testClass.getMethod("suite");
+ suite.addTest((Test) suiteMethod.invoke(null));
+ } catch (NoSuchMethodException e) {
+ suite.addTestSuite(testClass);
+ }
+ }
+
+ return suite;
+ }
+
+ private static final String[] CLASS_NAMES = new String[] {
+ "com.google.common.base.FinalizableReferenceQueueTest",
+ "com.google.common.base.FunctionsTest",
+ "com.google.common.base.JoinerTest",
+ "com.google.common.base.ObjectsTest",
+ "com.google.common.base.PreconditionsTest",
+ "com.google.common.base.PredicatesTest",
+ "com.google.common.base.SuppliersTest",
+ "com.google.common.collect.AbstractIteratorTest",
+ "com.google.common.collect.AbstractMapEntryTest",
+ "com.google.common.collect.ArrayListMultimapTest",
+ "com.google.common.collect.BiMapCollectionTest",
+ "com.google.common.collect.BiMapMapInterfaceTest$HashBiMapInterfaceTest",
+ "com.google.common.collect.BiMapMapInterfaceTest$InverseBiMapInterfaceTest",
+ "com.google.common.collect.BiMapMapInterfaceTest$SynchronizedBiMapInterfaceTest",
+ "com.google.common.collect.BiMapMapInterfaceTest$UnmodifiableBiMapInterfaceTest",
+ "com.google.common.collect.Collections2Test",
+ "com.google.common.collect.Collections2Test$ArrayListFilterChangeTest",
+ "com.google.common.collect.Collections2Test$LinkedListFilterChangeTest",
+ "com.google.common.collect.ConcurrentHashMultisetTest",
+ "com.google.common.collect.ConcurrentHashMultisetWithChmTest",
+ "com.google.common.collect.EnumBiMapTest",
+ "com.google.common.collect.EnumHashBiMapTest",
+ "com.google.common.collect.EnumMultisetTest",
+ "com.google.common.collect.FauxveridesTest",
+ "com.google.common.collect.ForMapMultimapAsMapImplementsMapTest",
+ "com.google.common.collect.ForwardingCollectionTest",
+ "com.google.common.collect.ForwardingConcurrentMapTest",
+ "com.google.common.collect.ForwardingListIteratorTest",
+ "com.google.common.collect.ForwardingListTest",
+ "com.google.common.collect.ForwardingMapTest",
+ "com.google.common.collect.ForwardingMultimapTest",
+ "com.google.common.collect.ForwardingMultisetTest",
+ "com.google.common.collect.ForwardingObjectTest",
+ "com.google.common.collect.ForwardingQueueTest",
+ "com.google.common.collect.ForwardingSetTest",
+ "com.google.common.collect.ForwardingSortedMapImplementsMapTest",
+ "com.google.common.collect.ForwardingSortedMapTest",
+ "com.google.common.collect.HashBiMapTest",
+ "com.google.common.collect.HashMultimapTest",
+ "com.google.common.collect.HashMultisetTest",
+ "com.google.common.collect.ImmutableBiMapTest",
+ "com.google.common.collect.ImmutableBiMapTest$BiMapSpecificTests",
+ "com.google.common.collect.ImmutableBiMapTest$CreationTests",
+ "com.google.common.collect.ImmutableBiMapTest$InverseMapTests",
+ "com.google.common.collect.ImmutableBiMapTest$MapTests",
+ "com.google.common.collect.ImmutableClassToInstanceMapTest",
+ "com.google.common.collect.ImmutableListMultimapTest",
+ "com.google.common.collect.ImmutableListTest",
+ "com.google.common.collect.ImmutableListTest$CreationTests",
+ "com.google.common.collect.ImmutableMapTest",
+ "com.google.common.collect.ImmutableMapTest$CreationTests",
+ "com.google.common.collect.ImmutableMapTest$MapTests",
+ "com.google.common.collect.ImmutableMapTest$MapTestsWithBadHashes",
+ "com.google.common.collect.ImmutableMapTest$MapTestsWithSingletonUnhashableValue",
+ "com.google.common.collect.ImmutableMapTest$MapTestsWithUnhashableValues",
+ "com.google.common.collect.ImmutableMapTest$ReserializedMapTests",
+ "com.google.common.collect.ImmutableMapTest$SingletonMapTests",
+ "com.google.common.collect.ImmutableMultimapAsMapImplementsMapTest",
+ "com.google.common.collect.ImmutableMultimapTest",
+ "com.google.common.collect.ImmutableMultisetTest",
+ "com.google.common.collect.ImmutableSetCollectionTest",
+ "com.google.common.collect.ImmutableSetMultimapAsMapImplementsMapTest",
+ "com.google.common.collect.ImmutableSetMultimapTest",
+ "com.google.common.collect.ImmutableSetTest",
+ "com.google.common.collect.ImmutableSortedMapTest",
+ "com.google.common.collect.ImmutableSortedMapTest$CreationTests",
+ "com.google.common.collect.ImmutableSortedMapTest$HeadMapTests",
+ "com.google.common.collect.ImmutableSortedMapTest$MapTests",
+ "com.google.common.collect.ImmutableSortedMapTest$ReserializedMapTests",
+ "com.google.common.collect.ImmutableSortedMapTest$SingletonMapTests",
+ "com.google.common.collect.ImmutableSortedMapTest$SubMapTests",
+ "com.google.common.collect.ImmutableSortedMapTest$TailMapTests",
+ "com.google.common.collect.ImmutableSortedSetTest",
+ "com.google.common.collect.InverseBiMapTest",
+ "com.google.common.collect.IterablesTest",
+ "com.google.common.collect.IteratorsTest",
+ "com.google.common.collect.Jsr166HashMapTest",
+ "com.google.common.collect.LinkedHashMultimapTest",
+ "com.google.common.collect.LinkedHashMultisetTest",
+ "com.google.common.collect.LinkedListMultimapTest",
+ "com.google.common.collect.ListsTest",
+ "com.google.common.collect.MapMakerTestSuite$ComputingTest",
+ "com.google.common.collect.MapMakerTestSuite$ExpiringComputingReferenceMapTest",
+ "com.google.common.collect.MapMakerTestSuite$ExpiringReferenceMapTest",
+ "com.google.common.collect.MapMakerTestSuite$MakerTest",
+ "com.google.common.collect.MapMakerTestSuite$RecursiveComputationTest",
+ "com.google.common.collect.MapMakerTestSuite$ReferenceCombinationTestSuite",
+ "com.google.common.collect.MapMakerTestSuite$ReferenceMapTest",
+ "com.google.common.collect.MapsTest",
+ "com.google.common.collect.MapsTest$FilteredMapTests",
+ "com.google.common.collect.MapsTransformValuesTest",
+ "com.google.common.collect.MultimapCollectionTest",
+ "com.google.common.collect.MultimapsTest",
+ "com.google.common.collect.MultisetCollectionTest",
+ "com.google.common.collect.MultisetsImmutableEntryTest",
+ "com.google.common.collect.MultisetsTest",
+ "com.google.common.collect.MutableClassToInstanceMapTest",
+ "com.google.common.collect.ObjectArraysTest",
+ "com.google.common.collect.OrderingTest",
+ "com.google.common.collect.PeekingIteratorTest",
+ "com.google.common.collect.SetOperationsTest",
+ "com.google.common.collect.SetOperationsTest$MoreTests",
+ "com.google.common.collect.SetsTest",
+ "com.google.common.collect.SimpleAbstractMultisetTest",
+ "com.google.common.collect.SubMapMultimapAsMapImplementsMapTest",
+ "com.google.common.collect.SynchronizedBiMapTest",
+ "com.google.common.collect.SynchronizedBiMapTest$AbstractBiMapTests",
+ "com.google.common.collect.SynchronizedMapTest",
+ "com.google.common.collect.SynchronizedMultimapTest",
+ "com.google.common.collect.SynchronizedSetTest",
+ "com.google.common.collect.TreeMultimapExplicitTest",
+ "com.google.common.collect.TreeMultimapNaturalTest",
+ "com.google.common.collect.TreeMultisetTest",
+ "com.google.common.collect.UnmodifiableIteratorTest",
+ "com.google.common.collect.UnmodifiableMultimapAsMapImplementsMapTest",
+ "com.google.common.collect.testing.IteratorTesterTest",
+ "com.google.common.collect.testing.MapTestSuiteBuilderTests",
+ "com.google.common.collect.testing.MinimalCollectionTest",
+ "com.google.common.collect.testing.MinimalIterableTest",
+ "com.google.common.collect.testing.MinimalSetTest",
+ "com.google.common.collect.testing.OpenJdk6Tests",
+ "com.google.common.collect.testing.features.FeatureEnumTest",
+ "com.google.common.collect.testing.features.FeatureUtilTest",
+ };
+}
diff --git a/test/com/google/common/collect/Collections2Test.java b/test/com/google/common/collect/Collections2Test.java
new file mode 100644
index 0000000..5dc8f0a
--- /dev/null
+++ b/test/com/google/common/collect/Collections2Test.java
@@ -0,0 +1,360 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import static com.google.common.collect.Lists.newArrayList;
+import static com.google.common.collect.Lists.newLinkedList;
+import com.google.common.collect.testing.CollectionTestSuiteBuilder;
+import com.google.common.collect.testing.TestStringCollectionGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.testers.CollectionIteratorTester.getIteratorKnownOrderRemoveSupportedMethod;
+import com.google.common.testing.junit3.JUnitAsserts;
+import com.google.common.testutils.NullPointerTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Tests for {@link Collections2}.
+ *
+ * <p>Intentionally not testing {@link Collections2#setEquals(Set, Object)} as
+ * it is not public, and it can be better tested indirectly using the collection
+ * testers.
+ *
+ * @author Chris Povirk
+ * @author Jared Levy
+ */
+public class Collections2Test extends TestCase {
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite(Collections2Test.class.getSimpleName());
+ suite.addTest(testsForFilter());
+ suite.addTest(testsForFilterAll());
+ suite.addTest(testsForFilterLinkedList());
+ suite.addTest(testsForFilterNoNulls());
+ suite.addTest(testsForFilterFiltered());
+ suite.addTest(testsForTransform());
+ suite.addTestSuite(Collections2Test.class);
+ return suite;
+ }
+
+ static final Predicate<String> NOT_YYY_ZZZ = new Predicate<String>() {
+ public boolean apply(String input) {
+ return !"yyy".equals(input) && !"zzz".equals(input);
+ }
+ };
+
+ static final Predicate<String> LENGTH_1 = new Predicate<String>() {
+ public boolean apply(String input) {
+ return input.length() == 1;
+ }
+ };
+
+ static final Predicate<String> STARTS_WITH_VOWEL = new Predicate<String>() {
+ public boolean apply(String input) {
+ return Arrays.asList('a', 'e', 'i', 'o', 'u').contains(input.charAt(0));
+ }
+ };
+
+ private static Test testsForFilter() {
+ return CollectionTestSuiteBuilder.using(
+ new TestStringCollectionGenerator() {
+ @Override public Collection<String> create(String[] elements) {
+ List<String> unfiltered = newArrayList();
+ unfiltered.add("yyy");
+ unfiltered.addAll(Arrays.asList(elements));
+ unfiltered.add("zzz");
+ return Collections2.filter(unfiltered, NOT_YYY_ZZZ);
+ }
+ })
+ .named("Collections2.filter")
+ .withFeatures(
+ CollectionFeature.GENERAL_PURPOSE,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionFeature.KNOWN_ORDER,
+ CollectionSize.ANY)
+ .suppressing(getIteratorKnownOrderRemoveSupportedMethod())
+ .createTestSuite();
+ }
+
+ private static Test testsForFilterAll() {
+ return CollectionTestSuiteBuilder.using(
+ new TestStringCollectionGenerator() {
+ @Override public Collection<String> create(String[] elements) {
+ List<String> unfiltered = newArrayList();
+ unfiltered.addAll(Arrays.asList(elements));
+ return Collections2.filter(unfiltered, NOT_YYY_ZZZ);
+ }
+ })
+ .named("Collections2.filter")
+ .withFeatures(
+ CollectionFeature.GENERAL_PURPOSE,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionFeature.KNOWN_ORDER,
+ CollectionSize.ANY)
+ .suppressing(getIteratorKnownOrderRemoveSupportedMethod())
+ .createTestSuite();
+ }
+
+ private static Test testsForFilterLinkedList() {
+ return CollectionTestSuiteBuilder.using(
+ new TestStringCollectionGenerator() {
+ @Override public Collection<String> create(String[] elements) {
+ List<String> unfiltered = newLinkedList();
+ unfiltered.add("yyy");
+ unfiltered.addAll(Arrays.asList(elements));
+ unfiltered.add("zzz");
+ return Collections2.filter(unfiltered, NOT_YYY_ZZZ);
+ }
+ })
+ .named("Collections2.filter")
+ .withFeatures(
+ CollectionFeature.GENERAL_PURPOSE,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionFeature.KNOWN_ORDER,
+ CollectionSize.ANY)
+ .suppressing(getIteratorKnownOrderRemoveSupportedMethod())
+ .createTestSuite();
+ }
+
+ private static Test testsForFilterNoNulls() {
+ return CollectionTestSuiteBuilder.using(
+ new TestStringCollectionGenerator() {
+ @Override public Collection<String> create(String[] elements) {
+ List<String> unfiltered = newArrayList();
+ unfiltered.add("yyy");
+ unfiltered.addAll(ImmutableList.of(elements));
+ unfiltered.add("zzz");
+ return Collections2.filter(unfiltered, LENGTH_1);
+ }
+ })
+ .named("Collections2.filter, no nulls")
+ .withFeatures(
+ CollectionFeature.GENERAL_PURPOSE,
+ CollectionFeature.KNOWN_ORDER,
+ CollectionSize.ANY)
+ .suppressing(getIteratorKnownOrderRemoveSupportedMethod())
+ .createTestSuite();
+ }
+
+ private static Test testsForFilterFiltered() {
+ return CollectionTestSuiteBuilder.using(
+ new TestStringCollectionGenerator() {
+ @Override public Collection<String> create(String[] elements) {
+ List<String> unfiltered = newArrayList();
+ unfiltered.add("yyy");
+ unfiltered.addAll(ImmutableList.of(elements));
+ unfiltered.add("zzz");
+ unfiltered.add("abc");
+ return Collections2.filter(
+ Collections2.filter(unfiltered, LENGTH_1), NOT_YYY_ZZZ);
+ }
+ })
+ .named("Collections2.filter, filtered input")
+ .withFeatures(
+ CollectionFeature.GENERAL_PURPOSE,
+ CollectionFeature.KNOWN_ORDER,
+ CollectionSize.ANY)
+ .suppressing(getIteratorKnownOrderRemoveSupportedMethod())
+ .createTestSuite();
+ }
+
+ abstract public static class FilterChangeTest extends TestCase {
+ protected abstract <E> List<E> newList();
+
+ public void testFilterIllegalAdd() {
+ List<String> unfiltered = newList();
+ Collection<String> filtered
+ = Collections2.filter(unfiltered, NOT_YYY_ZZZ);
+ filtered.add("a");
+ filtered.add("b");
+ JUnitAsserts.assertContentsInOrder(filtered, "a", "b");
+
+ try {
+ filtered.add("yyy");
+ fail();
+ } catch (IllegalArgumentException expected) {}
+
+ try {
+ filtered.addAll(Arrays.asList("c", "zzz", "d"));
+ fail();
+ } catch (IllegalArgumentException expected) {}
+
+ JUnitAsserts.assertContentsInOrder(filtered, "a", "b");
+ }
+
+ public void testFilterChangeUnfiltered() {
+ List<String> unfiltered = newList();
+ Collection<String> filtered
+ = Collections2.filter(unfiltered, NOT_YYY_ZZZ);
+
+ unfiltered.add("a");
+ unfiltered.add("yyy");
+ unfiltered.add("b");
+ JUnitAsserts.assertContentsInOrder(unfiltered, "a", "yyy", "b");
+ JUnitAsserts.assertContentsInOrder(filtered, "a", "b");
+
+ unfiltered.remove("a");
+ JUnitAsserts.assertContentsInOrder(unfiltered, "yyy", "b");
+ JUnitAsserts.assertContentsInOrder(filtered, "b");
+
+ unfiltered.clear();
+ JUnitAsserts.assertContentsInOrder(unfiltered);
+ JUnitAsserts.assertContentsInOrder(filtered);
+
+ unfiltered.add("yyy");
+ JUnitAsserts.assertContentsInOrder(unfiltered, "yyy");
+ JUnitAsserts.assertContentsInOrder(filtered);
+ filtered.clear();
+ JUnitAsserts.assertContentsInOrder(unfiltered, "yyy");
+ JUnitAsserts.assertContentsInOrder(filtered);
+
+ unfiltered.clear();
+ filtered.clear();
+ JUnitAsserts.assertContentsInOrder(unfiltered);
+ JUnitAsserts.assertContentsInOrder(filtered);
+
+ unfiltered.add("a");
+ JUnitAsserts.assertContentsInOrder(unfiltered, "a");
+ JUnitAsserts.assertContentsInOrder(filtered, "a");
+ filtered.clear();
+ JUnitAsserts.assertContentsInOrder(unfiltered);
+ JUnitAsserts.assertContentsInOrder(filtered);
+
+ unfiltered.clear();
+ unfiltered.add("a");
+ unfiltered.add("b");
+ unfiltered.add("yyy");
+ unfiltered.add("zzz");
+ unfiltered.add("c");
+ unfiltered.add("d");
+ unfiltered.add("yyy");
+ unfiltered.add("zzz");
+ JUnitAsserts.assertContentsInOrder(unfiltered, "a", "b", "yyy", "zzz",
+ "c", "d", "yyy", "zzz");
+ JUnitAsserts.assertContentsInOrder(filtered, "a", "b", "c", "d");
+ filtered.clear();
+ JUnitAsserts.assertContentsInOrder(unfiltered, "yyy", "zzz", "yyy",
+ "zzz");
+ JUnitAsserts.assertContentsInOrder(filtered);
+ }
+
+ public void testFilterChangeFiltered() {
+ List<String> unfiltered = newList();
+ Collection<String> filtered
+ = Collections2.filter(unfiltered, NOT_YYY_ZZZ);
+
+ unfiltered.add("a");
+ unfiltered.add("yyy");
+ filtered.add("b");
+ JUnitAsserts.assertContentsInOrder(unfiltered, "a", "yyy", "b");
+ JUnitAsserts.assertContentsInOrder(filtered, "a", "b");
+
+ filtered.remove("a");
+ JUnitAsserts.assertContentsInOrder(unfiltered, "yyy", "b");
+ JUnitAsserts.assertContentsInOrder(filtered, "b");
+
+ filtered.clear();
+ JUnitAsserts.assertContentsInOrder(unfiltered, "yyy");
+ JUnitAsserts.assertContentsInOrder(filtered);
+ }
+
+ public void testFilterFiltered() {
+ List<String> unfiltered = newList();
+ Collection<String> filtered = Collections2.filter(
+ Collections2.filter(unfiltered, LENGTH_1), STARTS_WITH_VOWEL);
+ unfiltered.add("a");
+ unfiltered.add("b");
+ unfiltered.add("apple");
+ unfiltered.add("banana");
+ unfiltered.add("e");
+ JUnitAsserts.assertContentsInOrder(filtered, "a", "e");
+ JUnitAsserts.assertContentsInOrder(unfiltered,
+ "a", "b", "apple", "banana", "e");
+
+ try {
+ filtered.add("d");
+ fail();
+ } catch (IllegalArgumentException expected) {}
+ try {
+ filtered.add("egg");
+ fail();
+ } catch (IllegalArgumentException expected) {}
+ JUnitAsserts.assertContentsInOrder(filtered, "a", "e");
+ JUnitAsserts.assertContentsInOrder(unfiltered,
+ "a", "b", "apple", "banana", "e");
+
+ filtered.clear();
+ assertTrue(filtered.isEmpty());
+ JUnitAsserts.assertContentsInOrder(unfiltered, "b", "apple", "banana");
+ }
+ }
+
+ public static class ArrayListFilterChangeTest extends FilterChangeTest {
+ @Override protected <E> List<E> newList() {
+ return Lists.newArrayList();
+ }
+ }
+
+ public static class LinkedListFilterChangeTest extends FilterChangeTest {
+ @Override protected <E> List<E> newList() {
+ return Lists.newLinkedList();
+ }
+ }
+
+ private static final Function<String, String> REMOVE_FIRST_CHAR
+ = new Function<String, String>() {
+ public String apply(String from) {
+ return ((from == null) || "".equals(from))
+ ? null : from.substring(1);
+ }
+ };
+
+ private static Test testsForTransform() {
+ return CollectionTestSuiteBuilder.using(
+ new TestStringCollectionGenerator() {
+ @Override public Collection<String> create(String[] elements) {
+ List<String> list = newArrayList();
+ for (String element : elements) {
+ list.add((element == null) ? null : "q" + element);
+ }
+ return Collections2.transform(list, REMOVE_FIRST_CHAR);
+ }
+ })
+ .named("Collections2.transform")
+ .withFeatures(
+ CollectionFeature.REMOVE_OPERATIONS,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionFeature.KNOWN_ORDER,
+ CollectionSize.ANY)
+ .createTestSuite();
+ }
+
+ public void testNullPointerExceptions() throws Exception {
+ NullPointerTester tester = new NullPointerTester();
+ tester.testAllPublicStaticMethods(Collections2.class);
+ }
+}
diff --git a/test/com/google/common/collect/ConcurrentHashMultisetTest.java b/test/com/google/common/collect/ConcurrentHashMultisetTest.java
new file mode 100644
index 0000000..a5f2994
--- /dev/null
+++ b/test/com/google/common/collect/ConcurrentHashMultisetTest.java
@@ -0,0 +1,362 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.testutils.SerializableTester.reserializeAndAssert;
+
+import junit.framework.TestCase;
+
+import static org.easymock.EasyMock.expect;
+import org.easymock.classextension.EasyMock;
+
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.concurrent.ConcurrentMap;
+
+import javax.annotation.Nullable;
+
+/**
+ * Test case for {@link ConcurrentHashMultiset}.
+ *
+ * @author Cliff L. Biffle
+ */
+public class ConcurrentHashMultisetTest extends TestCase {
+ private static final String KEY = "puppies";
+
+ ConcurrentMap<String, Integer> backingMap;
+ ConcurrentHashMultiset<String> multiset;
+
+ @SuppressWarnings("unchecked")
+ @Override protected void setUp() {
+ backingMap = EasyMock.createMock(ConcurrentMap.class);
+ expect(backingMap.isEmpty()).andReturn(true);
+ replay();
+
+ multiset = new ConcurrentHashMultiset<String>(backingMap);
+ verify();
+ reset();
+ }
+
+ public void testCount_elementPresent() {
+ final int COUNT = 12;
+ expect(backingMap.get(KEY)).andReturn(COUNT);
+ replay();
+
+ assertEquals(COUNT, multiset.count(KEY));
+ verify();
+ }
+
+ public void testCount_elementAbsent() {
+ expect(backingMap.get(KEY)).andReturn(null);
+ replay();
+
+ assertEquals(0, multiset.count(KEY));
+ verify();
+ }
+
+ public void testAdd_zero() {
+ final int INITIAL_COUNT = 32;
+
+ expect(backingMap.get(KEY)).andReturn(INITIAL_COUNT);
+ replay();
+ assertEquals(INITIAL_COUNT, multiset.add(KEY, 0));
+ verify();
+ }
+
+ public void testAdd_firstFewWithSuccess() {
+ final int COUNT = 400;
+
+ expect(backingMap.get(KEY)).andReturn(null);
+ expect(backingMap.putIfAbsent(KEY, COUNT)).andReturn(null);
+ replay();
+
+ assertEquals(0, multiset.add(KEY, COUNT));
+ verify();
+ }
+
+ public void testAdd_laterFewWithSuccess() {
+ final int INITIAL_COUNT = 32;
+ final int COUNT_TO_ADD = 400;
+
+ expect(backingMap.get(KEY)).andReturn(INITIAL_COUNT);
+ expect(backingMap.replace(KEY, INITIAL_COUNT, INITIAL_COUNT + COUNT_TO_ADD))
+ .andReturn(true);
+ replay();
+
+ assertEquals(INITIAL_COUNT, multiset.add(KEY, COUNT_TO_ADD));
+ verify();
+ }
+
+ public void testAdd_laterFewWithOverflow() {
+ final int INITIAL_COUNT = 92384930;
+ final int COUNT_TO_ADD = Integer.MAX_VALUE - INITIAL_COUNT + 1;
+
+ expect(backingMap.get(KEY)).andReturn(INITIAL_COUNT);
+ replay();
+
+ try {
+ multiset.add(KEY, COUNT_TO_ADD);
+ fail("Must reject arguments that would cause counter overflow.");
+ } catch (IllegalArgumentException e) {
+ // Expected.
+ }
+ verify();
+ }
+
+ /**
+ * Simulates rapid concurrent writes to the multiset to test failure, retry,
+ * and compare-and-set operations.
+ *
+ * Specifically, the multiset will initially see {@code null} for the element
+ * count, giving it free reign to insert -- but the {@code putIfAbsent} will
+ * fail due to a concurrent write. The multiset will then fall back four
+ * times as counts go up and down before succeeding.
+ */
+ public void testAdd_fewWithFailures() {
+ final int DESIRED_COUNT = 400;
+ final Integer[] FAILURE_COUNTS = { null, 12, 40, null, 80 };
+ final int LAST_FAILURE_COUNT = FAILURE_COUNTS[FAILURE_COUNTS.length - 1];
+
+ for (Integer failureCount : FAILURE_COUNTS) {
+ // Check current contents...
+ expect(backingMap.get(KEY)).andReturn(failureCount);
+
+ if (failureCount == null) {
+ /*
+ * TODO: this only works because we know the multiset
+ * doesn't use the result of putIfAbsent.
+ */
+ expect(backingMap.putIfAbsent(KEY, DESIRED_COUNT))
+ .andReturn(12);
+ } else {
+ int nextCount = failureCount + DESIRED_COUNT;
+ expect(backingMap.replace(KEY, failureCount, nextCount))
+ .andReturn(false); // ...and lose!
+ }
+ }
+
+ // Last time.
+ expect(backingMap.get(KEY)).andReturn(LAST_FAILURE_COUNT);
+ expect(backingMap.replace(KEY, LAST_FAILURE_COUNT,
+ LAST_FAILURE_COUNT + DESIRED_COUNT))
+ .andReturn(true); // Yay!
+ replay();
+
+ assertEquals(LAST_FAILURE_COUNT, multiset.add(KEY, DESIRED_COUNT));
+ verify();
+ }
+
+ public void testRemove_zeroFromSome() {
+ final int INITIAL_COUNT = 14;
+ expect(backingMap.get(KEY)).andReturn(INITIAL_COUNT);
+ replay();
+
+ assertEquals(INITIAL_COUNT, multiset.remove(KEY, 0));
+ verify();
+ }
+
+ public void testRemove_zeroFromNone() {
+ expect(backingMap.get(KEY)).andReturn(null);
+ replay();
+
+ assertEquals(0, multiset.remove(KEY, 0));
+ verify();
+ }
+
+ public void testRemove_nonePresent() {
+ expect(backingMap.get(KEY)).andReturn(null);
+ replay();
+
+ assertEquals(0, multiset.remove(KEY, 400));
+ verify();
+ }
+
+ public void testRemove_someRemaining() {
+ final int COUNT_TO_REMOVE = 30;
+ final int COUNT_REMAINING = 1;
+ final int INITIAL_COUNT = COUNT_TO_REMOVE + COUNT_REMAINING;
+ expect(backingMap.get(KEY)).andReturn(INITIAL_COUNT);
+ expect(backingMap.replace(KEY, INITIAL_COUNT, COUNT_REMAINING))
+ .andReturn(true);
+ replay();
+
+ assertEquals(INITIAL_COUNT, multiset.remove(KEY, COUNT_TO_REMOVE));
+ verify();
+ }
+
+ public void testRemove_noneRemaining() {
+ final int COUNT_TO_REMOVE = 30;
+ final int INITIAL_COUNT = COUNT_TO_REMOVE;
+ expect(backingMap.get(KEY)).andReturn(INITIAL_COUNT);
+ expect(backingMap.remove(KEY, INITIAL_COUNT))
+ .andReturn(true);
+ replay();
+
+ assertEquals(INITIAL_COUNT, multiset.remove(KEY, COUNT_TO_REMOVE));
+ verify();
+ }
+
+ public void testRemove_someFailuresThenComplete() {
+ final int COUNT_TO_REMOVE = 30;
+ final int[] FAILURES = {
+ COUNT_TO_REMOVE + 12,
+ COUNT_TO_REMOVE - 8, // to test remove behavior
+ COUNT_TO_REMOVE + 4,
+ COUNT_TO_REMOVE
+ };
+ final int COUNT_AT_SUCCESS = COUNT_TO_REMOVE;
+
+ simulateRemoveFailures(COUNT_TO_REMOVE, FAILURES, COUNT_AT_SUCCESS);
+ replay();
+
+ assertEquals(COUNT_AT_SUCCESS, multiset.remove(KEY, COUNT_TO_REMOVE));
+ verify();
+ }
+
+ public void testRemove_someFailuresThenPartial() {
+ final int COUNT_TO_REMOVE = 30;
+ final int[] FAILURES = {
+ COUNT_TO_REMOVE + 12,
+ };
+ final int COUNT_AT_SUCCESS = COUNT_TO_REMOVE - 8;
+
+ simulateRemoveFailures(COUNT_TO_REMOVE, FAILURES, COUNT_AT_SUCCESS);
+ replay();
+
+ assertEquals(COUNT_AT_SUCCESS, multiset.remove(KEY, COUNT_TO_REMOVE));
+ verify();
+ }
+
+ public void testRemove_someFailuresThenNull() {
+ final int COUNT_TO_REMOVE = 30;
+ final int[] FAILURES = {
+ COUNT_TO_REMOVE + 12,
+ };
+ final Integer COUNT_AT_SUCCESS = null;
+
+ simulateRemoveFailures(COUNT_TO_REMOVE, FAILURES, COUNT_AT_SUCCESS);
+ replay();
+
+ assertEquals(0, multiset.remove(KEY, COUNT_TO_REMOVE));
+ verify();
+ }
+
+ private void simulateRemoveFailures(int countToRemove, int[] failures,
+ @Nullable Integer finalCount) {
+ for (int count : failures) {
+ expect(backingMap.get(KEY)).andReturn(count);
+ if (count > countToRemove) {
+ expect(backingMap.replace(KEY, count, count - countToRemove))
+ .andReturn(false);
+ } else {
+ expect(backingMap.remove(KEY, count)).andReturn(false);
+ }
+ }
+
+ expect(backingMap.get(KEY)).andReturn(finalCount);
+ if (finalCount == null) {
+ return;
+ } else if (finalCount > countToRemove) {
+ expect(backingMap.replace(KEY, finalCount, finalCount - countToRemove))
+ .andReturn(true);
+ } else {
+ expect(backingMap.remove(KEY, finalCount)).andReturn(true);
+ }
+ }
+
+ public void testIteratorRemove_actualMap() {
+ // Override to avoid using mocks.
+ multiset = ConcurrentHashMultiset.create();
+
+ multiset.add(KEY);
+ multiset.add(KEY + "_2");
+ multiset.add(KEY);
+
+ int mutations = 0;
+ for (Iterator<String> it = multiset.iterator(); it.hasNext(); ) {
+ it.next();
+ it.remove();
+ mutations++;
+ }
+ assertTrue(multiset.isEmpty());
+ assertEquals(3, mutations);
+ }
+
+ public void testSetCount_basic() {
+ final int INITIAL_COUNT = 20;
+ final int COUNT_TO_SET = 40;
+
+ expect(backingMap.put(KEY, COUNT_TO_SET))
+ .andReturn(INITIAL_COUNT);
+ replay();
+
+ assertEquals(INITIAL_COUNT, multiset.setCount(KEY, COUNT_TO_SET));
+ verify();
+ }
+
+ public void testSetCount_asRemove() {
+ final int COUNT_TO_REMOVE = 40;
+ expect(backingMap.remove(KEY)).andReturn(COUNT_TO_REMOVE);
+ replay();
+
+ assertEquals(COUNT_TO_REMOVE, multiset.setCount(KEY, 0));
+ verify();
+ }
+
+ public void testSetCount_0_nonePresent() {
+ expect(backingMap.remove(KEY)).andReturn(null);
+ replay();
+
+ assertEquals(0, multiset.setCount(KEY, 0));
+ verify();
+ }
+
+ public void testSetCount_0_success() {
+ final int COUNT_TO_REMOVE = 12;
+ expect(backingMap.remove(KEY)).andReturn(COUNT_TO_REMOVE);
+ replay();
+
+ assertEquals(COUNT_TO_REMOVE, multiset.setCount(KEY, 0));
+ verify();
+ }
+
+ public void testCreate() {
+ ConcurrentHashMultiset<Integer> multiset = ConcurrentHashMultiset.create();
+ assertTrue(multiset.isEmpty());
+ reserializeAndAssert(multiset);
+ }
+
+ public void testCreateFromIterable() {
+ Iterable<Integer> iterable = Arrays.asList(1, 2, 2, 3, 4);
+ ConcurrentHashMultiset<Integer> multiset
+ = ConcurrentHashMultiset.create(iterable);
+ assertEquals(2, multiset.count(2));
+ reserializeAndAssert(multiset);
+ }
+
+ private void replay() {
+ EasyMock.replay(backingMap);
+ }
+
+ private void verify() {
+ EasyMock.verify(backingMap);
+ }
+
+ private void reset() {
+ EasyMock.reset(backingMap);
+ }
+}
diff --git a/test/com/google/common/collect/ConcurrentHashMultisetWithChmTest.java b/test/com/google/common/collect/ConcurrentHashMultisetWithChmTest.java
new file mode 100644
index 0000000..fd2a43f
--- /dev/null
+++ b/test/com/google/common/collect/ConcurrentHashMultisetWithChmTest.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+/**
+ * Unit test for {@link ConcurrentHashMultiset} behavior when backed by the
+ * standard {@link java.util.concurrent.ConcurrentHashMap}.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ */
+public class ConcurrentHashMultisetWithChmTest
+ extends AbstractConcurrentHashMultisetTest {
+ @Override protected <E> Multiset<E> create() {
+ return ConcurrentHashMultiset.create();
+ }
+}
diff --git a/test/com/google/common/collect/EnumBiMapTest.java b/test/com/google/common/collect/EnumBiMapTest.java
new file mode 100644
index 0000000..3dc50b7
--- /dev/null
+++ b/test/com/google/common/collect/EnumBiMapTest.java
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.testing.junit3.JUnitAsserts.assertContentsInOrder;
+import com.google.common.testutils.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.util.Collections;
+import java.util.Map;
+
+/**
+ * Tests for {@code EnumBiMap}.
+ *
+ * @author Mike Bostock
+ * @author Jared Levy
+ */
+public class EnumBiMapTest extends TestCase {
+ private enum Currency { DOLLAR, FRANC, PESO }
+ private enum Country { CANADA, CHILE, SWITZERLAND }
+
+ public void testCreate() {
+ EnumBiMap<Currency, Country> bimap =
+ EnumBiMap.create(Currency.class, Country.class);
+ assertTrue(bimap.isEmpty());
+ assertEquals("{}", bimap.toString());
+ assertEquals(HashBiMap.create(), bimap);
+ bimap.put(Currency.DOLLAR, Country.CANADA);
+ assertEquals(Country.CANADA, bimap.get(Currency.DOLLAR));
+ assertEquals(Currency.DOLLAR, bimap.inverse().get(Country.CANADA));
+ }
+
+ public void testCreateFromMap() {
+ /* Test with non-empty Map. */
+ Map<Currency, Country> map = ImmutableMap.of(
+ Currency.DOLLAR, Country.CANADA,
+ Currency.PESO, Country.CHILE,
+ Currency.FRANC, Country.SWITZERLAND);
+ EnumBiMap<Currency, Country> bimap = EnumBiMap.create(map);
+ assertEquals(Country.CANADA, bimap.get(Currency.DOLLAR));
+ assertEquals(Currency.DOLLAR, bimap.inverse().get(Country.CANADA));
+
+ /* Map must have at least one entry if not an EnumBiMap. */
+ try {
+ EnumBiMap.create(Collections.<Currency, Country>emptyMap());
+ fail("IllegalArgumentException expected");
+ } catch (IllegalArgumentException expected) {}
+ try {
+ EnumBiMap.create(
+ EnumHashBiMap.<Currency, Country>create(Currency.class));
+ fail("IllegalArgumentException expected");
+ } catch (IllegalArgumentException expected) {}
+
+ /* Map can be empty if it's an EnumBiMap. */
+ Map<Currency, Country> emptyBimap =
+ EnumBiMap.create(Currency.class, Country.class);
+ bimap = EnumBiMap.create(emptyBimap);
+ assertTrue(bimap.isEmpty());
+ }
+
+ public void testEnumBiMapConstructor() {
+ /* Test that it copies existing entries. */
+ EnumBiMap<Currency, Country> bimap1 =
+ EnumBiMap.create(Currency.class, Country.class);
+ bimap1.put(Currency.DOLLAR, Country.CANADA);
+ EnumBiMap<Currency, Country> bimap2 =
+ EnumBiMap.create(bimap1);
+ assertEquals(Country.CANADA, bimap2.get(Currency.DOLLAR));
+ assertEquals(bimap1, bimap2);
+ bimap2.inverse().put(Country.SWITZERLAND, Currency.FRANC);
+ assertEquals(Country.SWITZERLAND, bimap2.get(Currency.FRANC));
+ assertNull(bimap1.get(Currency.FRANC));
+ assertFalse(bimap2.equals(bimap1));
+
+ /* Test that it can be empty. */
+ EnumBiMap<Currency, Country> emptyBimap =
+ EnumBiMap.create(Currency.class, Country.class);
+ EnumBiMap<Currency, Country> bimap3 =
+ EnumBiMap.create(emptyBimap);
+ assertEquals(bimap3, emptyBimap);
+ }
+
+ public void testKeyType() {
+ EnumBiMap<Currency, Country> bimap =
+ EnumBiMap.create(Currency.class, Country.class);
+ assertEquals(Currency.class, bimap.keyType());
+ }
+
+ public void testValueType() {
+ EnumBiMap<Currency, Country> bimap =
+ EnumBiMap.create(Currency.class, Country.class);
+ assertEquals(Country.class, bimap.valueType());
+ }
+
+ public void testSerialization() {
+ Map<Currency, Country> map = ImmutableMap.of(
+ Currency.DOLLAR, Country.CANADA,
+ Currency.PESO, Country.CHILE,
+ Currency.FRANC, Country.SWITZERLAND);
+ EnumBiMap<Currency, Country> bimap = EnumBiMap.create(map);
+
+ BiMap<Currency, Country> copy =
+ SerializableTester.reserializeAndAssert(bimap);
+ assertEquals(bimap.inverse(), copy.inverse());
+ }
+
+ public void testIterationOrder() {
+ // The enum orderings are alphabetical, leading to the bimap and its inverse
+ // having inconsistent iteration orderings.
+ Map<Currency, Country> map = ImmutableMap.of(
+ Currency.DOLLAR, Country.CANADA,
+ Currency.PESO, Country.CHILE,
+ Currency.FRANC, Country.SWITZERLAND);
+ EnumBiMap<Currency, Country> bimap = EnumBiMap.create(map);
+
+ // forward map ordered by currency
+ assertContentsInOrder(bimap.keySet(),
+ Currency.DOLLAR, Currency.FRANC, Currency.PESO);
+ // forward map ordered by currency (even for country values)
+ assertContentsInOrder(bimap.values(),
+ Country.CANADA, Country.SWITZERLAND, Country.CHILE);
+ // backward map ordered by country
+ assertContentsInOrder(bimap.inverse().keySet(),
+ Country.CANADA, Country.CHILE, Country.SWITZERLAND);
+ // backward map ordered by country (even for currency values)
+ assertContentsInOrder(bimap.inverse().values(),
+ Currency.DOLLAR, Currency.PESO, Currency.FRANC);
+ }
+
+ /* Remaining behavior tested by AbstractBiMapTest. */
+}
diff --git a/test/com/google/common/collect/EnumHashBiMapTest.java b/test/com/google/common/collect/EnumHashBiMapTest.java
new file mode 100644
index 0000000..832e162
--- /dev/null
+++ b/test/com/google/common/collect/EnumHashBiMapTest.java
@@ -0,0 +1,155 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.testutils.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.util.Collections;
+import java.util.Map;
+
+/**
+ * Tests for {@code EnumHashBiMap}.
+ *
+ * @author Mike Bostock
+ */
+public class EnumHashBiMapTest extends TestCase {
+ private enum Currency { DOLLAR, PESO, FRANC }
+ private enum Country { CANADA, CHILE, SWITZERLAND }
+
+ public void testCreate() {
+ EnumHashBiMap<Currency, String> bimap =
+ EnumHashBiMap.create(Currency.class);
+ assertTrue(bimap.isEmpty());
+ assertEquals("{}", bimap.toString());
+ assertEquals(HashBiMap.create(), bimap);
+ bimap.put(Currency.DOLLAR, "dollar");
+ assertEquals("dollar", bimap.get(Currency.DOLLAR));
+ assertEquals(Currency.DOLLAR, bimap.inverse().get("dollar"));
+ }
+
+ public void testCreateFromMap() {
+ /* Test with non-empty Map. */
+ Map<Currency, String> map = ImmutableMap.of(
+ Currency.DOLLAR, "dollar",
+ Currency.PESO, "peso",
+ Currency.FRANC, "franc");
+ EnumHashBiMap<Currency, String> bimap
+ = EnumHashBiMap.create(map);
+ assertEquals("dollar", bimap.get(Currency.DOLLAR));
+ assertEquals(Currency.DOLLAR, bimap.inverse().get("dollar"));
+
+ /* Map must have at least one entry if not an EnumHashBiMap. */
+ try {
+ EnumHashBiMap.create(
+ Collections.<Currency, String>emptyMap());
+ fail("IllegalArgumentException expected");
+ } catch (IllegalArgumentException expected) {}
+
+ /* Map can be empty if it's an EnumHashBiMap. */
+ Map<Currency, String> emptyBimap = EnumHashBiMap.create(Currency.class);
+ bimap = EnumHashBiMap.create(emptyBimap);
+ assertTrue(bimap.isEmpty());
+
+ /* Map can be empty if it's an EnumBiMap. */
+ Map<Currency, Country> emptyBimap2 =
+ EnumBiMap.create(Currency.class, Country.class);
+ EnumHashBiMap<Currency, Country> bimap2
+ = EnumHashBiMap.create(emptyBimap2);
+ assertTrue(bimap2.isEmpty());
+ }
+
+ public void testEnumHashBiMapConstructor() {
+ /* Test that it copies existing entries. */
+ EnumHashBiMap<Currency, String> bimap1 =
+ EnumHashBiMap.create(Currency.class);
+ bimap1.put(Currency.DOLLAR, "dollar");
+ EnumHashBiMap<Currency, String> bimap2 =
+ EnumHashBiMap.create(bimap1);
+ assertEquals("dollar", bimap2.get(Currency.DOLLAR));
+ assertEquals(bimap1, bimap2);
+ bimap2.inverse().put("franc", Currency.FRANC);
+ assertEquals("franc", bimap2.get(Currency.FRANC));
+ assertNull(bimap1.get(Currency.FRANC));
+ assertFalse(bimap2.equals(bimap1));
+
+ /* Test that it can be empty. */
+ EnumHashBiMap<Currency, String> emptyBimap =
+ EnumHashBiMap.create(Currency.class);
+ EnumHashBiMap<Currency, String> bimap3 =
+ EnumHashBiMap.create(emptyBimap);
+ assertEquals(bimap3, emptyBimap);
+ }
+
+ public void testEnumBiMapConstructor() {
+ /* Test that it copies existing entries. */
+ EnumBiMap<Currency, Country> bimap1 =
+ EnumBiMap.create(Currency.class, Country.class);
+ bimap1.put(Currency.DOLLAR, Country.SWITZERLAND);
+ EnumHashBiMap<Currency, Object> bimap2 = // use supertype
+ EnumHashBiMap.<Currency, Object>create(bimap1);
+ assertEquals(Country.SWITZERLAND, bimap2.get(Currency.DOLLAR));
+ assertEquals(bimap1, bimap2);
+ bimap2.inverse().put("franc", Currency.FRANC);
+ assertEquals("franc", bimap2.get(Currency.FRANC));
+ assertNull(bimap1.get(Currency.FRANC));
+ assertFalse(bimap2.equals(bimap1));
+
+ /* Test that it can be empty. */
+ EnumBiMap<Currency, Country> emptyBimap =
+ EnumBiMap.create(Currency.class, Country.class);
+ EnumHashBiMap<Currency, Country> bimap3 = // use exact type
+ EnumHashBiMap.create(emptyBimap);
+ assertEquals(bimap3, emptyBimap);
+ }
+
+ public void testKeyType() {
+ EnumHashBiMap<Currency, String> bimap =
+ EnumHashBiMap.create(Currency.class);
+ assertEquals(Currency.class, bimap.keyType());
+ }
+
+ public void testSerialization() {
+ Map<Currency, String> map = ImmutableMap.of(
+ Currency.DOLLAR, "dollar",
+ Currency.PESO, "peso",
+ Currency.FRANC, "franc");
+ EnumHashBiMap<Currency, String> bimap
+ = EnumHashBiMap.create(map);
+
+ BiMap<Currency, String> copy =
+ SerializableTester.reserializeAndAssert(bimap);
+ assertEquals(bimap.inverse(), copy.inverse());
+ }
+
+ public void testForcePut() {
+ EnumHashBiMap<Currency, String> bimap =
+ EnumHashBiMap.create(Currency.class);
+ bimap.put(Currency.DOLLAR, "dollar");
+ try {
+ bimap.put(Currency.PESO, "dollar");
+ } catch (IllegalArgumentException expected) {}
+ bimap.forcePut(Currency.PESO, "dollar");
+ assertEquals("dollar", bimap.get(Currency.PESO));
+ assertEquals(Currency.PESO, bimap.inverse().get("dollar"));
+ assertEquals(1, bimap.size());
+ assertEquals(1, bimap.inverse().size());
+ }
+
+ /* Remaining behavior tested by AbstractBiMapTest. */
+}
diff --git a/test/com/google/common/collect/EnumMultisetTest.java b/test/com/google/common/collect/EnumMultisetTest.java
new file mode 100644
index 0000000..02c65b1
--- /dev/null
+++ b/test/com/google/common/collect/EnumMultisetTest.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.testutils.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.EnumSet;
+
+/**
+ * Tests for an {@link EnumMultiset}.
+ *
+ * @author Jared Levy
+ */
+public class EnumMultisetTest extends TestCase {
+ private static enum Color {
+ BLUE, RED, YELLOW, GREEN, WHITE
+ }
+
+ public void testClassCreate() {
+ Multiset<Color> ms = EnumMultiset.create(Color.class);
+ ms.add(Color.RED);
+ ms.add(Color.YELLOW);
+ ms.add(Color.RED);
+ assertEquals(0, ms.count(Color.BLUE));
+ assertEquals(1, ms.count(Color.YELLOW));
+ assertEquals(2, ms.count(Color.RED));
+ }
+
+ public void testCollectionCreate() {
+ Multiset<Color> ms = EnumMultiset.create(
+ Arrays.asList(Color.RED, Color.YELLOW, Color.RED));
+ assertEquals(0, ms.count(Color.BLUE));
+ assertEquals(1, ms.count(Color.YELLOW));
+ assertEquals(2, ms.count(Color.RED));
+ }
+
+ public void testIllegalCreate() {
+ Collection<Color> empty = EnumSet.noneOf(Color.class);
+ try {
+ EnumMultiset.create(empty);
+ fail();
+ } catch (IllegalArgumentException expected) {}
+ }
+
+ public void testToString() {
+ Multiset<Color> ms = EnumMultiset.create(Color.class);
+ ms.add(Color.BLUE, 3);
+ ms.add(Color.YELLOW, 1);
+ ms.add(Color.RED, 2);
+ assertEquals("[BLUE x 3, RED x 2, YELLOW]", ms.toString());
+ }
+
+ public void testSerializable() {
+ Multiset<Color> ms = EnumMultiset.create(
+ Arrays.asList(Color.RED, Color.YELLOW, Color.RED));
+ assertEquals(ms, SerializableTester.reserialize(ms));
+ }
+}
diff --git a/test/com/google/common/collect/FauxveridesTest.java b/test/com/google/common/collect/FauxveridesTest.java
new file mode 100644
index 0000000..da14775
--- /dev/null
+++ b/test/com/google/common/collect/FauxveridesTest.java
@@ -0,0 +1,285 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.Lists.transform;
+import static com.google.common.collect.Sets.newHashSet;
+import static com.google.common.collect.Sets.newTreeSet;
+import static java.lang.reflect.Modifier.isPublic;
+import static java.lang.reflect.Modifier.isStatic;
+
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.common.base.Objects;
+
+import junit.framework.TestCase;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Tests that all {@code public static} methods "inherited" from superclasses
+ * are "overridden" in each immutable-collection class. This ensures, for
+ * example, that a call written "{@code ImmutableSortedSet.copyOf()}" cannot
+ * secretly be a call to {@code ImmutableSet.copyOf()}.
+ *
+ * @author Chris Povirk
+ */
+public class FauxveridesTest extends TestCase {
+ public void testImmutableBiMap() {
+ doHasAllFauxveridesTest(ImmutableBiMap.class, ImmutableMap.class);
+ }
+
+ public void testImmutableListMultimap() {
+ doHasAllFauxveridesTest(
+ ImmutableListMultimap.class, ImmutableMultimap.class);
+ }
+
+ public void testImmutableSetMultimap() {
+ doHasAllFauxveridesTest(
+ ImmutableSetMultimap.class, ImmutableMultimap.class);
+ }
+
+ public void testImmutableSortedMap() {
+ doHasAllFauxveridesTest(ImmutableSortedMap.class, ImmutableMap.class);
+ }
+
+ public void testImmutableSortedSet() {
+ doHasAllFauxveridesTest(ImmutableSortedSet.class, ImmutableSet.class);
+ }
+
+ /*
+ * Demonstrate that ClassCastException is possible when calling copyOf(),
+ * which we are unable to fauxveride (see ImmutableSortedSetFauxverideShim).
+ */
+
+ public void testImmutableSortedMapCopyOfMap() {
+ Map<Object, Object> original =
+ ImmutableMap.of(new Object(), new Object(), new Object(), new Object());
+
+ try {
+ ImmutableSortedMap.copyOf(original);
+ fail();
+ } catch (ClassCastException expected) {
+ }
+ }
+
+ public void testImmutableSortedSetCopyOfIterable() {
+ Set<Object> original = ImmutableSet.of(new Object(), new Object());
+
+ try {
+ ImmutableSortedSet.copyOf(original);
+ fail();
+ } catch (ClassCastException expected) {
+ }
+ }
+
+ public void testImmutableSortedSetCopyOfIterator() {
+ Set<Object> original = ImmutableSet.of(new Object(), new Object());
+
+ try {
+ ImmutableSortedSet.copyOf(original.iterator());
+ fail();
+ } catch (ClassCastException expected) {
+ }
+ }
+
+ private void doHasAllFauxveridesTest(Class<?> descendant, Class<?> ancestor) {
+ Set<MethodSignature> required =
+ getAllRequiredToFauxveride(descendant, ancestor);
+ Set<MethodSignature> found = getAllFauxveridden(descendant, ancestor);
+ required.removeAll(found);
+
+ assertEquals("Must hide public static methods from ancestor classes",
+ Collections.emptySet(), newTreeSet(required));
+ }
+
+ private static Set<MethodSignature> getAllRequiredToFauxveride(
+ Class<?> descendant, Class<?> ancestor) {
+ return getPublicStaticMethodsBetween(ancestor, Object.class);
+ }
+
+ private static Set<MethodSignature> getAllFauxveridden(
+ Class<?> descendant, Class<?> ancestor) {
+ return getPublicStaticMethodsBetween(descendant, ancestor);
+ }
+
+ private static Set<MethodSignature> getPublicStaticMethodsBetween(
+ Class<?> descendant, Class<?> ancestor) {
+ Set<MethodSignature> methods = newHashSet();
+ for (Class<?> clazz : getClassesBetween(descendant, ancestor)) {
+ methods.addAll(getPublicStaticMethods(clazz));
+ }
+ return methods;
+ }
+
+ private static Set<MethodSignature> getPublicStaticMethods(Class<?> clazz) {
+ Set<MethodSignature> publicStaticMethods = newHashSet();
+
+ for (Method method : clazz.getDeclaredMethods()) {
+ int modifiers = method.getModifiers();
+ if (isPublic(modifiers) && isStatic(modifiers)) {
+ publicStaticMethods.add(new MethodSignature(method));
+ }
+ }
+
+ return publicStaticMethods;
+ }
+
+ /** [descendant, ancestor) */
+ private static Set<Class<?>> getClassesBetween(
+ Class<?> descendant, Class<?> ancestor) {
+ Set<Class<?>> classes = newHashSet();
+
+ while (!descendant.equals(ancestor)) {
+ classes.add(descendant);
+ descendant = descendant.getSuperclass();
+ }
+
+ return classes;
+ }
+
+ /**
+ * Not really a signature -- just the parts that affect whether one method is
+ * a fauxveride of a method from an ancestor class.
+ * <p>
+ * See JLS 8.4.2 for the definition of the related "override-equivalent."
+ */
+ private static final class MethodSignature
+ implements Comparable<MethodSignature> {
+ final String name;
+ final List<Class<?>> parameterTypes;
+ final TypeSignature typeSignature;
+
+ MethodSignature(Method method) {
+ name = method.getName();
+ parameterTypes = Arrays.asList(method.getParameterTypes());
+ typeSignature = new TypeSignature(method.getTypeParameters());
+ }
+
+ @Override public boolean equals(Object obj) {
+ if (obj instanceof MethodSignature) {
+ MethodSignature other = (MethodSignature) obj;
+ return name.equals(other.name)
+ && parameterTypes.equals(other.parameterTypes)
+ && typeSignature.equals(other.typeSignature);
+ }
+
+ return false;
+ }
+
+ @Override public int hashCode() {
+ return Objects.hashCode(name, parameterTypes, typeSignature);
+ }
+
+ @Override public String toString() {
+ return String.format("%s%s(%s)",
+ typeSignature, name, getTypesString(parameterTypes));
+ }
+
+ @Override public int compareTo(MethodSignature o) {
+ return toString().compareTo(o.toString());
+ }
+ }
+
+ private static final class TypeSignature {
+ final List<TypeParameterSignature> parameterSignatures;
+
+ TypeSignature(TypeVariable<Method>[] parameters) {
+ parameterSignatures =
+ transform(Arrays.asList(parameters),
+ new Function<TypeVariable<?>, TypeParameterSignature>() {
+ public TypeParameterSignature apply(TypeVariable<?> from) {
+ return new TypeParameterSignature(from);
+ }
+ });
+ }
+
+ @Override public boolean equals(Object obj) {
+ if (obj instanceof TypeSignature) {
+ TypeSignature other = (TypeSignature) obj;
+ return parameterSignatures.equals(other.parameterSignatures);
+ }
+
+ return false;
+ }
+
+ @Override public int hashCode() {
+ return parameterSignatures.hashCode();
+ }
+
+ @Override public String toString() {
+ return (parameterSignatures.isEmpty())
+ ? ""
+ : "<" + Joiner.on(", ").join(parameterSignatures) + "> ";
+ }
+ }
+
+ private static final class TypeParameterSignature {
+ final String name;
+ final List<Type> bounds;
+
+ TypeParameterSignature(TypeVariable<?> typeParameter) {
+ name = typeParameter.getName();
+ bounds = Arrays.asList(typeParameter.getBounds());
+ }
+
+ @Override public boolean equals(Object obj) {
+ if (obj instanceof TypeParameterSignature) {
+ TypeParameterSignature other = (TypeParameterSignature) obj;
+ /*
+ * The name is here only for display purposes; <E extends Number> and <T
+ * extends Number> are equivalent.
+ */
+ return bounds.equals(other.bounds);
+ }
+
+ return false;
+ }
+
+ @Override public int hashCode() {
+ return bounds.hashCode();
+ }
+
+ @Override public String toString() {
+ return (bounds.equals(ImmutableList.of(Object.class)))
+ ? name
+ : name + " extends " + getTypesString(bounds);
+ }
+ }
+
+ private static String getTypesString(List<? extends Type> types) {
+ List<String> names = transform(types, SIMPLE_NAME_GETTER);
+ return Joiner.on(", ").join(names);
+ }
+
+ private static final Function<Type, String> SIMPLE_NAME_GETTER =
+ new Function<Type, String>() {
+ public String apply(Type from) {
+ if (from instanceof Class) {
+ return ((Class<?>) from).getSimpleName();
+ }
+ return from.toString();
+ }
+ };
+}
diff --git a/test/com/google/common/collect/ForMapMultimapAsMapImplementsMapTest.java b/test/com/google/common/collect/ForMapMultimapAsMapImplementsMapTest.java
new file mode 100644
index 0000000..469ced9
--- /dev/null
+++ b/test/com/google/common/collect/ForMapMultimapAsMapImplementsMapTest.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.testing.MapInterfaceTest;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Test {@link Multimap#asMap()} for a {@link Multimaps#forMap} multimap with
+ * {@link MapInterfaceTest}.
+ *
+ * @author Jared Levy
+ */
+public class ForMapMultimapAsMapImplementsMapTest
+ extends AbstractMultimapAsMapImplementsMapTest {
+
+ public ForMapMultimapAsMapImplementsMapTest() {
+ super(true, true);
+ }
+
+ @Override protected Map<String, Collection<Integer>> makeEmptyMap() {
+ Map<String, Integer> map = Maps.newHashMap();
+ return Multimaps.forMap(map).asMap();
+ }
+
+ @Override protected Map<String, Collection<Integer>> makePopulatedMap() {
+ Map<String, Integer> map = Maps.newHashMap();
+ map.put("foo", 1);
+ map.put("bar", 2);
+ map.put("cow", 3);
+ return Multimaps.forMap(map).asMap();
+ }
+}
diff --git a/test/com/google/common/collect/ForwardingCollectionTest.java b/test/com/google/common/collect/ForwardingCollectionTest.java
new file mode 100644
index 0000000..dda855f
--- /dev/null
+++ b/test/com/google/common/collect/ForwardingCollectionTest.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import java.util.Collection;
+import java.util.Collections;
+
+/**
+ * Tests for {@link ForwardingCollection}.
+ *
+ * @author Robert Konigsberg
+ * @author Hayward Chan
+ */
+public class ForwardingCollectionTest extends ForwardingTestCase {
+
+ private static final Collection<String> EMPTY_COLLECTION =
+ Collections.emptyList();
+
+ private Collection<String> forward;
+
+ @Override public void setUp() throws Exception {
+ super.setUp();
+ /*
+ * Class parameters must be raw, so we can't create a proxy with generic
+ * type arguments. The created proxy only records calls and returns null, so
+ * the type is irrelevant at runtime.
+ */
+ @SuppressWarnings("unchecked")
+ final Collection<String> list = createProxyInstance(Collection.class);
+ forward = new ForwardingCollection<String>() {
+ @Override protected Collection<String> delegate() {
+ return list;
+ }
+ };
+ }
+
+ public void testAdd_T() {
+ forward.add("asdf");
+ assertEquals("[add(Object)]", getCalls());
+ }
+
+ public void testAddAll_Collection() {
+ forward.addAll(EMPTY_COLLECTION);
+ assertEquals("[addAll(Collection)]", getCalls());
+ }
+
+ public void testClear() {
+ forward.clear();
+ assertEquals("[clear]", getCalls());
+ }
+
+ public void testContains_Object() {
+ forward.contains(null);
+ assertEquals("[contains(Object)]", getCalls());
+ }
+
+ public void testContainsAll_Collection() {
+ forward.containsAll(EMPTY_COLLECTION);
+ assertEquals("[containsAll(Collection)]", getCalls());
+ }
+
+ public void testIsEmpty() {
+ forward.isEmpty();
+ assertEquals("[isEmpty]", getCalls());
+ }
+
+ public void testIterator() {
+ forward.iterator();
+ assertEquals("[iterator]", getCalls());
+ }
+
+ public void testRemove_Object() {
+ forward.remove(null);
+ assertEquals("[remove(Object)]", getCalls());
+ }
+
+ public void testRemoveAll_Collection() {
+ forward.removeAll(EMPTY_COLLECTION);
+ assertEquals("[removeAll(Collection)]", getCalls());
+ }
+
+ public void testRetainAll_Collection() {
+ forward.retainAll(EMPTY_COLLECTION);
+ assertEquals("[retainAll(Collection)]", getCalls());
+ }
+
+ public void testSize() {
+ forward.size();
+ assertEquals("[size]", getCalls());
+ }
+
+ public void testToArray() {
+ forward.toArray();
+ assertEquals("[toArray]", getCalls());
+ }
+
+ public void testToArray_TArray() {
+ forward.toArray(new String[0]);
+ assertEquals("[toArray(Object[])]", getCalls());
+ }
+
+ public void testToString() {
+ forward.toString();
+ assertEquals("[toString]", getCalls());
+ }
+
+ public void testEquals_Object() {
+ forward.equals("asdf");
+ assertFalse("equals() should not be forwarded.", isCalled());
+ }
+
+ public void testHashCode() {
+ forward.hashCode();
+ assertFalse("hashCode() should not be forwarded.", isCalled());
+ }
+}
diff --git a/test/com/google/common/collect/ForwardingConcurrentMapTest.java b/test/com/google/common/collect/ForwardingConcurrentMapTest.java
new file mode 100644
index 0000000..4c7329a
--- /dev/null
+++ b/test/com/google/common/collect/ForwardingConcurrentMapTest.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import junit.framework.TestCase;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * Tests for {@link ForwardingConcurrentMap}.
+ *
+ * @author Jared Levy
+ */
+public class ForwardingConcurrentMapTest extends TestCase {
+
+ private static class TestMap
+ extends ForwardingConcurrentMap<String, Integer> {
+ final ConcurrentMap<String, Integer> delegate
+ = new ConcurrentHashMap<String, Integer>();
+ @Override protected ConcurrentMap<String, Integer> delegate() {
+ return delegate;
+ }
+ }
+
+ public void testPutIfAbsent() {
+ TestMap map = new TestMap();
+ map.put("foo", 1);
+ assertEquals(Integer.valueOf(1), map.putIfAbsent("foo", 2));
+ assertEquals(Integer.valueOf(1), map.get("foo"));
+ assertNull(map.putIfAbsent("bar", 3));
+ assertEquals(Integer.valueOf(3), map.get("bar"));
+ }
+
+ public void testRemove() {
+ TestMap map = new TestMap();
+ map.put("foo", 1);
+ assertFalse(map.remove("foo", 2));
+ assertFalse(map.remove("bar", 1));
+ assertEquals(Integer.valueOf(1), map.get("foo"));
+ assertTrue(map.remove("foo", 1));
+ assertTrue(map.isEmpty());
+ }
+
+ public void testReplace() {
+ TestMap map = new TestMap();
+ map.put("foo", 1);
+ assertEquals(Integer.valueOf(1), map.replace("foo", 2));
+ assertNull(map.replace("bar", 3));
+ assertEquals(Integer.valueOf(2), map.get("foo"));
+ assertFalse(map.containsKey("bar"));
+ }
+
+ public void testReplaceConditional() {
+ TestMap map = new TestMap();
+ map.put("foo", 1);
+ assertFalse(map.replace("foo", 2, 3));
+ assertFalse(map.replace("bar", 1, 2));
+ assertEquals(Integer.valueOf(1), map.get("foo"));
+ assertFalse(map.containsKey("bar"));
+ assertTrue(map.replace("foo", 1, 4));
+ assertEquals(Integer.valueOf(4), map.get("foo"));
+ }
+}
diff --git a/test/com/google/common/collect/ForwardingListIteratorTest.java b/test/com/google/common/collect/ForwardingListIteratorTest.java
new file mode 100644
index 0000000..63843d3
--- /dev/null
+++ b/test/com/google/common/collect/ForwardingListIteratorTest.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import java.util.ListIterator;
+
+/**
+ * Tests for {@code ForwardingListIterator}.
+ *
+ * @author Robert Konigsberg
+ */
+public class ForwardingListIteratorTest extends ForwardingTestCase {
+
+ private ForwardingListIterator<String> forward;
+
+ @Override public void setUp() throws Exception {
+ super.setUp();
+ /*
+ * Class parameters must be raw, so we can't create a proxy with generic
+ * type arguments. The created proxy only records calls and returns null, so
+ * the type is irrelevant at runtime.
+ */
+ @SuppressWarnings("unchecked")
+ final ListIterator<String> li = createProxyInstance(ListIterator.class);
+ forward = new ForwardingListIterator<String>() {
+ @Override protected ListIterator<String> delegate() {
+ return li;
+ }
+ };
+ }
+
+ public void testAdd_T() {
+ forward.add("asdf");
+ assertEquals("[add(Object)]", getCalls());
+ }
+
+ public void testHasNext() {
+ forward.hasNext();
+ assertEquals("[hasNext]", getCalls());
+ }
+
+ public void testHasPrevious() {
+ forward.hasPrevious();
+ assertEquals("[hasPrevious]", getCalls());
+ }
+
+ public void testNext() {
+ forward.next();
+ assertEquals("[next]", getCalls());
+ }
+
+ public void testNextIndex() {
+ forward.nextIndex();
+ assertEquals("[nextIndex]", getCalls());
+ }
+
+ public void testPrevious() {
+ forward.previous();
+ assertEquals("[previous]", getCalls());
+ }
+
+ public void testPreviousIndex() {
+ forward.previousIndex();
+ assertEquals("[previousIndex]", getCalls());
+ }
+
+ public void testRemove() {
+ forward.remove();
+ assertEquals("[remove]", getCalls());
+ }
+
+ public void testSet_T() {
+ forward.set("asdf");
+ assertEquals("[set(Object)]", getCalls());
+ }
+}
diff --git a/test/com/google/common/collect/ForwardingListTest.java b/test/com/google/common/collect/ForwardingListTest.java
new file mode 100644
index 0000000..cafabe4
--- /dev/null
+++ b/test/com/google/common/collect/ForwardingListTest.java
@@ -0,0 +1,183 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.RandomAccess;
+
+/**
+ * Tests for {@code ForwardingList}.
+ *
+ * @author Robert Konigsberg
+ */
+public class ForwardingListTest extends ForwardingTestCase {
+ private static final List<String> EMPTY_LIST =
+ Collections.<String> emptyList();
+
+ private List<String> forward;
+
+ @Override public void setUp() throws Exception {
+ super.setUp();
+ /*
+ * Class parameters must be raw, so we can't create a proxy with generic
+ * type arguments. The created proxy only records calls and returns null, so
+ * the type is irrelevant at runtime.
+ */
+ @SuppressWarnings("unchecked")
+ final List<String> list = createProxyInstance(List.class);
+ forward = new ForwardingList<String>() {
+ @Override protected List<String> delegate() {
+ return list;
+ }
+ };
+ }
+
+ public void testAdd_T() {
+ forward.add("asdf");
+ assertEquals("[add(Object)]", getCalls());
+ }
+
+ public void testAdd_int_T() {
+ forward.add(0, "asdf");
+ assertEquals("[add(int,Object)]", getCalls());
+ }
+
+ public void testAddAll_Collection() {
+ forward.addAll(EMPTY_LIST);
+ assertEquals("[addAll(Collection)]", getCalls());
+ }
+
+ public void testAddAll_int_Collection() {
+ forward.addAll(0, Collections.singleton("asdf"));
+ assertEquals("[addAll(int,Collection)]", getCalls());
+ }
+
+ public void testClear() {
+ forward.clear();
+ assertEquals("[clear]", getCalls());
+ }
+
+ public void testContains_Object() {
+ forward.contains(null);
+ assertEquals("[contains(Object)]", getCalls());
+ }
+
+ public void testContainsAll_Collection() {
+ forward.containsAll(EMPTY_LIST);
+ assertEquals("[containsAll(Collection)]", getCalls());
+ }
+
+ public void testGet_int() {
+ forward.get(0);
+ assertEquals("[get(int)]", getCalls());
+ }
+
+ public void testIndexOf_Object() {
+ forward.indexOf(null);
+ assertEquals("[indexOf(Object)]", getCalls());
+ }
+
+ public void testIsEmpty() {
+ forward.isEmpty();
+ assertEquals("[isEmpty]", getCalls());
+ }
+
+ public void testIterator() {
+ forward.iterator();
+ assertEquals("[iterator]", getCalls());
+ }
+
+ public void testLastIndexOf_Object() {
+ forward.lastIndexOf("asdf");
+ assertEquals("[lastIndexOf(Object)]", getCalls());
+ }
+
+ public void testListIterator() {
+ forward.listIterator();
+ assertEquals("[listIterator]", getCalls());
+ }
+
+ public void testListIterator_int() {
+ forward.listIterator(0);
+ assertEquals("[listIterator(int)]", getCalls());
+ }
+
+ public void testRemove_int() {
+ forward.remove(0);
+ assertEquals("[remove(int)]", getCalls());
+ }
+
+ public void testRemove_Object() {
+ forward.remove(null);
+ assertEquals("[remove(Object)]", getCalls());
+ }
+
+ public void testRemoveAll_Collection() {
+ forward.removeAll(EMPTY_LIST);
+ assertEquals("[removeAll(Collection)]", getCalls());
+ }
+
+ public void testRetainAll_Collection() {
+ forward.retainAll(EMPTY_LIST);
+ assertEquals("[retainAll(Collection)]", getCalls());
+ }
+
+ public void testSet_int_T() {
+ forward.set(0, "asdf");
+ assertEquals("[set(int,Object)]", getCalls());
+ }
+
+ public void testSize() {
+ forward.size();
+ assertEquals("[size]", getCalls());
+ }
+
+ public void testSubList_int_int() {
+ forward.subList(0, 1);
+ assertEquals("[subList(int,int)]", getCalls());
+ }
+
+ public void testToArray() {
+ forward.toArray();
+ assertEquals("[toArray]", getCalls());
+ }
+
+ public void testToArray_TArray() {
+ forward.toArray(new String[0]);
+ assertEquals("[toArray(Object[])]", getCalls());
+ }
+
+ public void testEquals_Object() {
+ forward.equals("asdf");
+ assertEquals("[equals(Object)]", getCalls());
+ }
+
+ public void testHashCode() {
+ forward.hashCode();
+ assertEquals("[hashCode]", getCalls());
+ }
+
+ public void testRandomAccess() {
+ assertFalse(forward instanceof RandomAccess);
+ }
+
+ public void testToString() {
+ forward.toString();
+ assertEquals("[toString]", getCalls());
+ }
+}
diff --git a/test/com/google/common/collect/ForwardingMapTest.java b/test/com/google/common/collect/ForwardingMapTest.java
new file mode 100644
index 0000000..3d81212
--- /dev/null
+++ b/test/com/google/common/collect/ForwardingMapTest.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Unit test for {@link ForwardingMap}.
+ *
+ * @author Hayward Chan
+ */
+public class ForwardingMapTest extends ForwardingTestCase {
+
+ private static final Collection<String> EMPTY_COLLECTION =
+ Collections.emptyList();
+
+ private Map<String, Boolean> forward;
+
+ @Override public void setUp() throws Exception {
+ super.setUp();
+ /*
+ * Class parameters must be raw, so we can't create a proxy with generic
+ * type arguments. The created proxy only records calls and returns null, so
+ * the type is irrelevant at runtime.
+ */
+ @SuppressWarnings("unchecked")
+ final Map<String, Boolean> map = createProxyInstance(Map.class);
+ forward = new ForwardingMap<String, Boolean>() {
+ @Override protected Map<String, Boolean> delegate() {
+ return map;
+ }
+ };
+ }
+
+ public void testSize() {
+ forward.size();
+ assertEquals("[size]", getCalls());
+ }
+
+ public void testIsEmpty() {
+ forward.isEmpty();
+ assertEquals("[isEmpty]", getCalls());
+ }
+
+ public void testRemove() {
+ forward.remove(null);
+ assertEquals("[remove(Object)]", getCalls());
+ }
+
+ public void testClear() {
+ forward.clear();
+ assertEquals("[clear]", getCalls());
+ }
+
+ public void testContainsKey() {
+ forward.containsKey("asdf");
+ assertEquals("[containsKey(Object)]", getCalls());
+ }
+
+ public void testContainsValue() {
+ forward.containsValue(false);
+ assertEquals("[containsValue(Object)]", getCalls());
+ }
+
+ public void testGet_Object() {
+ forward.get("asdf");
+ assertEquals("[get(Object)]", getCalls());
+ }
+
+ public void testPut_Key_Value() {
+ forward.put("key", false);
+ assertEquals("[put(Object,Object)]", getCalls());
+ }
+
+ public void testPutAll_Map() {
+ forward.putAll(new HashMap<String, Boolean>());
+ assertEquals("[putAll(Map)]", getCalls());
+ }
+
+ public void testKeySet() {
+ forward.keySet();
+ assertEquals("[keySet]", getCalls());
+ }
+
+ public void testValues() {
+ forward.values();
+ assertEquals("[values]", getCalls());
+ }
+
+ public void testEntrySet() {
+ forward.entrySet();
+ assertEquals("[entrySet]", getCalls());
+ }
+
+ public void testToString() {
+ forward.toString();
+ assertEquals("[toString]", getCalls());
+ }
+
+ public void testEquals_Object() {
+ forward.equals("asdf");
+ assertEquals("[equals(Object)]", getCalls());
+ }
+
+ public void testHashCode() {
+ forward.hashCode();
+ assertEquals("[hashCode]", getCalls());
+ }
+}
diff --git a/test/com/google/common/collect/ForwardingMultimapTest.java b/test/com/google/common/collect/ForwardingMultimapTest.java
new file mode 100644
index 0000000..7af4c4d
--- /dev/null
+++ b/test/com/google/common/collect/ForwardingMultimapTest.java
@@ -0,0 +1,154 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import java.util.Collection;
+import java.util.Collections;
+
+/**
+ * Unit test for {@link ForwardingMultimap}.
+ *
+ * @author hhchan@google.com (Hayward Chan)
+ */
+public class ForwardingMultimapTest extends ForwardingTestCase {
+
+ private static final Collection<String> EMPTY_COLLECTION =
+ Collections.emptyList();
+
+ private Multimap<String, Boolean> forward;
+
+ @Override public void setUp() throws Exception {
+ super.setUp();
+ /*
+ * Class parameters must be raw, so we can't create a proxy with generic
+ * type arguments. The created proxy only records calls and returns null, so
+ * the type is irrelevant at runtime.
+ */
+ @SuppressWarnings("unchecked")
+ final Multimap<String, Boolean> list = createProxyInstance(Multimap.class);
+ forward = new ForwardingMultimap<String, Boolean>() {
+ @Override protected Multimap<String, Boolean> delegate() {
+ return list;
+ }
+ };
+ }
+
+ public void testSize() {
+ forward.size();
+ assertEquals("[size]", getCalls());
+ }
+
+ public void testIsEmpty() {
+ forward.isEmpty();
+ assertEquals("[isEmpty]", getCalls());
+ }
+
+ public void testContainsKey_Object() {
+ forward.containsKey("asdf");
+ assertEquals("[containsKey(Object)]", getCalls());
+ }
+
+ public void testContainsValue_Object() {
+ forward.containsValue("asdf");
+ assertEquals("[containsValue(Object)]", getCalls());
+ }
+
+ public void testContainsEntry_Object_Object() {
+ forward.containsEntry("asdf", false);
+ assertEquals("[containsEntry(Object,Object)]", getCalls());
+ }
+
+ public void testPut_Key_Value() {
+ forward.put("asdf", true);
+ assertEquals("[put(Object,Object)]", getCalls());
+ }
+
+ public void testRemove_Key_Value() {
+ forward.remove("asdf", false);
+ assertEquals("[remove(Object,Object)]", getCalls());
+ }
+
+ public void testPutAll_Key_Iterable() {
+ forward.remove("asfd", Collections.<Boolean>emptyList());
+ assertEquals("[remove(Object,Object)]", getCalls());
+ }
+
+ public void testPutAll_Multimap() {
+ forward.putAll(new ArrayListMultimap<String, Boolean>());
+ assertEquals("[putAll(Multimap)]", getCalls());
+ }
+
+ public void testReplaceValues_Key_Iterable() {
+ forward.replaceValues("key", Collections.<Boolean>emptyList());
+ assertEquals("[replaceValues(Object,Iterable)]", getCalls());
+ }
+
+ public void testRemoveAll_Object() {
+ forward.removeAll("key");
+ assertEquals("[removeAll(Object)]", getCalls());
+ }
+
+ public void testClear() {
+ forward.clear();
+ assertEquals("[clear]", getCalls());
+ }
+
+ public void testGet_Key() {
+ forward.get(null);
+ assertEquals("[get(Object)]", getCalls());
+ }
+
+ public void testKeySet() {
+ forward.keySet();
+ assertEquals("[keySet]", getCalls());
+ }
+
+ public void testKeys() {
+ forward.keys();
+ assertEquals("[keys]", getCalls());
+ }
+
+ public void testValues() {
+ forward.values();
+ assertEquals("[values]", getCalls());
+ }
+
+ public void testEntries() {
+ forward.entries();
+ assertEquals("[entries]", getCalls());
+ }
+
+ public void testAsMap() {
+ forward.asMap();
+ assertEquals("[asMap]", getCalls());
+ }
+
+ public void testEquals() {
+ forward.equals(null);
+ assertEquals("[equals(Object)]", getCalls());
+ }
+
+ public void testHashCode() {
+ forward.hashCode();
+ assertEquals("[hashCode]", getCalls());
+ }
+
+ public void testToString() {
+ forward.toString();
+ assertEquals("[toString]", getCalls());
+ }
+}
diff --git a/test/com/google/common/collect/ForwardingMultisetTest.java b/test/com/google/common/collect/ForwardingMultisetTest.java
new file mode 100644
index 0000000..cf3b150
--- /dev/null
+++ b/test/com/google/common/collect/ForwardingMultisetTest.java
@@ -0,0 +1,164 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import java.util.Collection;
+import java.util.Collections;
+
+/**
+ * Tests for {@link ForwardingMultiset}.
+ *
+ * @author hhchan@google.com (Hayward Chan)
+ */
+public class ForwardingMultisetTest extends ForwardingTestCase {
+
+ private static final Collection<String> EMPTY_COLLECTION =
+ Collections.emptyList();
+
+ private Multiset<String> forward;
+
+ @Override public void setUp() throws Exception {
+ super.setUp();
+ /*
+ * Class parameters must be raw, so we can't create a proxy with generic
+ * type arguments. The created proxy only records calls and returns null, so
+ * the type is irrelevant at runtime.
+ */
+ @SuppressWarnings("unchecked")
+ final Multiset<String> multiset = createProxyInstance(Multiset.class);
+ forward = new ForwardingMultiset<String>() {
+ @Override protected Multiset<String> delegate() {
+ return multiset;
+ }
+ };
+ }
+
+ public void testAdd_T() {
+ forward.add("asdf");
+ assertEquals("[add(Object)]", getCalls());
+ }
+
+ public void testAddAll_Collection() {
+ forward.addAll(EMPTY_COLLECTION);
+ assertEquals("[addAll(Collection)]", getCalls());
+ }
+
+ public void testClear() {
+ forward.clear();
+ assertEquals("[clear]", getCalls());
+ }
+
+ public void testContains_Object() {
+ forward.contains(null);
+ assertEquals("[contains(Object)]", getCalls());
+ }
+
+ public void testContainsAll_Collection() {
+ forward.containsAll(EMPTY_COLLECTION);
+ assertEquals("[containsAll(Collection)]", getCalls());
+ }
+
+ public void testIsEmpty() {
+ forward.isEmpty();
+ assertEquals("[isEmpty]", getCalls());
+ }
+
+ public void testIterator() {
+ forward.iterator();
+ assertEquals("[iterator]", getCalls());
+ }
+
+ public void testRemove_Object() {
+ forward.remove(null);
+ assertEquals("[remove(Object)]", getCalls());
+ }
+
+ public void testRemoveAll_Collection() {
+ forward.removeAll(EMPTY_COLLECTION);
+ assertEquals("[removeAll(Collection)]", getCalls());
+ }
+
+ public void testRetainAll_Collection() {
+ forward.retainAll(EMPTY_COLLECTION);
+ assertEquals("[retainAll(Collection)]", getCalls());
+ }
+
+ public void testSize() {
+ forward.size();
+ assertEquals("[size]", getCalls());
+ }
+
+ public void testToArray() {
+ forward.toArray();
+ assertEquals("[toArray]", getCalls());
+ }
+
+ public void testToArray_TArray() {
+ forward.toArray(new String[0]);
+ assertEquals("[toArray(Object[])]", getCalls());
+ }
+
+ public void testToString() {
+ forward.toString();
+ assertEquals("[toString]", getCalls());
+ }
+
+ public void testEquals_Object() {
+ forward.equals("asdf");
+ assertEquals("[equals(Object)]", getCalls());
+ }
+
+ public void testHashCode() {
+ forward.hashCode();
+ assertEquals("[hashCode]", getCalls());
+ }
+
+ public void testCount_Object() {
+ forward.count(null);
+ assertEquals("[count(Object)]", getCalls());
+ }
+
+ public void testAdd_Object_int() {
+ forward.add("asd", 23);
+ assertEquals("[add(Object,int)]", getCalls());
+ }
+
+ public void testRemove_Object_int() {
+ forward.remove("asd", 23);
+ assertEquals("[remove(Object,int)]", getCalls());
+ }
+
+ public void testSetCount_Object_int() {
+ forward.setCount("asdf", 233);
+ assertEquals("[setCount(Object,int)]", getCalls());
+ }
+
+ public void testSetCount_Object_oldCount_newCount() {
+ forward.setCount("asdf", 4552, 1233);
+ assertEquals("[setCount(Object,int,int)]", getCalls());
+ }
+
+ public void testElementSet() {
+ forward.elementSet();
+ assertEquals("[elementSet]", getCalls());
+ }
+
+ public void testEntrySet() {
+ forward.entrySet();
+ assertEquals("[entrySet]", getCalls());
+ }
+}
diff --git a/test/com/google/common/collect/ForwardingObjectTest.java b/test/com/google/common/collect/ForwardingObjectTest.java
new file mode 100644
index 0000000..ea801c8
--- /dev/null
+++ b/test/com/google/common/collect/ForwardingObjectTest.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import junit.framework.TestCase;
+
+import java.util.Set;
+
+/**
+ * Tests for {@code ForwardingObject}.
+ *
+ * @author Mike Bostock
+ */
+public class ForwardingObjectTest extends TestCase {
+
+ public void testEqualsReflexive() {
+ final Object delegate = new Object();
+ ForwardingObject forward = new ForwardingObject() {
+ @Override protected Object delegate() {
+ return delegate;
+ }
+ };
+ assertTrue(forward.equals(forward));
+ }
+
+ public void testEqualsSymmetric() {
+ final Set<String> delegate = Sets.newHashSet("foo");
+ ForwardingObject forward = new ForwardingObject() {
+ @Override protected Object delegate() {
+ return delegate;
+ }
+ };
+ assertEquals(forward.equals(delegate), delegate.equals(forward));
+ }
+}
diff --git a/test/com/google/common/collect/ForwardingQueueTest.java b/test/com/google/common/collect/ForwardingQueueTest.java
new file mode 100644
index 0000000..c4a5705
--- /dev/null
+++ b/test/com/google/common/collect/ForwardingQueueTest.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import java.util.Collections;
+import java.util.Queue;
+
+/**
+ * Tests for {@code ForwardingQueue}.
+ *
+ * @author Robert Konigsberg
+ */
+public class ForwardingQueueTest extends ForwardingTestCase {
+
+ private Queue<String> forward;
+ private Queue<String> queue;
+
+ /*
+ * Class parameters must be raw, so we can't create a proxy with generic
+ * type arguments. The created proxy only records calls and returns null, so
+ * the type is irrelevant at runtime.
+ */
+ @SuppressWarnings("unchecked")
+ @Override protected void setUp() throws Exception {
+ super.setUp();
+ queue = createProxyInstance(Queue.class);
+ forward = new ForwardingQueue<String>() {
+ @Override protected Queue<String> delegate() {
+ return queue;
+ }
+ };
+ }
+
+ public void testAdd_T() {
+ forward.add("asdf");
+ assertEquals("[add(Object)]", getCalls());
+ }
+
+ public void testAddAll_Collection() {
+ forward.addAll(Collections.singleton("asdf"));
+ assertEquals("[addAll(Collection)]", getCalls());
+ }
+
+ public void testClear() {
+ forward.clear();
+ assertEquals("[clear]", getCalls());
+ }
+
+ public void testContains_T() {
+ forward.contains("asdf");
+ assertEquals("[contains(Object)]", getCalls());
+ }
+
+ public void testContainsAll_Collection() {
+ forward.containsAll(Collections.singleton("asdf"));
+ assertEquals("[containsAll(Collection)]", getCalls());
+ }
+
+ public void testElement() {
+ forward.element();
+ assertEquals("[element]", getCalls());
+ }
+
+ public void testIterator() {
+ forward.iterator();
+ assertEquals("[iterator]", getCalls());
+ }
+
+ public void testIsEmpty() {
+ forward.isEmpty();
+ assertEquals("[isEmpty]", getCalls());
+ }
+
+ public void testOffer_T() {
+ forward.offer("asdf");
+ assertEquals("[offer(Object)]", getCalls());
+ }
+
+ public void testPeek() {
+ forward.peek();
+ assertEquals("[peek]", getCalls());
+ }
+
+ public void testPoll() {
+ forward.poll();
+ assertEquals("[poll]", getCalls());
+ }
+
+ public void testRemove() {
+ forward.remove();
+ assertEquals("[remove]", getCalls());
+ }
+
+ public void testRemove_Object() {
+ forward.remove(Object.class);
+ assertEquals("[remove(Object)]", getCalls());
+ }
+
+ public void testRemoveAll_Collection() {
+ forward.removeAll(Collections.singleton("asdf"));
+ assertEquals("[removeAll(Collection)]", getCalls());
+ }
+
+ public void testRetainAll_Collection() {
+ forward.retainAll(Collections.singleton("asdf"));
+ assertEquals("[retainAll(Collection)]", getCalls());
+ }
+
+ public void testSize() {
+ forward.size();
+ assertEquals("[size]", getCalls());
+ }
+
+ public void testToArray() {
+ forward.toArray();
+ assertEquals("[toArray]", getCalls());
+ }
+
+ public void testToArray_TArray() {
+ forward.toArray(new String[0]);
+ assertEquals("[toArray(Object[])]", getCalls());
+ }
+
+ public void testToString() {
+ forward.toString();
+ assertEquals("[toString]", getCalls());
+ }
+}
diff --git a/test/com/google/common/collect/ForwardingSetTest.java b/test/com/google/common/collect/ForwardingSetTest.java
new file mode 100644
index 0000000..cfb11ad
--- /dev/null
+++ b/test/com/google/common/collect/ForwardingSetTest.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Tests for {@code ForwardingSet}.
+ *
+ * @author Robert Konigsberg
+ */
+public class ForwardingSetTest extends ForwardingTestCase {
+ private static final List<String> EMPTY_LIST =
+ Collections.<String> emptyList();
+
+ private Set<String> forward;
+
+ @Override public void setUp() throws Exception {
+ super.setUp();
+ /*
+ * Class parameters must be raw, so we can't create a proxy with generic
+ * type arguments. The created proxy only records calls and returns null, so
+ * the type is irrelevant at runtime.
+ */
+ @SuppressWarnings("unchecked")
+ final Set<String> set = createProxyInstance(Set.class);
+ forward = new ForwardingSet<String>() {
+ @Override protected Set<String> delegate() {
+ return set;
+ }
+ };
+ }
+
+ public void testAdd_T() {
+ forward.add("asdf");
+ assertEquals("[add(Object)]", getCalls());
+ }
+
+ public void testAddAll_Collection() {
+ forward.addAll(EMPTY_LIST);
+ assertEquals("[addAll(Collection)]", getCalls());
+ }
+
+ public void testClear() {
+ forward.clear();
+ assertEquals("[clear]", getCalls());
+ }
+
+ public void testContains_Object() {
+ forward.contains(null);
+ assertEquals("[contains(Object)]", getCalls());
+ }
+
+ public void testContainsAll_Collection() {
+ forward.containsAll(EMPTY_LIST);
+ assertEquals("[containsAll(Collection)]", getCalls());
+ }
+
+ public void testIsEmpty() {
+ forward.isEmpty();
+ assertEquals("[isEmpty]", getCalls());
+ }
+
+ public void testIterator() {
+ forward.iterator();
+ assertEquals("[iterator]", getCalls());
+ }
+
+ public void testRemove_Object() {
+ forward.remove(null);
+ assertEquals("[remove(Object)]", getCalls());
+ }
+
+ public void testRemoveAll_Collection() {
+ forward.removeAll(EMPTY_LIST);
+ assertEquals("[removeAll(Collection)]", getCalls());
+ }
+
+ public void testRetainAll_Collection() {
+ forward.retainAll(EMPTY_LIST);
+ assertEquals("[retainAll(Collection)]", getCalls());
+ }
+
+ public void testSize() {
+ forward.size();
+ assertEquals("[size]", getCalls());
+ }
+
+ public void testToArray() {
+ forward.toArray();
+ assertEquals("[toArray]", getCalls());
+ }
+
+ public void testToArray_TArray() {
+ forward.toArray(new String[0]);
+ assertEquals("[toArray(Object[])]", getCalls());
+ }
+
+ public void testToString() {
+ forward.toString();
+ assertEquals("[toString]", getCalls());
+ }
+}
diff --git a/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java b/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java
new file mode 100644
index 0000000..117db40
--- /dev/null
+++ b/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.testing.MapInterfaceTest;
+
+import java.util.Map;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+/**
+ * Tests for {@link ForwardingSortedMap} using {@link MapInterfaceTest}.
+ *
+ * @author George van den Driessche
+ */
+public class ForwardingSortedMapImplementsMapTest
+ extends MapInterfaceTest<String, Integer> {
+
+ private static class SimpleForwardingSortedMap<K, V>
+ extends ForwardingSortedMap<K, V> {
+ final SortedMap<K, V> delegate;
+ SimpleForwardingSortedMap(SortedMap<K, V> delegate) {
+ this.delegate = delegate;
+ }
+ @Override protected SortedMap<K, V> delegate() {
+ return delegate;
+ }
+ }
+
+ public ForwardingSortedMapImplementsMapTest() {
+ super(true, true, true, true, true);
+ }
+
+ @Override protected Map<String, Integer> makeEmptyMap() {
+ return new SimpleForwardingSortedMap<String, Integer>(
+ new TreeMap<String, Integer>(Ordering.natural().nullsFirst()));
+ }
+
+ @Override protected Map<String, Integer> makePopulatedMap() {
+ final Map<String, Integer> sortedMap = makeEmptyMap();
+ sortedMap.put("one", 1);
+ sortedMap.put("two", 2);
+ sortedMap.put("three", 3);
+ return sortedMap;
+ }
+
+ @Override protected String getKeyNotInPopulatedMap()
+ throws UnsupportedOperationException {
+ return "minus one";
+ }
+
+ @Override protected Integer getValueNotInPopulatedMap()
+ throws UnsupportedOperationException {
+ return -1;
+ }
+}
diff --git a/test/com/google/common/collect/ForwardingSortedMapTest.java b/test/com/google/common/collect/ForwardingSortedMapTest.java
new file mode 100644
index 0000000..05b19b8
--- /dev/null
+++ b/test/com/google/common/collect/ForwardingSortedMapTest.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import java.util.Collections;
+import java.util.SortedMap;
+
+/**
+ * Tests for {@code ForwardingSortedMap}.
+ *
+ * @author Robert Konigsberg
+ */
+public class ForwardingSortedMapTest extends ForwardingTestCase {
+
+ private SortedMap<String, String> forward;
+
+ @Override public void setUp() throws Exception {
+ super.setUp();
+ /*
+ * Class parameters must be raw, so we can't create a proxy with generic
+ * type arguments. The created proxy only records calls and returns null, so
+ * the type is irrelevant at runtime.
+ */
+ @SuppressWarnings("unchecked")
+ final SortedMap<String, String> sortedMap
+ = createProxyInstance(SortedMap.class);
+ forward = new ForwardingSortedMap<String, String>() {
+ @Override protected SortedMap<String, String> delegate() {
+ return sortedMap;
+ }
+ };
+ }
+
+ public void testComparator() {
+ forward.comparator();
+ assertEquals("[comparator]", getCalls());
+ }
+
+ public void testFirstKey() {
+ forward.firstKey();
+ assertEquals("[firstKey]", getCalls());
+ }
+
+ public void testHeadMap_K() {
+ forward.headMap("asdf");
+ assertEquals("[headMap(Object)]", getCalls());
+ }
+
+ public void testLastKey() {
+ forward.lastKey();
+ assertEquals("[lastKey]", getCalls());
+ }
+
+ public void testSubMap_K_K() {
+ forward.subMap("first", "last");
+ assertEquals("[subMap(Object,Object)]", getCalls());
+ }
+
+ public void testTailMap_K() {
+ forward.tailMap("last");
+ assertEquals("[tailMap(Object)]", getCalls());
+ }
+
+ public void testClear() {
+ forward.clear();
+ assertEquals("[clear]", getCalls());
+ }
+
+ public void testContainsKey_Object() {
+ forward.containsKey(Object.class);
+ assertEquals("[containsKey(Object)]", getCalls());
+ }
+
+ public void testContainsValue_Object() {
+ forward.containsValue(Object.class);
+ assertEquals("[containsValue(Object)]", getCalls());
+ }
+
+ public void testEntrySet() {
+ forward.entrySet();
+ assertEquals("[entrySet]", getCalls());
+ }
+
+ public void testGet_Object() {
+ forward.get(Object.class);
+ assertEquals("[get(Object)]", getCalls());
+ }
+
+ public void testIsEmpty() {
+ forward.isEmpty();
+ assertEquals("[isEmpty]", getCalls());
+ }
+
+ public void testKeySet() {
+ forward.keySet();
+ assertEquals("[keySet]", getCalls());
+ }
+
+ public void testPut_K_V() {
+ forward.put("foo", "bar");
+ assertEquals("[put(Object,Object)]", getCalls());
+ }
+
+ public void testPutAll_Map() {
+ forward.putAll(Collections.<String, String>emptyMap());
+ assertEquals("[putAll(Map)]", getCalls());
+ }
+
+ public void testRemove_Object() {
+ forward.remove(Object.class);
+ assertEquals("[remove(Object)]", getCalls());
+ }
+
+ public void testSize() {
+ forward.size();
+ assertEquals("[size]", getCalls());
+ }
+
+ public void testValues() {
+ forward.values();
+ assertEquals("[values]", getCalls());
+ }
+
+ public void testToString() {
+ forward.toString();
+ assertEquals("[toString]", getCalls());
+ }
+}
diff --git a/test/com/google/common/collect/ForwardingTestCase.java b/test/com/google/common/collect/ForwardingTestCase.java
new file mode 100644
index 0000000..aa141af
--- /dev/null
+++ b/test/com/google/common/collect/ForwardingTestCase.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+
+import junit.framework.TestCase;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Base test case for testing the variety of forwarding classes.
+ *
+ * @author Robert Konigsberg
+ */
+public abstract class ForwardingTestCase extends TestCase {
+
+ private List<String> calls = new ArrayList<String>();
+
+ private void called(String id) {
+ calls.add(id);
+ }
+
+ protected String getCalls() {
+ return calls.toString();
+ }
+
+ protected boolean isCalled() {
+ return !calls.isEmpty();
+ }
+
+ @SuppressWarnings("unchecked")
+ protected <T> T createProxyInstance(Class<T> c) {
+ /*
+ * This invocation handler only registers that a method was called,
+ * and then returns a bogus, but acceptable, value.
+ */
+ InvocationHandler handler = new InvocationHandler() {
+ public Object invoke(Object proxy, Method method, Object[] args)
+ throws Throwable {
+ called(asString(method));
+
+ Class<?> returnType = method.getReturnType();
+
+ if (returnType == boolean.class || returnType == Boolean.class) {
+ return Boolean.FALSE;
+ }
+
+ if (returnType == int.class || returnType == Integer.class) {
+ return -1;
+ }
+
+ if ((returnType == Set.class) || (returnType == Collection.class)) {
+ return Collections.emptySet();
+ }
+
+ return null;
+ }
+ };
+
+ return (T) Proxy.newProxyInstance(c.getClassLoader(),
+ new Class[] { c }, handler);
+ }
+
+ private static final Joiner COMMA_JOINER = Joiner.on(",");
+
+ /*
+ * Returns string representation of a method.
+ *
+ * If the method takes no parameters, it returns the name (e.g.
+ * "isEmpty". If the method takes parameters, it returns the simple names
+ * of the parameters (e.g. "put(Object,Object)".)
+ */
+ private String asString(Method method) {
+ String methodName = method.getName();
+ Class<?>[] parameterTypes = method.getParameterTypes();
+
+ if (parameterTypes.length == 0) {
+ return methodName;
+ }
+
+ Iterable<String> parameterNames = Iterables.transform(
+ Arrays.asList(parameterTypes),
+ new Function<Class<?>, String>() {
+ public String apply(Class<?> from) {
+ return from.getSimpleName();
+ }
+ });
+ return methodName + "(" + COMMA_JOINER.join(parameterNames) + ")";
+ }
+}
diff --git a/test/com/google/common/collect/HashBiMapTest.java b/test/com/google/common/collect/HashBiMapTest.java
new file mode 100644
index 0000000..48b4224
--- /dev/null
+++ b/test/com/google/common/collect/HashBiMapTest.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import java.util.IdentityHashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+/**
+ * Tests for {@link HashBiMap}.
+ *
+ * @author Mike Bostock
+ */
+public class HashBiMapTest extends AbstractBiMapTest {
+
+ @Override protected BiMap<Integer, String> create() {
+ return HashBiMap.create();
+ }
+
+ public void testCreate() {
+ BiMap<String, String> bimap = HashBiMap.create();
+ assertEquals(0, bimap.size());
+ bimap.put("canada", "dollar");
+ assertEquals("dollar", bimap.get("canada"));
+ assertEquals("canada", bimap.inverse().get("dollar"));
+ }
+
+ public void testMapConstructor() {
+ /* Test with non-empty Map. */
+ Map<String, String> map = ImmutableMap.of(
+ "canada", "dollar",
+ "chile", "peso",
+ "switzerland", "franc");
+ @SuppressWarnings("hiding")
+ HashBiMap<String, String> bimap = HashBiMap.create(map);
+ assertEquals("dollar", bimap.get("canada"));
+ assertEquals("canada", bimap.inverse().get("dollar"));
+ }
+
+ private static final int N = 1000;
+
+ public void testBashIt() throws Exception {
+ @SuppressWarnings("hiding")
+ BiMap<Integer,Integer> bimap = HashBiMap.create(N);
+ BiMap<Integer,Integer> inverse = bimap.inverse();
+
+ for (int i = 0; i < N; i++) {
+ assertNull(bimap.put(2 * i, 2 * i + 1));
+ }
+ for (int i = 0; i < N; i++) {
+ assertEquals(2 * i + 1, (int) bimap.get(2 * i));
+ }
+ for (int i = 0; i < N; i++) {
+ assertEquals(2 * i, (int) inverse.get(2 * i + 1));
+ }
+ for (int i = 0; i < N; i++) {
+ int oldValue = bimap.get(2 * i);
+ assertEquals(2 * i + 1, (int) bimap.put(2 * i, oldValue - 2));
+ }
+ for (int i = 0; i < N; i++) {
+ assertEquals(2 * i - 1, (int) bimap.get(2 * i));
+ }
+ for (int i = 0; i < N; i++) {
+ assertEquals(2 * i, (int) inverse.get(2 * i - 1));
+ }
+ Set<Entry<Integer, Integer>> entries = bimap.entrySet();
+ for (Entry<Integer, Integer> entry : entries) {
+ entry.setValue(entry.getValue() + 2 * N);
+ }
+ for (int i = 0; i < N; i++) {
+ assertEquals(2 * N + 2 * i - 1, (int) bimap.get(2 * i));
+ }
+ }
+
+ // The next two tests verify that map entries are not accessed after they're
+ // removed, since IdentityHashMap throws an exception when that occurs.
+
+ public void testIdentityKeySetIteratorRemove() {
+ bimap = new AbstractBiMap<Integer, String>(
+ new IdentityHashMap<Integer, String>(),
+ new IdentityHashMap<String, Integer>()) {};
+ putOneTwoThree();
+ Iterator<Integer> iterator = bimap.keySet().iterator();
+ iterator.next();
+ iterator.next();
+ iterator.remove();
+ iterator.next();
+ iterator.remove();
+ assertEquals(1, bimap.size());
+ assertEquals(1, bimap.inverse().size());
+ }
+
+ public void testIdentityEntrySetIteratorRemove() {
+ bimap = new AbstractBiMap<Integer, String>(
+ new IdentityHashMap<Integer, String>(),
+ new IdentityHashMap<String, Integer>()) {};
+ putOneTwoThree();
+ Iterator<Entry<Integer, String>> iterator = bimap.entrySet().iterator();
+ iterator.next();
+ iterator.next();
+ iterator.remove();
+ iterator.next();
+ iterator.remove();
+ assertEquals(1, bimap.size());
+ assertEquals(1, bimap.inverse().size());
+ }
+}
diff --git a/test/com/google/common/collect/HashMultimapTest.java b/test/com/google/common/collect/HashMultimapTest.java
new file mode 100644
index 0000000..b38d798
--- /dev/null
+++ b/test/com/google/common/collect/HashMultimapTest.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+/**
+ * Unit tests for {@link HashMultimap}.
+ *
+ * @author Jared Levy
+ */
+public class HashMultimapTest extends AbstractSetMultimapTest {
+ @Override protected Multimap<String, Integer> create() {
+ return HashMultimap.create();
+ }
+
+ /*
+ * The behavior of toString() is tested by TreeMultimap, which shares a
+ * lot of code with HashMultimap and has deterministic iteration order.
+ */
+
+ public void testCreate() {
+ HashMultimap<String, Integer> multimap = HashMultimap.create();
+ multimap.put("foo", 1);
+ multimap.put("bar", 2);
+ multimap.put("foo", 3);
+ assertEquals(ImmutableSet.of(1, 3), multimap.get("foo"));
+ assertEquals(8, multimap.expectedValuesPerKey);
+ }
+
+ public void testCreateFromMultimap() {
+ Multimap<String, Integer> multimap = createSample();
+ HashMultimap<String, Integer> copy = HashMultimap.create(multimap);
+ assertEquals(multimap, copy);
+ assertEquals(8, copy.expectedValuesPerKey);
+ }
+
+ public void testCreateFromSizes() {
+ HashMultimap<String, Integer> multimap = HashMultimap.create(20, 15);
+ multimap.put("foo", 1);
+ multimap.put("bar", 2);
+ multimap.put("foo", 3);
+ assertEquals(ImmutableSet.of(1, 3), multimap.get("foo"));
+ assertEquals(15, multimap.expectedValuesPerKey);
+ }
+
+ public void testCreateFromIllegalSizes() {
+ try {
+ HashMultimap.create(-20, 15);
+ fail();
+ } catch (IllegalArgumentException expected) {}
+
+ try {
+ HashMultimap.create(20, -15);
+ fail();
+ } catch (IllegalArgumentException expected) {}
+ }
+
+ public void testEmptyMultimapsEqual() {
+ Multimap<String, Integer> setMultimap = HashMultimap.create();
+ Multimap<String, Integer> listMultimap = ArrayListMultimap.create();
+ assertTrue(setMultimap.equals(listMultimap));
+ assertTrue(listMultimap.equals(setMultimap));
+ }
+}
diff --git a/test/com/google/common/collect/HashMultisetTest.java b/test/com/google/common/collect/HashMultisetTest.java
new file mode 100644
index 0000000..e18e43f
--- /dev/null
+++ b/test/com/google/common/collect/HashMultisetTest.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.testutils.SerializableTester;
+
+import java.io.Serializable;
+import java.util.Arrays;
+
+/**
+ * Unit test for {@link HashMultiset}.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ */
+public class HashMultisetTest extends AbstractMultisetTest {
+ @Override protected <E> Multiset<E> create() {
+ return HashMultiset.create();
+ }
+
+ public void testCreate() {
+ Multiset<String> multiset = HashMultiset.create();
+ multiset.add("foo", 2);
+ multiset.add("bar");
+ assertEquals(3, multiset.size());
+ assertEquals(2, multiset.count("foo"));
+ }
+
+ public void testCreateWithSize() {
+ Multiset<String> multiset = HashMultiset.create(50);
+ multiset.add("foo", 2);
+ multiset.add("bar");
+ assertEquals(3, multiset.size());
+ assertEquals(2, multiset.count("foo"));
+ }
+
+ public void testCreateFromIterable() {
+ Multiset<String> multiset
+ = HashMultiset.create(Arrays.asList("foo", "bar", "foo"));
+ assertEquals(3, multiset.size());
+ assertEquals(2, multiset.count("foo"));
+ }
+
+ public void testSerializationContainingSelf() {
+ Multiset<Multiset<?>> multiset = HashMultiset.create();
+ multiset.add(multiset, 2);
+ Multiset<Multiset<?>> copy = SerializableTester.reserialize(multiset);
+ assertEquals(2, copy.size());
+ assertSame(copy, copy.iterator().next());
+ }
+
+ private static class MultisetHolder implements Serializable {
+ public Multiset<?> member;
+ MultisetHolder(Multiset<?> multiset) {
+ this.member = multiset;
+ }
+ private static final long serialVersionUID = 1L;
+ }
+
+ public void testSerializationIndirectSelfReference() {
+ Multiset<MultisetHolder> multiset = HashMultiset.create();
+ MultisetHolder holder = new MultisetHolder(multiset);
+ multiset.add(holder, 2);
+ Multiset<MultisetHolder> copy = SerializableTester.reserialize(multiset);
+ assertEquals(2, copy.size());
+ assertSame(copy, copy.iterator().next().member);
+ }
+
+ /*
+ * The behavior of toString() and iteration is tested by LinkedHashMultiset,
+ * which shares a lot of code with HashMultiset and has deterministic
+ * iteration order.
+ */
+
+ /**
+ * This test fails with Java 6, preventing us from running
+ * NullPointerTester on multisets.
+ public void testAnnotations() throws Exception {
+ Method method = HashMultiset.class.getDeclaredMethod(
+ "add", Object.class, int.class);
+ assertTrue(method.getParameterAnnotations()[0].length > 0);
+ }
+ */
+}
diff --git a/test/com/google/common/collect/ImmutableBiMapTest.java b/test/com/google/common/collect/ImmutableBiMapTest.java
new file mode 100644
index 0000000..ccefa76
--- /dev/null
+++ b/test/com/google/common/collect/ImmutableBiMapTest.java
@@ -0,0 +1,612 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.base.Joiner;
+import com.google.common.collect.ImmutableBiMap.Builder;
+import com.google.common.collect.testing.MapInterfaceTest;
+import com.google.common.collect.testing.ReserializingTestSetGenerator;
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.SetTestSuiteBuilder;
+import com.google.common.collect.testing.TestMapEntrySetGenerator;
+import com.google.common.collect.testing.TestSetGenerator;
+import com.google.common.collect.testing.TestStringSetGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.SetFeature;
+import com.google.common.testing.junit3.JUnitAsserts;
+import com.google.common.testutils.SerializableTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+/**
+ * Tests for {@link ImmutableBiMap}.
+ *
+ * @author Jared Levy
+ */
+public class ImmutableBiMapTest extends TestCase {
+
+ // TODO: Reduce duplication of ImmutableMapTest code
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite();
+
+ suite.addTestSuite(MapTests.class);
+ suite.addTestSuite(InverseMapTests.class);
+ suite.addTestSuite(CreationTests.class);
+ suite.addTestSuite(BiMapSpecificTests.class);
+
+ suite.addTest(SetTestSuiteBuilder.using(keySetGenerator())
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .named("ImmutableBiMap.keySet")
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(entrySetGenerator())
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .named("ImmutableBiMap.entrySet")
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(valuesGenerator())
+ .withFeatures(
+ CollectionSize.ANY,
+ SetFeature.REJECTS_DUPLICATES_AT_CREATION,
+ CollectionFeature.KNOWN_ORDER)
+ .named("ImmutableBiMap.values")
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(inverseKeySetGenerator())
+ .withFeatures(
+ CollectionSize.ANY,
+ SetFeature.REJECTS_DUPLICATES_AT_CREATION,
+ CollectionFeature.KNOWN_ORDER)
+ .named("ImmutableBiMap.inverse.keys")
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(inverseEntrySetGenerator())
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .named("ImmutableBiMap.inverse.entrySet")
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(inverseValuesGenerator())
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .named("ImmutableBiMap.inverse.values")
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(
+ ReserializingTestSetGenerator.newInstance(keySetGenerator()))
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .named("ImmutableBiMap.keySet, reserialized")
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(
+ ReserializingTestSetGenerator.newInstance(entrySetGenerator()))
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .named("ImmutableBiMap.entrySet, reserialized")
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(
+ ReserializingTestSetGenerator.newInstance(valuesGenerator()))
+ .withFeatures(
+ CollectionSize.ANY,
+ SetFeature.REJECTS_DUPLICATES_AT_CREATION,
+ CollectionFeature.KNOWN_ORDER)
+ .named("ImmutableBiMap.values, reserialized")
+ .createTestSuite());
+
+ return suite;
+ }
+
+ private static TestMapEntrySetGenerator<String, String> entrySetGenerator() {
+ SampleElements.Strings sampleStrings = new SampleElements.Strings();
+ return new TestMapEntrySetGenerator<String, String>(
+ sampleStrings, sampleStrings) {
+ @Override public Set<Entry<String, String>> createFromEntries(
+ Entry<String, String>[] entries) {
+ Map<String, String> map = Maps.newLinkedHashMap();
+ for (Entry<String, String> entry : entries) {
+ map.put(entry.getKey(), entry.getValue());
+ }
+ return ImmutableBiMap.copyOf(map).entrySet();
+ }
+ };
+ }
+
+ private static TestStringSetGenerator keySetGenerator() {
+ return new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ Map<String, Integer> map = Maps.newLinkedHashMap();
+ for (int i = 0; i < elements.length; i++) {
+ map.put(elements[i], i);
+ }
+ return ImmutableBiMap.copyOf(map).keySet();
+ }
+ };
+ }
+
+ private static TestStringSetGenerator valuesGenerator() {
+ return new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ Map<Integer, String> map = Maps.newLinkedHashMap();
+ for (int i = 0; i < elements.length; i++) {
+ map.put(i, elements[i]);
+ }
+ return ImmutableBiMap.copyOf(map).values();
+ }
+ };
+ }
+
+ private static TestMapEntrySetGenerator<String, String>
+ inverseEntrySetGenerator() {
+ SampleElements.Strings sampleStrings = new SampleElements.Strings();
+ return new TestMapEntrySetGenerator<String, String>(
+ sampleStrings, sampleStrings) {
+ @Override public Set<Entry<String, String>> createFromEntries(
+ Entry<String, String>[] entries) {
+ Map<String, String> map = Maps.newLinkedHashMap();
+ for (Entry<String, String> entry : entries) {
+ map.put(entry.getValue(), entry.getKey());
+ }
+ return ImmutableBiMap.copyOf(map).inverse().entrySet();
+ }
+ };
+ }
+
+ private static TestStringSetGenerator inverseKeySetGenerator() {
+ return new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ Map<Integer, String> map = Maps.newLinkedHashMap();
+ for (int i = 0; i < elements.length; i++) {
+ map.put(i, elements[i]);
+ }
+ return ImmutableBiMap.copyOf(map).inverse().keySet();
+ }
+ };
+ }
+
+ private static TestSetGenerator<String> inverseValuesGenerator() {
+ return new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ Map<String, Integer> map = Maps.newLinkedHashMap();
+ for (int i = 0; i < elements.length; i++) {
+ map.put(elements[i], i);
+ }
+ return ImmutableBiMap.copyOf(map).inverse().values();
+ }
+ };
+ }
+
+ public static abstract class AbstractMapTests<K, V>
+ extends MapInterfaceTest<K, V> {
+ public AbstractMapTests() {
+ super(false, false, false, false, false);
+ }
+
+ @Override protected Map<K, V> makeEmptyMap() {
+ throw new UnsupportedOperationException();
+ }
+
+ private static final Joiner joiner = Joiner.on(", ");
+
+ @Override protected void assertMoreInvariants(Map<K, V> map) {
+
+ BiMap<K, V> bimap = (BiMap<K, V>) map;
+
+ for (Entry<K, V> entry : map.entrySet()) {
+ assertEquals(entry.getKey() + "=" + entry.getValue(),
+ entry.toString());
+ assertEquals(entry.getKey(), bimap.inverse().get(entry.getValue()));
+ }
+
+ assertEquals("{" + joiner.join(map.entrySet()) + "}",
+ map.toString());
+ assertEquals("[" + joiner.join(map.entrySet()) + "]",
+ map.entrySet().toString());
+ assertEquals("[" + joiner.join(map.keySet()) + "]",
+ map.keySet().toString());
+ assertEquals("[" + joiner.join(map.values()) + "]",
+ map.values().toString());
+
+ assertEquals(Sets.newHashSet(map.entrySet()), map.entrySet());
+ assertEquals(Sets.newHashSet(map.keySet()), map.keySet());
+ }
+ }
+
+ public static class MapTests extends AbstractMapTests<String, Integer> {
+ @Override protected Map<String, Integer> makeEmptyMap() {
+ return ImmutableBiMap.of();
+ }
+
+ @Override protected Map<String, Integer> makePopulatedMap() {
+ return ImmutableBiMap.of("one", 1, "two", 2, "three", 3);
+ }
+
+ @Override protected String getKeyNotInPopulatedMap() {
+ return "minus one";
+ }
+
+ @Override protected Integer getValueNotInPopulatedMap() {
+ return -1;
+ }
+ }
+
+ public static class InverseMapTests
+ extends AbstractMapTests<String, Integer> {
+ @Override protected Map<String, Integer> makeEmptyMap() {
+ return ImmutableBiMap.of();
+ }
+
+ @Override protected Map<String, Integer> makePopulatedMap() {
+ return ImmutableBiMap.of(1, "one", 2, "two", 3, "three").inverse();
+ }
+
+ @Override protected String getKeyNotInPopulatedMap() {
+ return "minus one";
+ }
+
+ @Override protected Integer getValueNotInPopulatedMap() {
+ return -1;
+ }
+ }
+
+ public static class CreationTests extends TestCase {
+ public void testEmptyBuilder() {
+ ImmutableBiMap<String, Integer> map
+ = new Builder<String, Integer>().build();
+ assertEquals(Collections.<String, Integer>emptyMap(), map);
+ assertEquals(Collections.<Integer, String>emptyMap(), map.inverse());
+ assertSame(ImmutableBiMap.of(), map);
+ }
+
+ public void testSingletonBuilder() {
+ ImmutableBiMap<String, Integer> map = new Builder<String, Integer>()
+ .put("one", 1)
+ .build();
+ assertMapEquals(map, "one", 1);
+ assertMapEquals(map.inverse(), 1, "one");
+ }
+
+ public void testBuilder() {
+ ImmutableBiMap<String, Integer> map
+ = ImmutableBiMap.<String, Integer>builder()
+ .put("one", 1)
+ .put("two", 2)
+ .put("three", 3)
+ .put("four", 4)
+ .put("five", 5)
+ .build();
+ assertMapEquals(map,
+ "one", 1, "two", 2, "three", 3, "four", 4, "five", 5);
+ assertMapEquals(map.inverse(),
+ 1, "one", 2, "two", 3, "three", 4, "four", 5, "five");
+ }
+
+ public void testBuilderPutAllWithEmptyMap() {
+ ImmutableBiMap<String, Integer> map = new Builder<String, Integer>()
+ .putAll(Collections.<String, Integer>emptyMap())
+ .build();
+ assertEquals(Collections.<String, Integer>emptyMap(), map);
+ }
+
+ public void testBuilderPutAll() {
+ Map<String, Integer> toPut = new LinkedHashMap<String, Integer>();
+ toPut.put("one", 1);
+ toPut.put("two", 2);
+ toPut.put("three", 3);
+ Map<String, Integer> moreToPut = new LinkedHashMap<String, Integer>();
+ moreToPut.put("four", 4);
+ moreToPut.put("five", 5);
+
+ ImmutableBiMap<String, Integer> map = new Builder<String, Integer>()
+ .putAll(toPut)
+ .putAll(moreToPut)
+ .build();
+ assertMapEquals(map,
+ "one", 1, "two", 2, "three", 3, "four", 4, "five", 5);
+ assertMapEquals(map.inverse(),
+ 1, "one", 2, "two", 3, "three", 4, "four", 5, "five");
+ }
+
+ public void testBuilderReuse() {
+ Builder<String, Integer> builder = new Builder<String, Integer>();
+ ImmutableBiMap<String, Integer> mapOne = builder
+ .put("one", 1)
+ .put("two", 2)
+ .build();
+ ImmutableBiMap<String, Integer> mapTwo = builder
+ .put("three", 3)
+ .put("four", 4)
+ .build();
+
+ assertMapEquals(mapOne, "one", 1, "two", 2);
+ assertMapEquals(mapOne.inverse(), 1, "one", 2, "two");
+ assertMapEquals(mapTwo, "one", 1, "two", 2, "three", 3, "four", 4);
+ assertMapEquals(mapTwo.inverse(),
+ 1, "one", 2, "two", 3, "three", 4, "four");
+ }
+
+ public void testBuilderPutNullKey() {
+ Builder<String, Integer> builder = new Builder<String, Integer>();
+ try {
+ builder.put(null, 1);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testBuilderPutNullValue() {
+ Builder<String, Integer> builder = new Builder<String, Integer>();
+ try {
+ builder.put("one", null);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testBuilderPutNullKeyViaPutAll() {
+ Builder<String, Integer> builder = new Builder<String, Integer>();
+ try {
+ builder.putAll(Collections.<String, Integer>singletonMap(null, 1));
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testBuilderPutNullValueViaPutAll() {
+ Builder<String, Integer> builder = new Builder<String, Integer>();
+ try {
+ builder.putAll(Collections.<String, Integer>singletonMap("one", null));
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testPuttingTheSameKeyTwiceThrowsOnBuild() {
+ Builder<String, Integer> builder = new Builder<String, Integer>()
+ .put("one", 1)
+ .put("one", 1); // throwing on this line would be even better
+
+ try {
+ builder.build();
+ fail();
+ } catch (IllegalArgumentException expected) {
+ assertEquals("duplicate key: one", expected.getMessage());
+ }
+ }
+
+ public void testOf() {
+ assertMapEquals(
+ ImmutableBiMap.of("one", 1),
+ "one", 1);
+ assertMapEquals(
+ ImmutableBiMap.of("one", 1).inverse(),
+ 1, "one");
+ assertMapEquals(
+ ImmutableBiMap.of("one", 1, "two", 2),
+ "one", 1, "two", 2);
+ assertMapEquals(
+ ImmutableBiMap.of("one", 1, "two", 2).inverse(),
+ 1, "one", 2, "two");
+ assertMapEquals(
+ ImmutableBiMap.of("one", 1, "two", 2, "three", 3),
+ "one", 1, "two", 2, "three", 3);
+ assertMapEquals(
+ ImmutableBiMap.of("one", 1, "two", 2, "three", 3).inverse(),
+ 1, "one", 2, "two", 3, "three");
+ assertMapEquals(
+ ImmutableBiMap.of("one", 1, "two", 2, "three", 3, "four", 4),
+ "one", 1, "two", 2, "three", 3, "four", 4);
+ assertMapEquals(
+ ImmutableBiMap.of(
+ "one", 1, "two", 2, "three", 3, "four", 4).inverse(),
+ 1, "one", 2, "two", 3, "three", 4, "four");
+ assertMapEquals(
+ ImmutableBiMap.of(
+ "one", 1, "two", 2, "three", 3, "four", 4, "five", 5),
+ "one", 1, "two", 2, "three", 3, "four", 4, "five", 5);
+ assertMapEquals(
+ ImmutableBiMap.of(
+ "one", 1, "two", 2, "three", 3, "four", 4, "five", 5).inverse(),
+ 1, "one", 2, "two", 3, "three", 4, "four", 5, "five");
+ }
+
+ public void testOfNullKey() {
+ try {
+ ImmutableBiMap.of(null, 1);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+
+ try {
+ ImmutableBiMap.of("one", 1, null, 2);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testOfNullValue() {
+ try {
+ ImmutableBiMap.of("one", null);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+
+ try {
+ ImmutableBiMap.of("one", 1, "two", null);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testOfWithDuplicateKey() {
+ try {
+ ImmutableBiMap.of("one", 1, "one", 1);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ assertEquals("duplicate key: one", expected.getMessage());
+ }
+ }
+
+ public void testCopyOfEmptyMap() {
+ ImmutableBiMap<String, Integer> copy
+ = ImmutableBiMap.copyOf(Collections.<String, Integer>emptyMap());
+ assertEquals(Collections.<String, Integer>emptyMap(), copy);
+ assertSame(copy, ImmutableBiMap.copyOf(copy));
+ assertSame(ImmutableBiMap.of(), copy);
+ }
+
+ public void testCopyOfSingletonMap() {
+ ImmutableBiMap<String, Integer> copy
+ = ImmutableBiMap.copyOf(Collections.singletonMap("one", 1));
+ assertMapEquals(copy, "one", 1);
+ assertSame(copy, ImmutableBiMap.copyOf(copy));
+ }
+
+ public void testCopyOf() {
+ Map<String, Integer> original = new LinkedHashMap<String, Integer>();
+ original.put("one", 1);
+ original.put("two", 2);
+ original.put("three", 3);
+
+ ImmutableBiMap<String, Integer> copy = ImmutableBiMap.copyOf(original);
+ assertMapEquals(copy, "one", 1, "two", 2, "three", 3);
+ assertSame(copy, ImmutableBiMap.copyOf(copy));
+ }
+
+ public void testEmpty() {
+ ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.of();
+ assertEquals(Collections.<String, Integer>emptyMap(), bimap);
+ assertEquals(Collections.<String, Integer>emptyMap(), bimap.inverse());
+ }
+
+ public void testFromHashMap() {
+ Map<String, Integer> hashMap = Maps.newLinkedHashMap();
+ hashMap.put("one", 1);
+ hashMap.put("two", 2);
+ ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.copyOf(
+ ImmutableMap.of("one", 1, "two", 2));
+ assertMapEquals(bimap, "one", 1, "two", 2);
+ assertMapEquals(bimap.inverse(), 1, "one", 2, "two");
+ }
+
+ public void testFromImmutableMap() {
+ ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.copyOf(
+ new ImmutableMap.Builder<String, Integer>()
+ .put("one", 1)
+ .put("two", 2)
+ .put("three", 3)
+ .put("four", 4)
+ .put("five", 5)
+ .build());
+ assertMapEquals(bimap,
+ "one", 1, "two", 2, "three", 3, "four", 4, "five", 5);
+ assertMapEquals(bimap.inverse(),
+ 1, "one", 2, "two", 3, "three", 4, "four", 5, "five");
+ }
+
+ public void testDuplicateValues() {
+ ImmutableMap<String, Integer> map
+ = new ImmutableMap.Builder<String, Integer>()
+ .put("one", 1)
+ .put("two", 2)
+ .put("uno", 1)
+ .put("dos", 2)
+ .build();
+
+ try {
+ ImmutableBiMap.copyOf(map);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ assertEquals("duplicate key: 1", expected.getMessage());
+ }
+ }
+ }
+
+ public static class BiMapSpecificTests extends TestCase {
+ public void testForcePut() {
+ ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.copyOf(
+ ImmutableMap.of("one", 1, "two", 2));
+ try {
+ bimap.forcePut("three", 3);
+ fail();
+ } catch (UnsupportedOperationException expected) {}
+ }
+
+ public void testKeySet() {
+ ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.copyOf(
+ ImmutableMap.of("one", 1, "two", 2, "three", 3, "four", 4));
+ Set<String> keys = bimap.keySet();
+ assertEquals(Sets.newHashSet("one", "two", "three", "four"), keys);
+ JUnitAsserts.assertContentsInOrder(keys, "one", "two", "three", "four");
+ }
+
+ public void testValues() {
+ ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.copyOf(
+ ImmutableMap.of("one", 1, "two", 2, "three", 3, "four", 4));
+ Set<Integer> values = bimap.values();
+ assertEquals(Sets.newHashSet(1, 2, 3, 4), values);
+ JUnitAsserts.assertContentsInOrder(values, 1, 2, 3, 4);
+ }
+
+ public void testDoubleInverse() {
+ ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.copyOf(
+ ImmutableMap.of("one", 1, "two", 2));
+ assertSame(bimap, bimap.inverse().inverse());
+ }
+
+ public void testEmptySerialization() {
+ ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.of();
+ assertSame(bimap, SerializableTester.reserializeAndAssert(bimap));
+ }
+
+ public void testSerialization() {
+ ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.copyOf(
+ ImmutableMap.of("one", 1, "two", 2));
+ ImmutableBiMap<String, Integer> copy =
+ SerializableTester.reserializeAndAssert(bimap);
+ assertEquals(Integer.valueOf(1), copy.get("one"));
+ assertEquals("one", copy.inverse().get(1));
+ assertSame(copy, copy.inverse().inverse());
+ }
+
+ public void testInverseSerialization() {
+ ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.copyOf(
+ ImmutableMap.of(1, "one", 2, "two")).inverse();
+ ImmutableBiMap<String, Integer> copy =
+ SerializableTester.reserializeAndAssert(bimap);
+ assertEquals(Integer.valueOf(1), copy.get("one"));
+ assertEquals("one", copy.inverse().get(1));
+ assertSame(copy, copy.inverse().inverse());
+ }
+ }
+
+ private static <K, V> void assertMapEquals(Map<K, V> map,
+ Object... alternatingKeysAndValues) {
+ int i = 0;
+ for (Entry<K, V> entry : map.entrySet()) {
+ assertEquals(alternatingKeysAndValues[i++], entry.getKey());
+ assertEquals(alternatingKeysAndValues[i++], entry.getValue());
+ }
+ }
+}
diff --git a/test/com/google/common/collect/ImmutableClassToInstanceMapTest.java b/test/com/google/common/collect/ImmutableClassToInstanceMapTest.java
new file mode 100644
index 0000000..8418548
--- /dev/null
+++ b/test/com/google/common/collect/ImmutableClassToInstanceMapTest.java
@@ -0,0 +1,185 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.testing.Helpers;
+import com.google.common.collect.testing.MapTestSuiteBuilder;
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.TestMapGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.MapFeature;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * Unit test for {@link ImmutableClassToInstanceMap}.
+ *
+ * @author Kevin Bourrillion
+ */
+public class ImmutableClassToInstanceMapTest extends TestCase {
+ public static Test suite() {
+ TestSuite suite = new TestSuite();
+ suite.addTestSuite(ImmutableClassToInstanceMapTest.class);
+
+ suite.addTest(MapTestSuiteBuilder
+ .using(new TestClassToInstanceMapGenerator() {
+ // Other tests will verify what real, warning-free usage looks like
+ // but here we have to do some serious fudging
+ @SuppressWarnings("unchecked")
+ public Map<Class, Number> create(Object... elements) {
+ ImmutableClassToInstanceMap.Builder<Number> builder
+ = ImmutableClassToInstanceMap.builder();
+ for (Object object : elements) {
+ Entry<Class, Number> entry = (Entry<Class, Number>) object;
+ builder.put(entry.getKey(), entry.getValue());
+ }
+ return (Map) builder.build();
+ }
+ })
+ .named("ImmutableClassToInstanceMap")
+ .withFeatures(
+ MapFeature.REJECTS_DUPLICATES_AT_CREATION,
+ MapFeature.RESTRICTS_KEYS,
+ CollectionFeature.KNOWN_ORDER,
+ CollectionSize.ANY)
+ .createTestSuite());
+
+ return suite;
+ }
+
+ public void testCopyOf_map_empty() {
+ Map<Class<?>,Object> in = Collections.emptyMap();
+ ClassToInstanceMap<Object> map = ImmutableClassToInstanceMap.copyOf(in);
+ assertTrue(map.isEmpty());
+
+ assertSame(map, ImmutableClassToInstanceMap.copyOf(map));
+ }
+
+ public void testCopyOf_map_valid() {
+ Map<Class<? extends Number>, Number> in = Maps.newHashMap();
+ in.put(Number.class, 0);
+ in.put(Double.class, Math.PI);
+ ClassToInstanceMap<Number> map = ImmutableClassToInstanceMap.copyOf(in);
+ assertEquals(2, map.size());
+
+ Number zero = map.getInstance(Number.class);
+ assertEquals(0, zero);
+
+ Double pi = map.getInstance(Double.class);
+ assertEquals(Math.PI, pi, 0.0);
+
+ assertSame(map, ImmutableClassToInstanceMap.copyOf(map));
+ }
+
+ public void testCopyOf_map_nulls() {
+ Map<Class<? extends Number>, Number> nullKey = Collections.singletonMap(
+ null, (Number) 1.0);
+ try {
+ ImmutableClassToInstanceMap.copyOf(nullKey);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+
+ Map<? extends Class<? extends Number>, Number> nullValue
+ = Collections.singletonMap(Number.class, null);
+ try {
+ ImmutableClassToInstanceMap.copyOf(nullValue);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testCopyOf_imap_empty() {
+ Map<Class<?>,Object> in = Collections.emptyMap();
+ ClassToInstanceMap<Object> map = ImmutableClassToInstanceMap.copyOf(in);
+ assertTrue(map.isEmpty());
+ }
+
+ public void testCopyOf_imap_valid() {
+ ImmutableMap<Class<? extends Number>, ? extends Number> in
+ = ImmutableMap.of(Number.class, 0, Double.class, Math.PI);
+ ClassToInstanceMap<Number> map = ImmutableClassToInstanceMap.copyOf(in);
+ assertEquals(2, map.size());
+
+ Number zero = map.getInstance(Number.class);
+ assertEquals(0, zero);
+
+ Double pi = map.getInstance(Double.class);
+ assertEquals(Math.PI, pi, 0.0);
+ }
+
+ public void testPrimitiveAndWrapper() {
+ ImmutableClassToInstanceMap<Number> ictim
+ = new ImmutableClassToInstanceMap.Builder<Number>()
+ .put(Integer.class, 0)
+ .put(int.class, 1)
+ .build();
+ assertEquals(2, ictim.size());
+
+ assertEquals(0, (int) ictim.getInstance(Integer.class));
+ assertEquals(1, (int) ictim.getInstance(int.class));
+ }
+
+ // Other tests will verify what real, warning-free usage looks like
+ // but here we have to do some serious fudging
+ @SuppressWarnings("unchecked")
+ abstract static class TestClassToInstanceMapGenerator
+ implements TestMapGenerator<Class, Number> {
+
+ public Class[] createKeyArray(int length) {
+ return new Class[length];
+ }
+
+ public Number[] createValueArray(int length) {
+ return new Number[length];
+ }
+
+ public SampleElements<Entry<Class, Number>> samples() {
+ Entry<Class, Number> entry1 = Helpers
+ .mapEntry((Class) Integer.class, (Number) 0);
+ Entry<Class, Number> entry2 = Helpers
+ .mapEntry((Class) Number.class, (Number) 1);
+ Entry<Class, Number> entry3 = Helpers
+ .mapEntry((Class) Double.class, (Number) 2.0);
+ Entry<Class, Number> entry4 = Helpers
+ .mapEntry((Class) Byte.class, (Number) (byte) 0x03);
+ Entry<Class, Number> entry5 = Helpers
+ .mapEntry((Class) Long.class, (Number) 0x0FF1C1AL);
+ return new SampleElements<Entry<Class, Number>>(
+ entry1, entry2, entry3, entry4, entry5
+ );
+ }
+
+ @SuppressWarnings("unchecked")
+ public Entry<Class, Number>[] createArray(int length) {
+ return new Entry[length];
+ }
+
+ public Iterable<Entry<Class, Number>> order(
+ List<Entry<Class, Number>> insertionOrder) {
+ return insertionOrder;
+ }
+ }
+}
diff --git a/test/com/google/common/collect/ImmutableListMultimapTest.java b/test/com/google/common/collect/ImmutableListMultimapTest.java
new file mode 100644
index 0000000..57892ce
--- /dev/null
+++ b/test/com/google/common/collect/ImmutableListMultimapTest.java
@@ -0,0 +1,342 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.testing.google.UnmodifiableCollectionTests;
+import com.google.common.testutils.EqualsTester;
+import com.google.common.testutils.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map.Entry;
+
+/**
+ * Tests for {@link ImmutableListMultimap}.
+ *
+ * @author Jared Levy
+ */
+public class ImmutableListMultimapTest extends TestCase {
+
+ public void testBuilderPutAllIterable() {
+ ImmutableListMultimap.Builder<String, Integer> builder
+ = ImmutableListMultimap.builder();
+ builder.putAll("foo", Arrays.asList(1, 2, 3));
+ builder.putAll("bar", Arrays.asList(4, 5));
+ builder.putAll("foo", Arrays.asList(6, 7));
+ Multimap<String, Integer> multimap = builder.build();
+ assertEquals(Arrays.asList(1, 2, 3, 6, 7), multimap.get("foo"));
+ assertEquals(Arrays.asList(4, 5), multimap.get("bar"));
+ assertEquals(7, multimap.size());
+ }
+
+ public void testBuilderPutAllVarargs() {
+ ImmutableListMultimap.Builder<String, Integer> builder
+ = ImmutableListMultimap.builder();
+ builder.putAll("foo", 1, 2, 3);
+ builder.putAll("bar", 4, 5);
+ builder.putAll("foo", 6, 7);
+ Multimap<String, Integer> multimap = builder.build();
+ assertEquals(Arrays.asList(1, 2, 3, 6, 7), multimap.get("foo"));
+ assertEquals(Arrays.asList(4, 5), multimap.get("bar"));
+ assertEquals(7, multimap.size());
+ }
+
+ public void testBuilderPutAllMultimap() {
+ Multimap<String, Integer> toPut = LinkedListMultimap.create();
+ toPut.put("foo", 1);
+ toPut.put("bar", 4);
+ toPut.put("foo", 2);
+ toPut.put("foo", 3);
+ Multimap<String, Integer> moreToPut = LinkedListMultimap.create();
+ moreToPut.put("foo", 6);
+ moreToPut.put("bar", 5);
+ moreToPut.put("foo", 7);
+ ImmutableListMultimap.Builder<String, Integer> builder
+ = ImmutableListMultimap.builder();
+ builder.putAll(toPut);
+ builder.putAll(moreToPut);
+ Multimap<String, Integer> multimap = builder.build();
+ assertEquals(Arrays.asList(1, 2, 3, 6, 7), multimap.get("foo"));
+ assertEquals(Arrays.asList(4, 5), multimap.get("bar"));
+ assertEquals(7, multimap.size());
+ }
+
+ public void testBuilderPutAllWithDuplicates() {
+ ImmutableListMultimap.Builder<String, Integer> builder
+ = ImmutableListMultimap.builder();
+ builder.putAll("foo", 1, 2, 3);
+ builder.putAll("bar", 4, 5);
+ builder.putAll("foo", 1, 6, 7);
+ ImmutableListMultimap<String, Integer> multimap = builder.build();
+ assertEquals(Arrays.asList(1, 2, 3, 1, 6, 7), multimap.get("foo"));
+ assertEquals(Arrays.asList(4, 5), multimap.get("bar"));
+ assertEquals(8, multimap.size());
+ }
+
+ public void testBuilderPutWithDuplicates() {
+ ImmutableListMultimap.Builder<String, Integer> builder
+ = ImmutableListMultimap.builder();
+ builder.putAll("foo", 1, 2, 3);
+ builder.putAll("bar", 4, 5);
+ builder.put("foo", 1);
+ ImmutableListMultimap<String, Integer> multimap = builder.build();
+ assertEquals(Arrays.asList(1, 2, 3, 1), multimap.get("foo"));
+ assertEquals(Arrays.asList(4, 5), multimap.get("bar"));
+ assertEquals(6, multimap.size());
+ }
+
+ public void testBuilderPutAllMultimapWithDuplicates() {
+ Multimap<String, Integer> toPut = LinkedListMultimap.create();
+ toPut.put("foo", 1);
+ toPut.put("bar", 4);
+ toPut.put("foo", 2);
+ toPut.put("foo", 1);
+ toPut.put("bar", 5);
+ Multimap<String, Integer> moreToPut = LinkedListMultimap.create();
+ moreToPut.put("foo", 6);
+ moreToPut.put("bar", 4);
+ moreToPut.put("foo", 7);
+ moreToPut.put("foo", 2);
+ ImmutableListMultimap.Builder<String, Integer> builder
+ = ImmutableListMultimap.builder();
+ builder.putAll(toPut);
+ builder.putAll(moreToPut);
+ Multimap<String, Integer> multimap = builder.build();
+ assertEquals(Arrays.asList(1, 2, 1, 6, 7, 2), multimap.get("foo"));
+ assertEquals(Arrays.asList(4, 5, 4), multimap.get("bar"));
+ assertEquals(9, multimap.size());
+ }
+
+ public void testBuilderPutNullKey() {
+ Multimap<String, Integer> toPut = LinkedListMultimap.create();
+ toPut.put("foo", null);
+ ImmutableListMultimap.Builder<String, Integer> builder
+ = ImmutableListMultimap.builder();
+ try {
+ builder.put(null, 1);
+ fail();
+ } catch (NullPointerException expected) {}
+ try {
+ builder.putAll(null, Arrays.asList(1, 2, 3));
+ fail();
+ } catch (NullPointerException expected) {}
+ try {
+ builder.putAll(null, 1, 2, 3);
+ fail();
+ } catch (NullPointerException expected) {}
+ try {
+ builder.putAll(toPut);
+ fail();
+ } catch (NullPointerException expected) {}
+ }
+
+ public void testBuilderPutNullValue() {
+ Multimap<String, Integer> toPut = LinkedListMultimap.create();
+ toPut.put(null, 1);
+ ImmutableListMultimap.Builder<String, Integer> builder
+ = ImmutableListMultimap.builder();
+ try {
+ builder.put("foo", null);
+ fail();
+ } catch (NullPointerException expected) {}
+ try {
+ builder.putAll("foo", Arrays.asList(1, null, 3));
+ fail();
+ } catch (NullPointerException expected) {}
+ try {
+ builder.putAll("foo", 1, null, 3);
+ fail();
+ } catch (NullPointerException expected) {}
+ try {
+ builder.putAll(toPut);
+ fail();
+ } catch (NullPointerException expected) {}
+ }
+
+ public void testCopyOf() {
+ ArrayListMultimap<String, Integer> input = ArrayListMultimap.create();
+ input.put("foo", 1);
+ input.put("bar", 2);
+ input.put("foo", 3);
+ Multimap<String, Integer> multimap = ImmutableListMultimap.copyOf(input);
+ assertEquals(multimap, input);
+ assertEquals(input, multimap);
+ }
+
+ public void testCopyOfWithDuplicates() {
+ ArrayListMultimap<String, Integer> input = ArrayListMultimap.create();
+ input.put("foo", 1);
+ input.put("bar", 2);
+ input.put("foo", 3);
+ input.put("foo", 1);
+ Multimap<String, Integer> multimap = ImmutableListMultimap.copyOf(input);
+ assertEquals(multimap, input);
+ assertEquals(input, multimap);
+ }
+
+ public void testCopyOfEmpty() {
+ ArrayListMultimap<String, Integer> input = ArrayListMultimap.create();
+ Multimap<String, Integer> multimap = ImmutableListMultimap.copyOf(input);
+ assertEquals(multimap, input);
+ assertEquals(input, multimap);
+ }
+
+ public void testCopyOfImmutableListMultimap() {
+ Multimap<String, Integer> multimap = createMultimap();
+ assertSame(multimap, ImmutableListMultimap.copyOf(multimap));
+ }
+
+ public void testCopyOfNullKey() {
+ ArrayListMultimap<String, Integer> input = ArrayListMultimap.create();
+ input.put(null, 1);
+ try {
+ ImmutableListMultimap.copyOf(input);
+ fail();
+ } catch (NullPointerException expected) {}
+ }
+
+ public void testCopyOfNullValue() {
+ ArrayListMultimap<String, Integer> input = ArrayListMultimap.create();
+ input.putAll("foo", Arrays.asList(1, null, 3));
+ try {
+ ImmutableListMultimap.copyOf(input);
+ fail();
+ } catch (NullPointerException expected) {}
+ }
+
+ public void testEmptyMultimapReads() {
+ Multimap<String, Integer> multimap = ImmutableListMultimap.of();
+ assertFalse(multimap.containsKey("foo"));
+ assertFalse(multimap.containsValue(1));
+ assertFalse(multimap.containsEntry("foo", 1));
+ assertTrue(multimap.entries().isEmpty());
+ assertTrue(multimap.equals(ArrayListMultimap.create()));
+ assertEquals(Collections.emptyList(), multimap.get("foo"));
+ assertEquals(0, multimap.hashCode());
+ assertTrue(multimap.isEmpty());
+ assertEquals(HashMultiset.create(), multimap.keys());
+ assertEquals(Collections.emptySet(), multimap.keySet());
+ assertEquals(0, multimap.size());
+ assertTrue(multimap.values().isEmpty());
+ assertEquals("{}", multimap.toString());
+ }
+
+ public void testEmptyMultimapWrites() {
+ Multimap<String, Integer> multimap = ImmutableListMultimap.of();
+ UnmodifiableCollectionTests.assertMultimapIsUnmodifiable(
+ multimap, "foo", 1);
+ }
+
+ private Multimap<String, Integer> createMultimap() {
+ return ImmutableListMultimap.<String, Integer>builder()
+ .put("foo", 1).put("bar", 2).put("foo", 3).build();
+ }
+
+ public void testMultimapReads() {
+ Multimap<String, Integer> multimap = createMultimap();
+ assertTrue(multimap.containsKey("foo"));
+ assertFalse(multimap.containsKey("cat"));
+ assertTrue(multimap.containsValue(1));
+ assertFalse(multimap.containsValue(5));
+ assertTrue(multimap.containsEntry("foo", 1));
+ assertFalse(multimap.containsEntry("cat", 1));
+ assertFalse(multimap.containsEntry("foo", 5));
+ assertFalse(multimap.entries().isEmpty());
+ assertEquals(3, multimap.size());
+ assertFalse(multimap.isEmpty());
+ assertEquals("{foo=[1, 3], bar=[2]}", multimap.toString());
+ }
+
+ public void testMultimapWrites() {
+ Multimap<String, Integer> multimap = createMultimap();
+ UnmodifiableCollectionTests.assertMultimapIsUnmodifiable(
+ multimap, "bar", 2);
+ }
+
+ public void testMultimapEquals() {
+ Multimap<String, Integer> multimap = createMultimap();
+ Multimap<String, Integer> arrayListMultimap
+ = ArrayListMultimap.create();
+ arrayListMultimap.putAll("foo", Arrays.asList(1, 3));
+ arrayListMultimap.put("bar", 2);
+
+ new EqualsTester(multimap)
+ .addEqualObject(createMultimap())
+ .addEqualObject(arrayListMultimap)
+ .addEqualObject(ImmutableListMultimap.<String, Integer>builder()
+ .put("bar", 2).put("foo", 1).put("foo", 3).build())
+ .addNotEqualObject(ImmutableListMultimap.<String, Integer>builder()
+ .put("bar", 2).put("foo", 3).put("foo", 1).build())
+ .addNotEqualObject(ImmutableListMultimap.<String, Integer>builder()
+ .put("foo", 2).put("foo", 3).put("foo", 1).build())
+ .addNotEqualObject(ImmutableListMultimap.<String, Integer>builder()
+ .put("bar", 2).put("foo", 3).build())
+ .testEquals();
+ }
+
+ public void testOf() {
+ assertMultimapEquals(
+ ImmutableListMultimap.of("one", 1),
+ "one", 1);
+ assertMultimapEquals(
+ ImmutableListMultimap.of("one", 1, "two", 2),
+ "one", 1, "two", 2);
+ assertMultimapEquals(
+ ImmutableListMultimap.of("one", 1, "two", 2, "three", 3),
+ "one", 1, "two", 2, "three", 3);
+ assertMultimapEquals(
+ ImmutableListMultimap.of("one", 1, "two", 2, "three", 3, "four", 4),
+ "one", 1, "two", 2, "three", 3, "four", 4);
+ assertMultimapEquals(
+ ImmutableListMultimap.of(
+ "one", 1, "two", 2, "three", 3, "four", 4, "five", 5),
+ "one", 1, "two", 2, "three", 3, "four", 4, "five", 5);
+ }
+
+ private static <K, V> void assertMultimapEquals(Multimap<K, V> multimap,
+ Object... alternatingKeysAndValues) {
+ assertEquals(multimap.size(), alternatingKeysAndValues.length / 2);
+ int i = 0;
+ for (Entry<K, V> entry : multimap.entries()) {
+ assertEquals(alternatingKeysAndValues[i++], entry.getKey());
+ assertEquals(alternatingKeysAndValues[i++], entry.getValue());
+ }
+ }
+
+ public void testSerialization() {
+ Multimap<String, Integer> multimap = createMultimap();
+ SerializableTester.reserializeAndAssert(multimap);
+ assertEquals(multimap.size(),
+ SerializableTester.reserialize(multimap).size());
+ SerializableTester.reserializeAndAssert(multimap.get("foo"));
+ SerializableTester.reserializeAndAssert(multimap.keySet());
+ SerializableTester.reserializeAndAssert(multimap.keys());
+ SerializableTester.reserializeAndAssert(multimap.asMap());
+ Collection<Integer> valuesCopy
+ = SerializableTester.reserialize(multimap.values());
+ assertEquals(HashMultiset.create(multimap.values()),
+ HashMultiset.create(valuesCopy));
+ }
+
+ public void testEmptySerialization() {
+ Multimap<String, Integer> multimap = ImmutableListMultimap.of();
+ assertSame(multimap, SerializableTester.reserialize(multimap));
+ }
+}
diff --git a/test/com/google/common/collect/ImmutableListTest.java b/test/com/google/common/collect/ImmutableListTest.java
new file mode 100644
index 0000000..80d960f
--- /dev/null
+++ b/test/com/google/common/collect/ImmutableListTest.java
@@ -0,0 +1,738 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.ImmutableList.Builder;
+import static com.google.common.collect.Iterables.getOnlyElement;
+import static com.google.common.collect.Iterables.unmodifiableIterable;
+import static com.google.common.collect.ObjectArrays.concat;
+import static com.google.common.collect.Sets.newHashSet;
+import com.google.common.collect.testing.ListTestSuiteBuilder;
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.MinimalIterable;
+import com.google.common.collect.testing.TestListGenerator;
+import com.google.common.collect.testing.TestStringListGenerator;
+import com.google.common.collect.testing.TestUnhashableCollectionGenerator;
+import com.google.common.collect.testing.UnhashableObject;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.testers.ListHashCodeTester;
+import static com.google.common.testing.junit3.JUnitAsserts.assertNotEqual;
+import com.google.common.testutils.NullPointerTester;
+import com.google.common.testutils.SerializableTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import static java.lang.reflect.Proxy.newProxyInstance;
+import static java.util.Arrays.asList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+/**
+ * Unit test for {@link ImmutableList}.
+ *
+ * @author Kevin Bourrillion
+ * @author George van den Driessche
+ * @author Jared Levy
+ */
+public class ImmutableListTest extends TestCase {
+ public static Test suite() {
+ TestSuite suite = new TestSuite();
+ suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+ @Override protected List<String> create(String[] elements) {
+ return ImmutableList.of(elements);
+ }
+ })
+ .named("ImmutableList")
+ .withFeatures(CollectionSize.ANY)
+ .createTestSuite());
+ suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+ @Override protected List<String> create(String[] elements) {
+ Builder<String> builder = ImmutableList.<String>builder();
+ for (String element : elements) {
+ builder.add(element);
+ }
+ return builder.build();
+ }
+ })
+ .named("ImmutableList, built with Builder.add")
+ .withFeatures(CollectionSize.ANY)
+ .createTestSuite());
+ suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+ @Override protected List<String> create(String[] elements) {
+ return ImmutableList.<String>builder()
+ .addAll(asList(elements))
+ .build();
+ }
+ })
+ .named("ImmutableList, built with Builder.addAll")
+ .withFeatures(CollectionSize.ANY)
+ .createTestSuite());
+ suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+ @Override protected List<String> create(String[] elements) {
+ return SerializableTester.reserialize(ImmutableList.of(elements));
+ }
+ })
+ .named("ImmutableList, reserialized")
+ .withFeatures(CollectionSize.ANY)
+ .createTestSuite());
+ suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+ @Override protected List<String> create(String[] elements) {
+ String[] suffix = {"f", "g"};
+ String[] all = concat(elements, suffix, String.class);
+ return ImmutableList.of(all)
+ .subList(0, elements.length);
+ }
+ })
+ .named("ImmutableList, head subList")
+ .withFeatures(CollectionSize.ANY)
+ .createTestSuite());
+ suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+ @Override protected List<String> create(String[] elements) {
+ String[] prefix = {"f", "g"};
+ String[] all = concat(prefix, elements, String.class);
+ return ImmutableList.of(all)
+ .subList(2, elements.length + 2);
+ }
+ })
+ .named("ImmutableList, tail subList")
+ .withFeatures(CollectionSize.ANY)
+ .createTestSuite());
+ suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+ @Override protected List<String> create(String[] elements) {
+ String[] prefix = {"f", "g"};
+ String[] suffix = {"h", "i"};
+ String[] all = concat(prefix,
+ concat(elements, suffix, String.class), String.class);
+ return ImmutableList.of(all)
+ .subList(2, elements.length + 2);
+ }
+ })
+ .named("ImmutableList, middle subList")
+ .withFeatures(CollectionSize.ANY)
+ .createTestSuite());
+ suite.addTest(ListTestSuiteBuilder.using(new TestUnhashableListGenerator() {
+ @Override
+ public List<UnhashableObject> create(UnhashableObject[] elements) {
+ return ImmutableList.of(elements);
+ }
+ })
+ .suppressing(ListHashCodeTester.getHashCodeMethod())
+ .named("ImmutableList, unhashable values")
+ .withFeatures(CollectionSize.ANY)
+ .createTestSuite());
+ return suite;
+ }
+
+ private abstract static class TestUnhashableListGenerator
+ extends TestUnhashableCollectionGenerator<List<UnhashableObject>>
+ implements TestListGenerator<UnhashableObject> {
+ }
+
+ public static class CreationTests extends TestCase {
+ public void testCreation_noArgs() {
+ List<String> list = ImmutableList.of();
+ assertEquals(Collections.emptyList(), list);
+ }
+
+ public void testCreation_oneElement() {
+ List<String> list = ImmutableList.of("a");
+ assertEquals(Collections.singletonList("a"), list);
+ }
+
+ public void testCreation_twoElements() {
+ List<String> list = ImmutableList.of("a", "b");
+ assertEquals(Lists.newArrayList("a", "b"), list);
+ }
+
+ public void testCreation_threeElements() {
+ List<String> list = ImmutableList.of("a", "b", "c");
+ assertEquals(Lists.newArrayList("a", "b", "c"), list);
+ }
+
+ public void testCreation_fourElements() {
+ List<String> list = ImmutableList.of("a", "b", "c", "d");
+ assertEquals(Lists.newArrayList("a", "b", "c", "d"), list);
+ }
+
+ public void testCreation_fiveElements() {
+ List<String> list = ImmutableList.of("a", "b", "c", "d", "e");
+ assertEquals(Lists.newArrayList("a", "b", "c", "d", "e"), list);
+ }
+
+ public void testCreation_sixElements() {
+ List<String> list = ImmutableList.of("a", "b", "c", "d", "e", "f");
+ assertEquals(Lists.newArrayList("a", "b", "c", "d", "e", "f"), list);
+ }
+
+ public void testCreation_sevenElements() {
+ List<String> list = ImmutableList.of("a", "b", "c", "d", "e", "f", "g");
+ assertEquals(Lists.newArrayList("a", "b", "c", "d", "e", "f", "g"), list);
+ }
+
+ public void testCreation_eightElements() {
+ List<String> list = ImmutableList.of(
+ "a", "b", "c", "d", "e", "f", "g", "h");
+ assertEquals(Lists.newArrayList(
+ "a", "b", "c", "d", "e", "f", "g", "h"), list);
+ }
+
+ public void testCreation_nineElements() {
+ List<String> list = ImmutableList.of(
+ "a", "b", "c", "d", "e", "f", "g", "h", "i");
+ assertEquals(Lists.newArrayList(
+ "a", "b", "c", "d", "e", "f", "g", "h", "i"), list);
+ }
+
+ public void testCreation_tenElements() {
+ List<String> list = ImmutableList.of(
+ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j");
+ assertEquals(Lists.newArrayList(
+ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j"), list);
+ }
+
+ public void testCreation_elevenElements() {
+ List<String> list = ImmutableList.of(
+ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k");
+ assertEquals(Lists.newArrayList(
+ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"), list);
+ }
+
+ public void testCreation_twelveElements() {
+ // now we'll get the varargs overload
+ List<String> list = ImmutableList.of(
+ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l");
+ assertEquals(Lists.newArrayList(
+ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l"), list);
+ }
+
+ public void testCreation_singletonNull() {
+ try {
+ ImmutableList.of((String) null);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testCreation_withNull() {
+ try {
+ ImmutableList.of("a", null, "b");
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testCreation_generic() {
+ List<String> a = ImmutableList.of("a");
+ // only verify that there is no compile warning
+ ImmutableList.of(a, a);
+ }
+
+ public void testCreation_emptyArray() {
+ String[] array = new String[0];
+ List<String> list = ImmutableList.of(array);
+ assertEquals(Collections.emptyList(), list);
+ }
+
+ public void testCreation_arrayOfOneElement() {
+ String[] array = new String[] { "a" };
+ List<String> list = ImmutableList.of(array);
+ assertEquals(Collections.singletonList("a"), list);
+ }
+
+ public void testCreation_arrayOfArray() {
+ String[] array = new String[] { "a" };
+ List<String[]> list = ImmutableList.<String[]>of(array);
+ assertEquals(Collections.singletonList(array), list);
+ }
+
+ public void testCreation_arrayContainingOnlyNull() {
+ String[] array = new String[] { null };
+ try {
+ ImmutableList.of(array);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testCopyOf_collection_empty() {
+ // "<String>" is required to work around a javac 1.5 bug.
+ Collection<String> c = MinimalCollection.<String>of();
+ List<String> list = ImmutableList.copyOf(c);
+ assertEquals(Collections.emptyList(), list);
+ }
+
+ public void testCopyOf_collection_oneElement() {
+ Collection<String> c = MinimalCollection.of("a");
+ List<String> list = ImmutableList.copyOf(c);
+ assertEquals(Collections.singletonList("a"), list);
+ }
+
+ public void testCopyOf_collection_general() {
+ Collection<String> c = MinimalCollection.of("a", "b", "a");
+ List<String> list = ImmutableList.copyOf(c);
+ assertEquals(asList("a", "b", "a"), list);
+ List<String> mutableList = asList("a", "b");
+ list = ImmutableList.copyOf(mutableList);
+ mutableList.set(0, "c");
+ assertEquals(asList("a", "b"), list);
+ }
+
+ public void testCopyOf_collectionContainingNull() {
+ Collection<String> c = MinimalCollection.of("a", null, "b");
+ try {
+ ImmutableList.copyOf(c);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testCopyOf_iterator_empty() {
+ Iterator<String> iterator = Iterators.emptyIterator();
+ List<String> list = ImmutableList.copyOf(iterator);
+ assertEquals(Collections.emptyList(), list);
+ }
+
+ public void testCopyOf_iterator_oneElement() {
+ Iterator<String> iterator = Iterators.singletonIterator("a");
+ List<String> list = ImmutableList.copyOf(iterator);
+ assertEquals(Collections.singletonList("a"), list);
+ }
+
+ public void testCopyOf_iterator_general() {
+ Iterator<String> iterator = asList("a", "b", "a").iterator();
+ List<String> list = ImmutableList.copyOf(iterator);
+ assertEquals(asList("a", "b", "a"), list);
+ }
+
+ public void testCopyOf_iteratorContainingNull() {
+ Iterator<String> iterator = asList("a", null, "b").iterator();
+ try {
+ ImmutableList.copyOf(iterator);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ private static class CountingIterable implements Iterable<String> {
+ int count = 0;
+ public Iterator<String> iterator() {
+ count++;
+ return asList("a", "b", "a").iterator();
+ }
+ }
+
+ public void testCopyOf_plainIterable() {
+ CountingIterable iterable = new CountingIterable();
+ List<String> list = ImmutableList.copyOf(iterable);
+ assertEquals(asList("a", "b", "a"), list);
+ }
+
+ public void testCopyOf_plainIterable_iteratesOnce() {
+ CountingIterable iterable = new CountingIterable();
+ List<String> list = ImmutableList.copyOf(iterable);
+ assertEquals(1, iterable.count);
+ }
+
+ public void testCopyOf_shortcut_empty() {
+ Collection<String> c = ImmutableList.of();
+ assertSame(c, ImmutableList.copyOf(c));
+ }
+
+ public void testCopyOf_shortcut_singleton() {
+ Collection<String> c = ImmutableList.of("a");
+ assertSame(c, ImmutableList.copyOf(c));
+ }
+
+ public void testCopyOf_shortcut_immutableList() {
+ Collection<String> c = ImmutableList.of("a", "b", "c");
+ assertSame(c, ImmutableList.copyOf(c));
+ }
+
+ enum WrapWithIterable { WRAP, NO_WRAP }
+
+ private static void runConcurrentlyMutatedTest(
+ Collection<Integer> initialContents,
+ Iterable<ListFrobber> actionsToPerformConcurrently,
+ WrapWithIterable wrap) {
+ ConcurrentlyMutatedList<Integer> concurrentlyMutatedList =
+ newConcurrentlyMutatedList(
+ initialContents, actionsToPerformConcurrently);
+
+ Iterable<Integer> iterableToCopy = wrap == WrapWithIterable.WRAP
+ ? unmodifiableIterable(concurrentlyMutatedList)
+ : concurrentlyMutatedList;
+
+ ImmutableList<Integer> copyOfIterable =
+ ImmutableList.copyOf(iterableToCopy);
+
+ assertTrue(concurrentlyMutatedList.getAllStates()
+ .contains(copyOfIterable));
+ // Check that it's a RegularImmutableList iff it is nonempty:
+ assertEquals(copyOfIterable.size() == 0, copyOfIterable.isEmpty());
+ }
+
+ private static void runConcurrentlyMutatedTest(WrapWithIterable wrap) {
+ /*
+ * TODO: Iterate over many array sizes and all possible operation lists,
+ * performing adds and removes in different ways.
+ */
+ runConcurrentlyMutatedTest(
+ elements(),
+ ops(add(1), add(2)),
+ wrap);
+
+ runConcurrentlyMutatedTest(
+ elements(),
+ ops(add(1), nop()),
+ wrap);
+
+ runConcurrentlyMutatedTest(
+ elements(),
+ ops(add(1), remove()),
+ wrap);
+
+ runConcurrentlyMutatedTest(
+ elements(),
+ ops(nop(), add(1)),
+ wrap);
+
+ runConcurrentlyMutatedTest(
+ elements(1),
+ ops(remove(), nop()),
+ wrap);
+
+ runConcurrentlyMutatedTest(
+ elements(1),
+ ops(remove(), add(2)),
+ wrap);
+
+ runConcurrentlyMutatedTest(
+ elements(1, 2),
+ ops(remove(), remove()),
+ wrap);
+
+ runConcurrentlyMutatedTest(
+ elements(1, 2),
+ ops(remove(), nop()),
+ wrap);
+
+ runConcurrentlyMutatedTest(
+ elements(1, 2),
+ ops(remove(), add(3)),
+ wrap);
+
+ runConcurrentlyMutatedTest(
+ elements(1, 2),
+ ops(nop(), remove()),
+ wrap);
+
+ runConcurrentlyMutatedTest(
+ elements(1, 2, 3),
+ ops(remove(), remove()),
+ wrap);
+ }
+
+ private static ImmutableList<Integer> elements(Integer... elements) {
+ return ImmutableList.of(elements);
+ }
+
+ private static ImmutableList<ListFrobber> ops(ListFrobber... elements) {
+ return ImmutableList.of(elements);
+ }
+
+ public void testCopyOf_concurrentlyMutatedList() {
+ runConcurrentlyMutatedTest(WrapWithIterable.NO_WRAP);
+ }
+
+ public void testCopyOf_concurrentlyMutatedIterable() {
+ runConcurrentlyMutatedTest(WrapWithIterable.WRAP);
+ }
+
+ /** An operation to perform on a list. */
+ interface ListFrobber {
+ void perform(List<Integer> list);
+ }
+
+ static final ListFrobber add(final int element) {
+ return new ListFrobber() {
+ public void perform(List<Integer> list) {
+ list.add(0, element);
+ }
+ };
+ }
+
+ static final ListFrobber remove() {
+ return new ListFrobber() {
+ public void perform(List<Integer> list) {
+ list.remove(0);
+ }
+ };
+ }
+
+ static final ListFrobber nop() {
+ return new ListFrobber() {
+ public void perform(List<Integer> list) {
+ }
+ };
+ }
+
+ /**
+ * A list that mutates itself after every call to each of its {@link List}
+ * methods.
+ */
+ interface ConcurrentlyMutatedList<E> extends List<E> {
+ /**
+ * The elements of a {@link ConcurrentlyMutatedList} are added and removed
+ * over time. This method returns every state that the list has passed
+ * through at some point.
+ */
+ Set<List<E>> getAllStates();
+ }
+
+ /**
+ * Returns a {@link ConcurrentlyMutatedList} that performs the given
+ * operations as its concurrent modifications. The mutations occur in the
+ * same thread as the triggering method call.
+ */
+ private static ConcurrentlyMutatedList<Integer> newConcurrentlyMutatedList(
+ final Collection<Integer> initialContents,
+ final Iterable<ListFrobber> actionsToPerformConcurrently) {
+ InvocationHandler invocationHandler = new InvocationHandler() {
+ final CopyOnWriteArrayList<Integer> delegate =
+ new CopyOnWriteArrayList<Integer>(initialContents);
+
+ final Method getAllStatesMethod = getOnlyElement(asList(
+ ConcurrentlyMutatedList.class.getDeclaredMethods()));
+
+ final Iterator<ListFrobber> remainingActions =
+ actionsToPerformConcurrently.iterator();
+
+ final Set<List<Integer>> allStates = newHashSet();
+
+ public Object invoke(Object proxy, Method method,
+ Object[] args) throws Throwable {
+ return method.equals(getAllStatesMethod)
+ ? getAllStates()
+ : invokeListMethod(method, args);
+ }
+
+ private Set<List<Integer>> getAllStates() {
+ return allStates;
+ }
+
+ private Object invokeListMethod(Method method, Object[] args)
+ throws Throwable {
+ try {
+ Object returnValue = method.invoke(delegate, args);
+ mutateDelegate();
+ return returnValue;
+ } catch (InvocationTargetException e) {
+ throw e.getCause();
+ } catch (IllegalAccessException e) {
+ throw new AssertionError(e);
+ }
+ }
+
+ private void mutateDelegate() {
+ allStates.add(ImmutableList.copyOf(delegate));
+ remainingActions.next().perform(delegate);
+ allStates.add(ImmutableList.copyOf(delegate));
+ }
+ };
+
+ @SuppressWarnings("unchecked")
+ ConcurrentlyMutatedList<Integer> list =
+ (ConcurrentlyMutatedList<Integer>) newProxyInstance(
+ ImmutableListTest.CreationTests.class.getClassLoader(),
+ new Class[] {ConcurrentlyMutatedList.class}, invocationHandler);
+ return list;
+ }
+
+ public void testNullPointers() throws Exception {
+ NullPointerTester tester = new NullPointerTester();
+ tester.testAllPublicStaticMethods(ImmutableList.class);
+ // TODO: get this re-enabled
+ // tester.testAllPublicInstanceMethods(ImmutableList.of(1, 2, 3));
+ }
+
+ public void testSerialization_empty() {
+ Collection<String> c = ImmutableList.of();
+ assertSame(c, SerializableTester.reserialize(c));
+ }
+
+ public void testSerialization_singleton() {
+ Collection<String> c = ImmutableList.of("a");
+ ImmutableList<String> copy = (SingletonImmutableList<String>)
+ SerializableTester.reserializeAndAssert(c);
+ }
+
+ public void testSerialization_multiple() {
+ Collection<String> c = ImmutableList.of("a", "b", "c");
+ SerializableTester.reserializeAndAssert(c);
+ }
+
+ public void testEquals_immutableList() {
+ Collection<String> c = ImmutableList.of("a", "b", "c");
+ assertEquals(c, ImmutableList.of("a", "b", "c"));
+ assertNotEqual(c, ImmutableList.of("a", "c", "b"));
+ assertNotEqual(c, ImmutableList.of("a", "b"));
+ assertNotEqual(c, ImmutableList.of("a", "b", "c", "d"));
+ }
+
+ public void testBuilderAdd() {
+ ImmutableList<String> list = new ImmutableList.Builder<String>()
+ .add("a")
+ .add("b")
+ .add("a")
+ .add("c")
+ .build();
+ assertEquals(asList("a", "b", "a", "c"), list);
+ }
+
+ public void testBuilderAdd_varargs() {
+ ImmutableList<String> list = new ImmutableList.Builder<String>()
+ .add("a", "b", "a", "c")
+ .build();
+ assertEquals(asList("a", "b", "a", "c"), list);
+ }
+
+ public void testBuilderAddAll_iterable() {
+ List<String> a = asList("a", "b");
+ List<String> b = asList("c", "d");
+ ImmutableList<String> list = new ImmutableList.Builder<String>()
+ .addAll(a)
+ .addAll(b)
+ .build();
+ assertEquals(asList( "a", "b", "c", "d"), list);
+ b.set(0, "f");
+ assertEquals(asList( "a", "b", "c", "d"), list);
+ }
+
+ public void testBuilderAddAll_iterator() {
+ List<String> a = asList("a", "b");
+ List<String> b = asList("c", "d");
+ ImmutableList<String> list = new ImmutableList.Builder<String>()
+ .addAll(a.iterator())
+ .addAll(b.iterator())
+ .build();
+ assertEquals(asList( "a", "b", "c", "d"), list);
+ b.set(0, "f");
+ assertEquals(asList( "a", "b", "c", "d"), list);
+ }
+
+ public void testComplexBuilder() {
+ List<Integer> colorElem = asList(0x00, 0x33, 0x66, 0x99, 0xCC, 0xFF);
+ ImmutableList.Builder<Integer> webSafeColorsBuilder
+ = ImmutableList.builder();
+ for (Integer red : colorElem) {
+ for (Integer green : colorElem) {
+ for (Integer blue : colorElem) {
+ webSafeColorsBuilder.add((red << 16) + (green << 8) + blue);
+ }
+ }
+ }
+ ImmutableList<Integer> webSafeColors = webSafeColorsBuilder.build();
+ assertEquals(216, webSafeColors.size());
+ Integer[] webSafeColorArray =
+ webSafeColors.toArray(new Integer[webSafeColors.size()]);
+ assertEquals(0x000000, (int) webSafeColorArray[0]);
+ assertEquals(0x000033, (int) webSafeColorArray[1]);
+ assertEquals(0x000066, (int) webSafeColorArray[2]);
+ assertEquals(0x003300, (int) webSafeColorArray[6]);
+ assertEquals(0x330000, (int) webSafeColorArray[36]);
+ assertEquals(0x000066, (int) webSafeColors.get(2));
+ assertEquals(0x003300, (int) webSafeColors.get(6));
+ ImmutableList<Integer> addedColor
+ = webSafeColorsBuilder.add(0x00BFFF).build();
+ assertEquals("Modifying the builder should not have changed any already"
+ + " built sets", 216, webSafeColors.size());
+ assertEquals("the new array should be one bigger than webSafeColors",
+ 217, addedColor.size());
+ Integer[] appendColorArray =
+ addedColor.toArray(new Integer[addedColor.size()]);
+ assertEquals(0x00BFFF, (int) appendColorArray[216]);
+ }
+
+ public void testBuilderAddHandlesNullsCorrectly() {
+ ImmutableList.Builder<String> builder = ImmutableList.builder();
+ try {
+ builder.add((String) null);
+ fail("expected NullPointerException");
+ } catch (NullPointerException expected) {
+ }
+
+ try {
+ builder.add((String[]) null);
+ fail("expected NullPointerException");
+ } catch (NullPointerException expected) {
+ }
+
+ try {
+ builder.add("a", null, "b");
+ fail("expected NullPointerException");
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testBuilderAddAllHandlesNullsCorrectly() {
+ ImmutableList.Builder<String> builder = ImmutableList.builder();
+ try {
+ builder.addAll((Iterable<String>) null);
+ fail("expected NullPointerException");
+ } catch (NullPointerException expected) {
+ }
+
+ try {
+ builder.addAll((Iterator<String>) null);
+ fail("expected NullPointerException");
+ } catch (NullPointerException expected) {
+ }
+
+ builder = ImmutableList.builder();
+ List<String> listWithNulls = asList("a", null, "b");
+ try {
+ builder.addAll(listWithNulls);
+ fail("expected NullPointerException");
+ } catch (NullPointerException expected) {
+ }
+
+ builder = ImmutableList.builder();
+ Iterator<String> iteratorWithNulls = asList("a", null, "b").iterator();
+ try {
+ builder.addAll(iteratorWithNulls);
+ fail("expected NullPointerException");
+ } catch (NullPointerException expected) {
+ }
+
+ Iterable<String> iterableWithNulls = MinimalIterable.of("a", null, "b");
+ try {
+ builder.addAll(iterableWithNulls);
+ fail("expected NullPointerException");
+ } catch (NullPointerException expected) {
+ }
+ }
+ }
+}
diff --git a/test/com/google/common/collect/ImmutableMapTest.java b/test/com/google/common/collect/ImmutableMapTest.java
new file mode 100644
index 0000000..12e3103
--- /dev/null
+++ b/test/com/google/common/collect/ImmutableMapTest.java
@@ -0,0 +1,578 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.base.Joiner;
+import com.google.common.collect.ImmutableMap.Builder;
+import com.google.common.collect.testing.CollectionTestSuiteBuilder;
+import com.google.common.collect.testing.MapInterfaceTest;
+import com.google.common.collect.testing.MinimalSet;
+import com.google.common.collect.testing.ReserializingTestCollectionGenerator;
+import com.google.common.collect.testing.ReserializingTestSetGenerator;
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.SampleElements.Colliders;
+import com.google.common.collect.testing.SampleElements.Unhashables;
+import com.google.common.collect.testing.SetTestSuiteBuilder;
+import com.google.common.collect.testing.TestCollectionGenerator;
+import com.google.common.collect.testing.TestMapEntrySetGenerator;
+import com.google.common.collect.testing.TestStringSetGenerator;
+import com.google.common.collect.testing.TestUnhashableCollectionGenerator;
+import com.google.common.collect.testing.UnhashableObject;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.SetFeature;
+import com.google.common.testutils.NullPointerTester;
+import com.google.common.testutils.SerializableTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+/**
+ * Tests for {@link ImmutableMap}.
+ *
+ * @author Kevin Bourrillion
+ * @author Jesse Wilson
+ */
+public class ImmutableMapTest extends TestCase {
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite();
+ suite.addTestSuite(ImmutableMapTest.class);
+
+ suite.addTest(SetTestSuiteBuilder.using(keySetGenerator())
+ .withFeatures(
+ CollectionSize.ANY,
+ CollectionFeature.KNOWN_ORDER,
+ SetFeature.REJECTS_DUPLICATES_AT_CREATION)
+ .named("ImmutableMap.keySet")
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(entrySetGenerator())
+ .withFeatures(
+ CollectionSize.ANY,
+ CollectionFeature.KNOWN_ORDER,
+ SetFeature.REJECTS_DUPLICATES_AT_CREATION)
+ .named("ImmutableMap.entrySet")
+ .createTestSuite());
+
+ suite.addTest(CollectionTestSuiteBuilder.using(valuesGenerator())
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .named("ImmutableMap.values")
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(
+ ReserializingTestSetGenerator.newInstance(keySetGenerator()))
+ .withFeatures(
+ CollectionSize.ANY,
+ CollectionFeature.KNOWN_ORDER,
+ SetFeature.REJECTS_DUPLICATES_AT_CREATION)
+ .named("ImmutableMap.keySet, reserialized")
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(
+ ReserializingTestSetGenerator.newInstance(entrySetGenerator()))
+ .withFeatures(
+ CollectionSize.ANY,
+ CollectionFeature.KNOWN_ORDER,
+ SetFeature.REJECTS_DUPLICATES_AT_CREATION)
+ .named("ImmutableMap.entrySet, reserialized")
+ .createTestSuite());
+
+ suite.addTest(CollectionTestSuiteBuilder.using(
+ ReserializingTestCollectionGenerator.newInstance(valuesGenerator()))
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .named("ImmutableMap.values, reserialized")
+ .createTestSuite());
+
+ suite.addTest(CollectionTestSuiteBuilder.using(unhashableValuesGenerator())
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .named("ImmutableMap.values, unhashable")
+ .createTestSuite());
+
+ return suite;
+ }
+
+ static TestMapEntrySetGenerator<String, String> entrySetGenerator() {
+ SampleElements.Strings sampleStrings = new SampleElements.Strings();
+ return new TestMapEntrySetGenerator<String, String>(
+ sampleStrings, sampleStrings) {
+ @Override public Set<Entry<String, String>> createFromEntries(
+ Entry<String, String>[] entries) {
+ Builder<String, String> builder = ImmutableMap.builder();
+ for (Entry<String, String> entry : entries) {
+ builder.put(entry.getKey(), entry.getValue());
+ }
+ return builder.build().entrySet();
+ }
+ };
+ }
+
+ static TestStringSetGenerator keySetGenerator() {
+ return new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ Builder<String, Integer> builder = ImmutableMap.builder();
+ for (String key : elements) {
+ builder.put(key, key.length());
+ }
+ return builder.build().keySet();
+ }
+ };
+ }
+
+ static TestCollectionGenerator<String> valuesGenerator() {
+ return new TestCollectionGenerator<String>() {
+ public SampleElements<String> samples() {
+ return new SampleElements.Strings();
+ }
+
+ public Collection<String> create(Object... elements) {
+ Builder<Object, String> builder = ImmutableMap.builder();
+ for (Object key : elements) {
+ builder.put(key, key.toString());
+ }
+ return builder.build().values();
+ }
+
+ public String[] createArray(int length) {
+ return new String[length];
+ }
+
+ public List<String> order(List<String> insertionOrder) {
+ return insertionOrder;
+ }
+ };
+ }
+
+ static TestCollectionGenerator<UnhashableObject> unhashableValuesGenerator() {
+ return
+ new TestUnhashableCollectionGenerator<Collection<UnhashableObject>>() {
+ @Override public Collection<UnhashableObject> create(
+ UnhashableObject[] elements) {
+ Builder<Integer, UnhashableObject> builder = ImmutableMap.builder();
+ int key = 1;
+ for (UnhashableObject value : elements) {
+ builder.put(key++, value);
+ }
+ return builder.build().values();
+ }
+ };
+ }
+
+ public abstract static class AbstractMapTests<K, V>
+ extends MapInterfaceTest<K, V> {
+ public AbstractMapTests() {
+ super(false, false, false, false, false);
+ }
+
+ @Override protected Map<K, V> makeEmptyMap() {
+ throw new UnsupportedOperationException();
+ }
+
+ private static final Joiner joiner = Joiner.on(", ");
+
+ @Override protected void assertMoreInvariants(Map<K, V> map) {
+ // TODO: can these be moved to MapInterfaceTest?
+ for (Entry<K, V> entry : map.entrySet()) {
+ assertEquals(entry.getKey() + "=" + entry.getValue(),
+ entry.toString());
+ }
+
+ assertEquals("{" + joiner.join(map.entrySet()) + "}",
+ map.toString());
+ assertEquals("[" + joiner.join(map.entrySet()) + "]",
+ map.entrySet().toString());
+ assertEquals("[" + joiner.join(map.keySet()) + "]",
+ map.keySet().toString());
+ assertEquals("[" + joiner.join(map.values()) + "]",
+ map.values().toString());
+
+ assertEquals(MinimalSet.from(map.entrySet()), map.entrySet());
+ assertEquals(Sets.newHashSet(map.keySet()), map.keySet());
+ }
+ }
+
+ public static class MapTests extends AbstractMapTests<String, Integer> {
+ @Override protected Map<String, Integer> makeEmptyMap() {
+ return ImmutableMap.of();
+ }
+
+ @Override protected Map<String, Integer> makePopulatedMap() {
+ return ImmutableMap.of("one", 1, "two", 2, "three", 3);
+ }
+
+ @Override protected String getKeyNotInPopulatedMap() {
+ return "minus one";
+ }
+
+ @Override protected Integer getValueNotInPopulatedMap() {
+ return -1;
+ }
+ }
+
+ public static class SingletonMapTests
+ extends AbstractMapTests<String, Integer> {
+ @Override protected Map<String, Integer> makePopulatedMap() {
+ return ImmutableMap.of("one", 1);
+ }
+
+ @Override protected String getKeyNotInPopulatedMap() {
+ return "minus one";
+ }
+
+ @Override protected Integer getValueNotInPopulatedMap() {
+ return -1;
+ }
+ }
+
+ public static class ReserializedMapTests
+ extends AbstractMapTests<String, Integer> {
+ @Override protected Map<String, Integer> makePopulatedMap() {
+ return SerializableTester.reserialize(
+ ImmutableMap.of("one", 1, "two", 2, "three", 3));
+ }
+
+ @Override protected String getKeyNotInPopulatedMap() {
+ return "minus one";
+ }
+
+ @Override protected Integer getValueNotInPopulatedMap() {
+ return -1;
+ }
+ }
+
+ public static class MapTestsWithBadHashes
+ extends AbstractMapTests<Object, Integer> {
+
+ @Override protected Map<Object, Integer> makeEmptyMap() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override protected Map<Object, Integer> makePopulatedMap() {
+ Colliders colliders = new Colliders();
+ return ImmutableMap.of(
+ colliders.e0, 0,
+ colliders.e1, 1,
+ colliders.e2, 2,
+ colliders.e3, 3);
+ }
+
+ @Override protected Object getKeyNotInPopulatedMap() {
+ return new Colliders().e4;
+ }
+
+ @Override protected Integer getValueNotInPopulatedMap() {
+ return 4;
+ }
+ }
+
+ public static class MapTestsWithUnhashableValues
+ extends AbstractMapTests<Integer, UnhashableObject> {
+ @Override protected Map<Integer, UnhashableObject> makeEmptyMap() {
+ return ImmutableMap.of();
+ }
+
+ @Override protected Map<Integer, UnhashableObject> makePopulatedMap() {
+ Unhashables unhashables = new Unhashables();
+ return ImmutableMap.of(
+ 0, unhashables.e0, 1, unhashables.e1, 2, unhashables.e2);
+ }
+
+ @Override protected Integer getKeyNotInPopulatedMap() {
+ return 3;
+ }
+
+ @Override protected UnhashableObject getValueNotInPopulatedMap() {
+ return new Unhashables().e3;
+ }
+ }
+
+ public static class MapTestsWithSingletonUnhashableValue
+ extends MapTestsWithUnhashableValues {
+ @Override protected Map<Integer, UnhashableObject> makePopulatedMap() {
+ Unhashables unhashables = new Unhashables();
+ return ImmutableMap.of(0, unhashables.e0);
+ }
+ }
+
+ public static class CreationTests extends TestCase {
+ public void testEmptyBuilder() {
+ ImmutableMap<String, Integer> map
+ = new Builder<String, Integer>().build();
+ assertEquals(Collections.<String, Integer>emptyMap(), map);
+ }
+
+ public void testSingletonBuilder() {
+ ImmutableMap<String, Integer> map = new Builder<String, Integer>()
+ .put("one", 1)
+ .build();
+ assertMapEquals(map, "one", 1);
+ }
+
+ public void testBuilder() {
+ ImmutableMap<String, Integer> map = new Builder<String, Integer>()
+ .put("one", 1)
+ .put("two", 2)
+ .put("three", 3)
+ .put("four", 4)
+ .put("five", 5)
+ .build();
+ assertMapEquals(map,
+ "one", 1, "two", 2, "three", 3, "four", 4, "five", 5);
+ }
+
+ public void testBuilderPutAllWithEmptyMap() {
+ ImmutableMap<String, Integer> map = new Builder<String, Integer>()
+ .putAll(Collections.<String, Integer>emptyMap())
+ .build();
+ assertEquals(Collections.<String, Integer>emptyMap(), map);
+ }
+
+ public void testBuilderPutAll() {
+ Map<String, Integer> toPut = new LinkedHashMap<String, Integer>();
+ toPut.put("one", 1);
+ toPut.put("two", 2);
+ toPut.put("three", 3);
+ Map<String, Integer> moreToPut = new LinkedHashMap<String, Integer>();
+ moreToPut.put("four", 4);
+ moreToPut.put("five", 5);
+
+ ImmutableMap<String, Integer> map = new Builder<String, Integer>()
+ .putAll(toPut)
+ .putAll(moreToPut)
+ .build();
+ assertMapEquals(map,
+ "one", 1, "two", 2, "three", 3, "four", 4, "five", 5);
+ }
+
+ public void testBuilderReuse() {
+ Builder<String, Integer> builder = new Builder<String, Integer>();
+ ImmutableMap<String, Integer> mapOne = builder
+ .put("one", 1)
+ .put("two", 2)
+ .build();
+ ImmutableMap<String, Integer> mapTwo = builder
+ .put("three", 3)
+ .put("four", 4)
+ .build();
+
+ assertMapEquals(mapOne, "one", 1, "two", 2);
+ assertMapEquals(mapTwo, "one", 1, "two", 2, "three", 3, "four", 4);
+ }
+
+ public void testBuilderPutNullKey() {
+ Builder<String, Integer> builder = new Builder<String, Integer>();
+ try {
+ builder.put(null, 1);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testBuilderPutNullValue() {
+ Builder<String, Integer> builder = new Builder<String, Integer>();
+ try {
+ builder.put("one", null);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testBuilderPutNullKeyViaPutAll() {
+ Builder<String, Integer> builder = new Builder<String, Integer>();
+ try {
+ builder.putAll(Collections.<String, Integer>singletonMap(null, 1));
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testBuilderPutNullValueViaPutAll() {
+ Builder<String, Integer> builder = new Builder<String, Integer>();
+ try {
+ builder.putAll(Collections.<String, Integer>singletonMap("one", null));
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testPuttingTheSameKeyTwiceThrowsOnBuild() {
+ Builder<String, Integer> builder = new Builder<String, Integer>()
+ .put("one", 1)
+ .put("one", 1); // throwing on this line would be even better
+
+ try {
+ builder.build();
+ fail();
+ } catch (IllegalArgumentException expected) {
+ assertEquals("duplicate key: one", expected.getMessage());
+ }
+ }
+
+ public void testOf() {
+ assertMapEquals(
+ ImmutableMap.of("one", 1),
+ "one", 1);
+ assertMapEquals(
+ ImmutableMap.of("one", 1, "two", 2),
+ "one", 1, "two", 2);
+ assertMapEquals(
+ ImmutableMap.of("one", 1, "two", 2, "three", 3),
+ "one", 1, "two", 2, "three", 3);
+ assertMapEquals(
+ ImmutableMap.of("one", 1, "two", 2, "three", 3, "four", 4),
+ "one", 1, "two", 2, "three", 3, "four", 4);
+ assertMapEquals(
+ ImmutableMap.of("one", 1, "two", 2, "three", 3, "four", 4, "five", 5),
+ "one", 1, "two", 2, "three", 3, "four", 4, "five", 5);
+ }
+
+ public void testOfNullKey() {
+ try {
+ ImmutableMap.of(null, 1);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+
+ try {
+ ImmutableMap.of("one", 1, null, 2);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testOfNullValue() {
+ try {
+ ImmutableMap.of("one", null);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+
+ try {
+ ImmutableMap.of("one", 1, "two", null);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testOfWithDuplicateKey() {
+ try {
+ ImmutableMap.of("one", 1, "one", 1);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ assertEquals("duplicate key: one", expected.getMessage());
+ }
+ }
+
+ public void testCopyOfEmptyMap() {
+ ImmutableMap<String, Integer> copy
+ = ImmutableMap.copyOf(Collections.<String, Integer>emptyMap());
+ assertEquals(Collections.<String, Integer>emptyMap(), copy);
+ assertSame(copy, ImmutableMap.copyOf(copy));
+ }
+
+ public void testCopyOfSingletonMap() {
+ ImmutableMap<String, Integer> copy
+ = ImmutableMap.copyOf(Collections.singletonMap("one", 1));
+ assertMapEquals(copy, "one", 1);
+ assertSame(copy, ImmutableMap.copyOf(copy));
+ }
+
+ public void testCopyOf() {
+ Map<String, Integer> original = new LinkedHashMap<String, Integer>();
+ original.put("one", 1);
+ original.put("two", 2);
+ original.put("three", 3);
+
+ ImmutableMap<String, Integer> copy = ImmutableMap.copyOf(original);
+ assertMapEquals(copy, "one", 1, "two", 2, "three", 3);
+ assertSame(copy, ImmutableMap.copyOf(copy));
+ }
+ }
+
+ public void testNullPointers() throws Exception {
+ NullPointerTester tester = new NullPointerTester();
+ tester.testAllPublicStaticMethods(ImmutableMap.class);
+ tester.testAllPublicInstanceMethods(
+ new ImmutableMap.Builder<Object, Object>());
+ if (false) {
+ // these tests aren't included due to a bug in NullPointerTester
+ // TODO: fix that bug, add these tests
+ tester.testAllPublicInstanceMethods(ImmutableMap.of());
+ tester.testAllPublicInstanceMethods(ImmutableMap.of("one", 1));
+ tester.testAllPublicInstanceMethods(
+ ImmutableMap.of("one", 1, "two", 2, "three", 3));
+ }
+ }
+
+ private static <K, V> void assertMapEquals(Map<K, V> map,
+ Object... alternatingKeysAndValues) {
+ assertEquals(map.size(), alternatingKeysAndValues.length / 2);
+ int i = 0;
+ for (Entry<K, V> entry : map.entrySet()) {
+ assertEquals(alternatingKeysAndValues[i++], entry.getKey());
+ assertEquals(alternatingKeysAndValues[i++], entry.getValue());
+ }
+ }
+
+ private static class IntHolder implements Serializable {
+ public int value;
+
+ public IntHolder(int value) {
+ this.value = value;
+ }
+
+ @Override public boolean equals(Object o) {
+ return (o instanceof IntHolder) && ((IntHolder) o).value == value;
+ }
+
+ @Override public int hashCode() {
+ return value;
+ }
+
+ private static final long serialVersionUID = 5;
+ }
+
+ public void testMutableValues() {
+ IntHolder holderA = new IntHolder(1);
+ IntHolder holderB = new IntHolder(2);
+ Map<String, IntHolder> map = ImmutableMap.of("a", holderA, "b", holderB);
+ holderA.value = 3;
+ assertTrue(map.entrySet().contains(
+ Maps.immutableEntry("a", new IntHolder(3))));
+ Map<String, Integer> intMap = ImmutableMap.of("a", 3, "b", 2);
+ assertEquals(intMap.hashCode(), map.entrySet().hashCode());
+ assertEquals(intMap.hashCode(), map.hashCode());
+ }
+
+ public void testViewSerialization() {
+ Map<String, Integer> map = ImmutableMap.of("one", 1, "two", 2, "three", 3);
+ SerializableTester.reserializeAndAssert(map.entrySet());
+ SerializableTester.reserializeAndAssert(map.keySet());
+ assertEquals(Lists.newArrayList(map.values()),
+ Lists.newArrayList(SerializableTester.reserialize(map.values())));
+ }
+}
diff --git a/test/com/google/common/collect/ImmutableMultimapAsMapImplementsMapTest.java b/test/com/google/common/collect/ImmutableMultimapAsMapImplementsMapTest.java
new file mode 100644
index 0000000..cfa4d6b
--- /dev/null
+++ b/test/com/google/common/collect/ImmutableMultimapAsMapImplementsMapTest.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.testing.MapInterfaceTest;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Test {@link Multimap#asMap()} for an {@link ImmutableMultimap} with
+ * {@link MapInterfaceTest}.
+ *
+ * @author Jared Levy
+ */
+public class ImmutableMultimapAsMapImplementsMapTest
+ extends AbstractMultimapAsMapImplementsMapTest {
+
+ public ImmutableMultimapAsMapImplementsMapTest() {
+ super(false, false);
+ }
+
+ @Override protected Map<String, Collection<Integer>> makeEmptyMap() {
+ return ImmutableMultimap.<String, Integer>of().asMap();
+ }
+
+ @Override protected Map<String, Collection<Integer>> makePopulatedMap() {
+ Multimap<String, Integer> delegate = HashMultimap.create();
+ populate(delegate);
+ return ImmutableMultimap.copyOf(delegate).asMap();
+ }
+}
diff --git a/test/com/google/common/collect/ImmutableMultimapTest.java b/test/com/google/common/collect/ImmutableMultimapTest.java
new file mode 100644
index 0000000..f7204ba
--- /dev/null
+++ b/test/com/google/common/collect/ImmutableMultimapTest.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.SampleElements.Unhashables;
+import com.google.common.collect.testing.UnhashableObject;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for {@link ImmutableMultimap}.
+ *
+ * @author Jared Levy
+ */
+public class ImmutableMultimapTest extends TestCase {
+
+ // TODO: test ImmutableMultimap builder and factory methods
+
+ public void testCopyOf() {
+ ImmutableSetMultimap<String, String> setMultimap
+ = ImmutableSetMultimap.of("k1", "v1");
+ ImmutableMultimap<String, String> setMultimapCopy
+ = ImmutableMultimap.copyOf(setMultimap);
+ assertSame("copyOf(ImmutableSetMultimap) should not create a new instance",
+ setMultimap, setMultimapCopy);
+
+ ImmutableListMultimap<String, String> listMultimap
+ = ImmutableListMultimap.of("k1", "v1");
+ ImmutableMultimap<String, String> listMultimapCopy
+ = ImmutableMultimap.copyOf(listMultimap);
+ assertSame("copyOf(ImmutableListMultimap) should not create a new instance",
+ listMultimap, listMultimapCopy);
+ }
+
+ public void testUnhashableSingletonValue() {
+ SampleElements<UnhashableObject> unhashables = new Unhashables();
+ Multimap<Integer, UnhashableObject> multimap = ImmutableMultimap.of(
+ 0, unhashables.e0);
+ assertEquals(1, multimap.get(0).size());
+ assertTrue(multimap.get(0).contains(unhashables.e0));
+ }
+
+ public void testUnhashableMixedValues() {
+ SampleElements<UnhashableObject> unhashables = new Unhashables();
+ Multimap<Integer, Object> multimap = ImmutableMultimap.<Integer, Object>of(
+ 0, unhashables.e0, 2, "hey you", 0, unhashables.e1);
+ assertEquals(2, multimap.get(0).size());
+ assertTrue(multimap.get(0).contains(unhashables.e0));
+ assertTrue(multimap.get(0).contains(unhashables.e1));
+ assertTrue(multimap.get(2).contains("hey you"));
+ }
+}
diff --git a/test/com/google/common/collect/ImmutableMultisetTest.java b/test/com/google/common/collect/ImmutableMultisetTest.java
new file mode 100644
index 0000000..8def77e
--- /dev/null
+++ b/test/com/google/common/collect/ImmutableMultisetTest.java
@@ -0,0 +1,400 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.SetTestSuiteBuilder;
+import com.google.common.collect.testing.TestStringSetGenerator;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.google.MultisetTestSuiteBuilder;
+import com.google.common.collect.testing.google.TestStringMultisetGenerator;
+import com.google.common.collect.testing.google.UnmodifiableCollectionTests;
+import static com.google.common.testing.junit3.JUnitAsserts.assertContentsInOrder;
+import static com.google.common.testing.junit3.JUnitAsserts.assertNotEqual;
+import com.google.common.testutils.NullPointerTester;
+import com.google.common.testutils.SerializableTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import static java.util.Arrays.asList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Tests for {@link ImmutableMultiset}.
+ *
+ * @author Jared Levy
+ */
+public class ImmutableMultisetTest extends TestCase {
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite();
+ suite.addTestSuite(ImmutableMultisetTest.class);
+
+ suite.addTest(MultisetTestSuiteBuilder.using(
+ new TestStringMultisetGenerator() {
+ @Override protected Multiset<String> create(String[] elements) {
+ return ImmutableMultiset.of(elements);
+ }
+ })
+ .named("ImmutableMultiset")
+ .withFeatures(CollectionSize.ANY)
+ .createTestSuite());
+
+ suite.addTest(MultisetTestSuiteBuilder.using(
+ new TestStringMultisetGenerator() {
+ @Override protected Multiset<String> create(String[] elements) {
+ return SerializableTester.reserialize(
+ ImmutableMultiset.of(elements));
+ }
+ })
+ .named("ImmutableMultiset, reserialized")
+ .withFeatures(CollectionSize.ANY)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ return SerializableTester.reserialize(
+ ImmutableMultiset.of(elements).elementSet());
+ }
+ })
+ .named("ImmutableMultiset, element set")
+ .withFeatures(CollectionSize.ANY)
+ .createTestSuite());
+
+ return suite;
+ }
+
+ public void testCreation_noArgs() {
+ Multiset<String> multiset = ImmutableMultiset.of();
+ assertTrue(multiset.isEmpty());
+ }
+
+ public void testCreation_oneElement() {
+ Multiset<String> multiset = ImmutableMultiset.of("a");
+ assertEquals(HashMultiset.create(asList("a")), multiset);
+ }
+
+ public void testCreation_emptyArray() {
+ String[] array = new String[0];
+ Multiset<String> multiset = ImmutableMultiset.of(array);
+ assertTrue(multiset.isEmpty());
+ }
+
+ public void testCreation_arrayOfOneElement() {
+ String[] array = new String[] { "a" };
+ Multiset<String> multiset = ImmutableMultiset.of(array);
+ assertEquals(HashMultiset.create(asList("a")), multiset);
+ }
+
+ public void testCreation_arrayOfArray() {
+ String[] array = new String[] { "a" };
+ Multiset<String[]> multiset = ImmutableMultiset.<String[]>of(array);
+ Multiset<String[]> expected = HashMultiset.create();
+ expected.add(array);
+ assertEquals(expected, multiset);
+ }
+
+ public void testCreation_arrayContainingOnlyNull() {
+ String[] array = new String[] { null };
+ try {
+ ImmutableMultiset.of(array);
+ fail();
+ } catch (NullPointerException expected) {}
+ }
+
+ public void testCopyOf_collection_empty() {
+ // "<String>" is required to work around a javac 1.5 bug.
+ Collection<String> c = MinimalCollection.<String>of();
+ Multiset<String> multiset = ImmutableMultiset.copyOf(c);
+ assertTrue(multiset.isEmpty());
+ }
+
+ public void testCopyOf_collection_oneElement() {
+ Collection<String> c = MinimalCollection.of("a");
+ Multiset<String> multiset = ImmutableMultiset.copyOf(c);
+ assertEquals(HashMultiset.create(asList("a")), multiset);
+ }
+
+ public void testCopyOf_collection_general() {
+ Collection<String> c = MinimalCollection.of("a", "b", "a");
+ Multiset<String> multiset = ImmutableMultiset.copyOf(c);
+ assertEquals(HashMultiset.create(asList("a", "b", "a")), multiset);
+ }
+
+ public void testCopyOf_collectionContainingNull() {
+ Collection<String> c = MinimalCollection.of("a", null, "b");
+ try {
+ ImmutableMultiset.copyOf(c);
+ fail();
+ } catch (NullPointerException expected) {}
+ }
+
+ public void testCopyOf_multiset_empty() {
+ Multiset<String> c = HashMultiset.create();
+ Multiset<String> multiset = ImmutableMultiset.copyOf(c);
+ assertTrue(multiset.isEmpty());
+ }
+
+ public void testCopyOf_multiset_oneElement() {
+ Multiset<String> c = HashMultiset.create(asList("a"));
+ Multiset<String> multiset = ImmutableMultiset.copyOf(c);
+ assertEquals(HashMultiset.create(asList("a")), multiset);
+ }
+
+ public void testCopyOf_multiset_general() {
+ Multiset<String> c = HashMultiset.create(asList("a", "b", "a"));
+ Multiset<String> multiset = ImmutableMultiset.copyOf(c);
+ assertEquals(HashMultiset.create(asList("a", "b", "a")), multiset);
+ }
+
+ public void testCopyOf_multisetContainingNull() {
+ Multiset<String> c = HashMultiset.create(asList("a", null, "b"));
+ try {
+ ImmutableMultiset.copyOf(c);
+ fail();
+ } catch (NullPointerException expected) {}
+ }
+
+ public void testCopyOf_iterator_empty() {
+ Iterator<String> iterator = Iterators.emptyIterator();
+ Multiset<String> multiset = ImmutableMultiset.copyOf(iterator);
+ assertTrue(multiset.isEmpty());
+ }
+
+ public void testCopyOf_iterator_oneElement() {
+ Iterator<String> iterator = Iterators.singletonIterator("a");
+ Multiset<String> multiset = ImmutableMultiset.copyOf(iterator);
+ assertEquals(HashMultiset.create(asList("a")), multiset);
+ }
+
+ public void testCopyOf_iterator_general() {
+ Iterator<String> iterator = asList("a", "b", "a").iterator();
+ Multiset<String> multiset = ImmutableMultiset.copyOf(iterator);
+ assertEquals(HashMultiset.create(asList("a", "b", "a")), multiset);
+ }
+
+ public void testCopyOf_iteratorContainingNull() {
+ Iterator<String> iterator = asList("a", null, "b").iterator();
+ try {
+ ImmutableMultiset.copyOf(iterator);
+ fail();
+ } catch (NullPointerException expected) {}
+ }
+
+ private static class CountingIterable implements Iterable<String> {
+ int count = 0;
+ public Iterator<String> iterator() {
+ count++;
+ return asList("a", "b", "a").iterator();
+ }
+ }
+
+ public void testCopyOf_plainIterable() {
+ CountingIterable iterable = new CountingIterable();
+ Multiset<String> multiset = ImmutableMultiset.copyOf(iterable);
+ assertEquals(HashMultiset.create(asList("a", "b", "a")), multiset);
+ assertEquals(1, iterable.count);
+ }
+
+ public void testCopyOf_shortcut_empty() {
+ Collection<String> c = ImmutableMultiset.of();
+ assertSame(c, ImmutableMultiset.copyOf(c));
+ }
+
+ public void testCopyOf_shortcut_singleton() {
+ Collection<String> c = ImmutableMultiset.of("a");
+ assertSame(c, ImmutableMultiset.copyOf(c));
+ }
+
+ public void testCopyOf_shortcut_immutableMultiset() {
+ Collection<String> c = ImmutableMultiset.of("a", "b", "c");
+ assertSame(c, ImmutableMultiset.copyOf(c));
+ }
+
+ public void testBuilderAdd() {
+ ImmutableMultiset<String> multiset = new ImmutableMultiset.Builder<String>()
+ .add("a")
+ .add("b")
+ .add("a")
+ .add("c")
+ .build();
+ assertEquals(HashMultiset.create(asList("a", "b", "a", "c")), multiset);
+ }
+
+ public void testBuilderAddAll() {
+ List<String> a = asList("a", "b");
+ List<String> b = asList("c", "d");
+ ImmutableMultiset<String> multiset = new ImmutableMultiset.Builder<String>()
+ .addAll(a)
+ .addAll(b)
+ .build();
+ assertEquals(HashMultiset.create(asList("a", "b", "c", "d")), multiset);
+ }
+
+ public void testBuilderAddAllMultiset() {
+ Multiset<String> a = HashMultiset.create(asList("a", "b", "b"));
+ Multiset<String> b = HashMultiset.create(asList("c", "b"));
+ ImmutableMultiset<String> multiset = new ImmutableMultiset.Builder<String>()
+ .addAll(a)
+ .addAll(b)
+ .build();
+ assertEquals(
+ HashMultiset.create(asList("a", "b", "b", "b", "c")), multiset);
+ }
+
+ public void testBuilderAddAllIterator() {
+ Iterator<String> iterator = asList("a", "b", "a", "c").iterator();
+ ImmutableMultiset<String> multiset = new ImmutableMultiset.Builder<String>()
+ .addAll(iterator)
+ .build();
+ assertEquals(HashMultiset.create(asList("a", "b", "a", "c")), multiset);
+ }
+
+ public void testBuilderAddCopies() {
+ ImmutableMultiset<String> multiset = new ImmutableMultiset.Builder<String>()
+ .addCopies("a", 2)
+ .addCopies("b", 3)
+ .addCopies("c", 0)
+ .build();
+ assertEquals(
+ HashMultiset.create(asList("a", "a", "b", "b", "b")), multiset);
+ }
+
+ public void testBuilderSetCount() {
+ ImmutableMultiset<String> multiset = new ImmutableMultiset.Builder<String>()
+ .add("a")
+ .setCount("a", 2)
+ .setCount("b", 3)
+ .build();
+ assertEquals(
+ HashMultiset.create(asList("a", "a", "b", "b", "b")), multiset);
+ }
+
+ public void testBuilderAddHandlesNullsCorrectly() {
+ ImmutableMultiset.Builder<String> builder = ImmutableMultiset.builder();
+ try {
+ builder.add((String) null);
+ fail("expected NullPointerException");
+ } catch (NullPointerException expected) {}
+ }
+
+ public void testBuilderAddAllHandlesNullsCorrectly() {
+ ImmutableMultiset.Builder<String> builder = ImmutableMultiset.builder();
+ try {
+ builder.addAll((Collection<String>) null);
+ fail("expected NullPointerException");
+ } catch (NullPointerException expected) {}
+
+ builder = ImmutableMultiset.builder();
+ List<String> listWithNulls = asList("a", null, "b");
+ try {
+ builder.addAll(listWithNulls);
+ fail("expected NullPointerException");
+ } catch (NullPointerException expected) {}
+
+ builder = ImmutableMultiset.builder();
+ Multiset<String> multisetWithNull
+ = LinkedHashMultiset.create(asList("a", null, "b"));
+ try {
+ builder.addAll(multisetWithNull);
+ fail("expected NullPointerException");
+ } catch (NullPointerException expected) {}
+ }
+
+ public void testBuilderAddCopiesHandlesNullsCorrectly() {
+ ImmutableMultiset.Builder<String> builder = ImmutableMultiset.builder();
+ try {
+ builder.addCopies(null, 2);
+ fail("expected NullPointerException");
+ } catch (NullPointerException expected) {}
+ }
+
+ public void testBuilderAddCopiesIllegal() {
+ ImmutableMultiset.Builder<String> builder = ImmutableMultiset.builder();
+ try {
+ builder.addCopies("a", -2);
+ fail("expected IllegalArgumentException");
+ } catch (IllegalArgumentException expected) {}
+ }
+
+ public void testBuilderSetCountHandlesNullsCorrectly() {
+ ImmutableMultiset.Builder<String> builder = ImmutableMultiset.builder();
+ try {
+ builder.setCount(null, 2);
+ fail("expected NullPointerException");
+ } catch (NullPointerException expected) {}
+ }
+
+ public void testBuilderSetCountIllegal() {
+ ImmutableMultiset.Builder<String> builder = ImmutableMultiset.builder();
+ try {
+ builder.setCount("a", -2);
+ fail("expected IllegalArgumentException");
+ } catch (IllegalArgumentException expected) {}
+ }
+
+ public void testNullPointers() throws Exception {
+ NullPointerTester tester = new NullPointerTester();
+ tester.testAllPublicStaticMethods(ImmutableMultiset.class);
+ }
+
+ public void testSerialization_empty() {
+ Collection<String> c = ImmutableMultiset.of();
+ assertSame(c, SerializableTester.reserialize(c));
+ }
+
+ public void testSerialization_multiple() {
+ Collection<String> c = ImmutableMultiset.of("a", "b", "a");
+ Collection<String> copy = SerializableTester.reserializeAndAssert(c);
+ assertContentsInOrder(copy, "a", "a", "b");
+ }
+
+ public void testSerialization_elementSet() {
+ Multiset<String> c = ImmutableMultiset.of("a", "b", "a");
+ Collection<String> copy
+ = SerializableTester.reserializeAndAssert(c.elementSet());
+ assertContentsInOrder(copy, "a", "b");
+ }
+
+ public void testSerialization_entrySet() {
+ Multiset<String> c = ImmutableMultiset.of("a", "b", "c");
+ SerializableTester.reserializeAndAssert(c.entrySet());
+ }
+
+ public void testEquals_immutableMultiset() {
+ Collection<String> c = ImmutableMultiset.of("a", "b", "a");
+ assertEquals(c, ImmutableMultiset.of("a", "b", "a"));
+ assertEquals(c, ImmutableMultiset.of("a", "a", "b"));
+ assertNotEqual(c, ImmutableMultiset.of("a", "b"));
+ assertNotEqual(c, ImmutableMultiset.of("a", "b", "c", "d"));
+ }
+
+ public void testIterationOrder() {
+ Collection<String> c = ImmutableMultiset.of("a", "b", "a");
+ assertContentsInOrder(c, "a", "a", "b");
+ }
+
+ public void testMultisetWrites() {
+ Multiset<String> multiset = ImmutableMultiset.of("a", "b", "a");
+ UnmodifiableCollectionTests.assertMultisetIsUnmodifiable(multiset, "test");
+ }
+}
diff --git a/test/com/google/common/collect/ImmutableSetCollectionTest.java b/test/com/google/common/collect/ImmutableSetCollectionTest.java
new file mode 100644
index 0000000..71859ca
--- /dev/null
+++ b/test/com/google/common/collect/ImmutableSetCollectionTest.java
@@ -0,0 +1,273 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.testing.SetTestSuiteBuilder;
+import com.google.common.collect.testing.TestCollidingSetGenerator;
+import com.google.common.collect.testing.TestSetGenerator;
+import com.google.common.collect.testing.TestStringSetGenerator;
+import com.google.common.collect.testing.TestStringSortedSetGenerator;
+import com.google.common.collect.testing.TestUnhashableCollectionGenerator;
+import com.google.common.collect.testing.UnhashableObject;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.testers.SetHashCodeTester;
+import com.google.common.testutils.SerializableTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Set;
+import java.util.SortedSet;
+
+/**
+ * Collection tests for {@link ImmutableSet} and {@link ImmutableSortedSet}.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ */
+public class ImmutableSetCollectionTest extends TestCase {
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite();
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ return ImmutableSet.of(elements);
+ }
+ })
+ .named(ImmutableSetTest.class.getName())
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ Set<String> set = ImmutableSet.of(elements);
+ return SerializableTester.reserialize(set);
+ }
+ })
+ .named(ImmutableSetTest.class.getName() + ", reserialized")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestCollidingSetGenerator() {
+ public Set<Object> create(Object... elements) {
+ return ImmutableSet.of(elements);
+ }
+ })
+ .named(ImmutableSetTest.class.getName() + ", with bad hashes")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ // Make sure we get what we think we're getting, or else this test
+ // is pointless
+ @SuppressWarnings("cast")
+ @Override protected Set<String> create(String[] elements) {
+ return (ImmutableSet<String>)
+ ImmutableSet.of(elements[0], elements[0]);
+ }
+ })
+ .named(ImmutableSetTest.class.getName() + ", degenerate")
+ .withFeatures(CollectionSize.ONE, CollectionFeature.KNOWN_ORDER)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(
+ new TestStringSortedSetGenerator() {
+ @Override protected SortedSet<String> create(String[] elements) {
+ return ImmutableSortedSet.of(elements);
+ }
+ })
+ .named(ImmutableSortedSetTest.class.getName())
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(
+ new TestStringSortedSetGenerator() {
+ @Override protected SortedSet<String> create(String[] elements) {
+ SortedSet<String> set = ImmutableSortedSet.of(elements);
+ return SerializableTester.reserialize(set);
+ }
+ })
+ .named(ImmutableSortedSetTest.class.getName() + ", reserialized")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(
+ new TestStringSortedSetGenerator() {
+ @Override protected SortedSet<String> create(String[] elements) {
+ List<String> list = Lists.newArrayList(elements);
+ list.add("zzz");
+ return ImmutableSortedSet.copyOf(list)
+ .headSet("zzy");
+ }
+ })
+ .named(ImmutableSortedSetTest.class.getName() + ", headset")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(
+ new TestStringSortedSetGenerator() {
+ @Override protected SortedSet<String> create(String[] elements) {
+ List<String> list = Lists.newArrayList(elements);
+ list.add("\0");
+ return ImmutableSortedSet.copyOf(list)
+ .tailSet("\0\0");
+ }
+ })
+ .named(ImmutableSortedSetTest.class.getName() + ", tailset")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(
+ new TestStringSortedSetGenerator() {
+ @Override protected SortedSet<String> create(String[] elements) {
+ List<String> list = Lists.newArrayList(elements);
+ list.add("\0");
+ list.add("zzz");
+ return ImmutableSortedSet.copyOf(list)
+ .subSet("\0\0", "zzy");
+ }
+ })
+ .named(ImmutableSortedSetTest.class.getName() + ", subset")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(
+ new TestStringSortedSetGenerator() {
+ @Override protected SortedSet<String> create(String[] elements) {
+ List<String> list = Lists.newArrayList(elements);
+ list.add("zzz");
+ return SerializableTester.reserialize(
+ ImmutableSortedSet.copyOf(list).headSet("zzy"));
+ }
+ })
+ .named(
+ ImmutableSortedSetTest.class.getName() + ", headset, reserialized")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(
+ new TestStringSortedSetGenerator() {
+ @Override protected SortedSet<String> create(String[] elements) {
+ List<String> list = Lists.newArrayList(elements);
+ list.add("\0");
+ return SerializableTester.reserialize(
+ ImmutableSortedSet.copyOf(list).tailSet("\0\0"));
+ }
+ })
+ .named(
+ ImmutableSortedSetTest.class.getName() + ", tailset, reserialized")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(
+ new TestStringSortedSetGenerator() {
+ @Override protected SortedSet<String> create(String[] elements) {
+ List<String> list = Lists.newArrayList(elements);
+ list.add("\0");
+ list.add("zzz");
+ return SerializableTester.reserialize(
+ ImmutableSortedSet.copyOf(list).subSet("\0\0", "zzy"));
+ }
+ })
+ .named(
+ ImmutableSortedSetTest.class.getName() + ", subset, reserialized")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .createTestSuite());
+
+ final Comparator<String> stringReversed = Collections.reverseOrder();
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected SortedSet<String> create(String[] elements) {
+ return ImmutableSortedSet.orderedBy(stringReversed)
+ .add(elements)
+ .build();
+ }
+
+ @Override public List<String> order(List<String> insertionOrder) {
+ Collections.sort(insertionOrder, Collections.reverseOrder());
+ return insertionOrder;
+ }
+ })
+ .named(ImmutableSortedSetTest.class.getName()
+ + ", explicit comparator, vararg")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .createTestSuite());
+
+ final Comparator<Comparable<?>> comparableReversed
+ = Collections.reverseOrder();
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected SortedSet<String> create(String[] elements) {
+ return new ImmutableSortedSet.Builder<String>(comparableReversed)
+ .add(elements)
+ .build();
+ }
+
+ @Override public List<String> order(List<String> insertionOrder) {
+ Collections.sort(insertionOrder, Collections.reverseOrder());
+ return insertionOrder;
+ }
+ })
+ .named(ImmutableSortedSetTest.class.getName()
+ + ", explicit superclass comparator, iterable")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected SortedSet<String> create(String[] elements) {
+ return ImmutableSortedSet.<String>reverseOrder()
+ .addAll(
+ Arrays.asList(elements).iterator())
+ .build();
+ }
+
+ @Override public List<String> order(List<String> insertionOrder) {
+ Collections.sort(insertionOrder, Collections.reverseOrder());
+ return insertionOrder;
+ }
+ })
+ .named(ImmutableSortedSetTest.class.getName()
+ + ", reverseOrder, iterator")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestUnhashableSetGenerator() {
+ @Override public Set<UnhashableObject> create(
+ UnhashableObject[] elements) {
+ return ImmutableSortedSet.of(elements);
+ }
+ })
+ .suppressing(SetHashCodeTester.getHashCodeMethods())
+ .named(ImmutableSortedSetTest.class.getName() + ", unhashable")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .createTestSuite());
+
+ return suite;
+ }
+
+ private abstract static class TestUnhashableSetGenerator
+ extends TestUnhashableCollectionGenerator<Set<UnhashableObject>>
+ implements TestSetGenerator<UnhashableObject> {
+ }
+}
diff --git a/test/com/google/common/collect/ImmutableSetMultimapAsMapImplementsMapTest.java b/test/com/google/common/collect/ImmutableSetMultimapAsMapImplementsMapTest.java
new file mode 100644
index 0000000..06c14a6
--- /dev/null
+++ b/test/com/google/common/collect/ImmutableSetMultimapAsMapImplementsMapTest.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.testing.MapInterfaceTest;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Test {@link Multimap#asMap()} for an {@link ImmutableSetMultimap} with
+ * {@link MapInterfaceTest}.
+ *
+ * @author Mike Ward
+ */
+public class ImmutableSetMultimapAsMapImplementsMapTest
+ extends AbstractMultimapAsMapImplementsMapTest {
+
+ public ImmutableSetMultimapAsMapImplementsMapTest() {
+ super(false, false);
+ }
+
+ @Override protected Map<String, Collection<Integer>> makeEmptyMap() {
+ return ImmutableSetMultimap.<String, Integer>of().asMap();
+ }
+
+ @Override protected Map<String, Collection<Integer>> makePopulatedMap() {
+ Multimap<String, Integer> delegate = HashMultimap.create();
+ populate(delegate);
+ return ImmutableSetMultimap.copyOf(delegate).asMap();
+ }
+}
diff --git a/test/com/google/common/collect/ImmutableSetMultimapTest.java b/test/com/google/common/collect/ImmutableSetMultimapTest.java
new file mode 100644
index 0000000..0274df4
--- /dev/null
+++ b/test/com/google/common/collect/ImmutableSetMultimapTest.java
@@ -0,0 +1,329 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.testing.google.UnmodifiableCollectionTests;
+import com.google.common.testutils.EqualsTester;
+import com.google.common.testutils.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map.Entry;
+
+/**
+ * Tests for {@link ImmutableSetMultimap}.
+ *
+ * @author Mike Ward
+ */
+public class ImmutableSetMultimapTest extends TestCase {
+
+ public void testBuilderPutAllIterable() {
+ ImmutableSetMultimap.Builder<String, Integer> builder
+ = ImmutableSetMultimap.builder();
+ builder.putAll("foo", Arrays.asList(1, 2, 3));
+ builder.putAll("bar", Arrays.asList(4, 5));
+ builder.putAll("foo", Arrays.asList(6, 7));
+ Multimap<String, Integer> multimap = builder.build();
+ assertEquals(ImmutableSet.of(1, 2, 3, 6, 7), multimap.get("foo"));
+ assertEquals(ImmutableSet.of(4, 5), multimap.get("bar"));
+ assertEquals(7, multimap.size());
+ }
+
+ public void testBuilderPutAllVarargs() {
+ ImmutableSetMultimap.Builder<String, Integer> builder
+ = ImmutableSetMultimap.builder();
+ builder.putAll("foo", 1, 2, 3);
+ builder.putAll("bar", 4, 5);
+ builder.putAll("foo", 6, 7);
+ Multimap<String, Integer> multimap = builder.build();
+ assertEquals(ImmutableSet.of(1, 2, 3, 6, 7), multimap.get("foo"));
+ assertEquals(ImmutableSet.of(4, 5), multimap.get("bar"));
+ assertEquals(7, multimap.size());
+ }
+
+ public void testBuilderPutAllMultimap() {
+ Multimap<String, Integer> toPut = LinkedListMultimap.create();
+ toPut.put("foo", 1);
+ toPut.put("bar", 4);
+ toPut.put("foo", 2);
+ toPut.put("foo", 3);
+ Multimap<String, Integer> moreToPut = LinkedListMultimap.create();
+ moreToPut.put("foo", 6);
+ moreToPut.put("bar", 5);
+ moreToPut.put("foo", 7);
+ ImmutableSetMultimap.Builder<String, Integer> builder
+ = ImmutableSetMultimap.builder();
+ builder.putAll(toPut);
+ builder.putAll(moreToPut);
+ Multimap<String, Integer> multimap = builder.build();
+ assertEquals(ImmutableSet.of(1, 2, 3, 6, 7), multimap.get("foo"));
+ assertEquals(ImmutableSet.of(4, 5), multimap.get("bar"));
+ assertEquals(7, multimap.size());
+ }
+
+ public void testBuilderPutAllWithDuplicates() {
+ ImmutableSetMultimap.Builder<String, Integer> builder
+ = ImmutableSetMultimap.builder();
+ builder.putAll("foo", 1, 2, 3);
+ builder.putAll("bar", 4, 5);
+ builder.putAll("foo", 1, 6, 7);
+ ImmutableSetMultimap<String, Integer> multimap = builder.build();
+ assertEquals(7, multimap.size());
+ }
+
+ public void testBuilderPutWithDuplicates() {
+ ImmutableSetMultimap.Builder<String, Integer> builder
+ = ImmutableSetMultimap.builder();
+ builder.putAll("foo", 1, 2, 3);
+ builder.putAll("bar", 4, 5);
+ builder.put("foo", 1);
+ ImmutableSetMultimap<String, Integer> multimap = builder.build();
+ assertEquals(5, multimap.size());
+ }
+
+ public void testBuilderPutAllMultimapWithDuplicates() {
+ Multimap<String, Integer> toPut = LinkedListMultimap.create();
+ toPut.put("foo", 1);
+ toPut.put("bar", 4);
+ toPut.put("foo", 2);
+ toPut.put("foo", 1);
+ toPut.put("bar", 5);
+ ImmutableSetMultimap.Builder<String, Integer> builder
+ = ImmutableSetMultimap.builder();
+ builder.putAll(toPut);
+ ImmutableSetMultimap<String, Integer> multimap = builder.build();
+ assertEquals(4, multimap.size());
+ }
+
+ public void testBuilderPutNullKey() {
+ Multimap<String, Integer> toPut = LinkedListMultimap.create();
+ toPut.put("foo", null);
+ ImmutableSetMultimap.Builder<String, Integer> builder
+ = ImmutableSetMultimap.builder();
+ try {
+ builder.put(null, 1);
+ fail();
+ } catch (NullPointerException expected) {}
+ try {
+ builder.putAll(null, Arrays.asList(1, 2, 3));
+ fail();
+ } catch (NullPointerException expected) {}
+ try {
+ builder.putAll(null, 1, 2, 3);
+ fail();
+ } catch (NullPointerException expected) {}
+ try {
+ builder.putAll(toPut);
+ fail();
+ } catch (NullPointerException expected) {}
+ }
+
+ public void testBuilderPutNullValue() {
+ Multimap<String, Integer> toPut = LinkedListMultimap.create();
+ toPut.put(null, 1);
+ ImmutableSetMultimap.Builder<String, Integer> builder
+ = ImmutableSetMultimap.builder();
+ try {
+ builder.put("foo", null);
+ fail();
+ } catch (NullPointerException expected) {}
+ try {
+ builder.putAll("foo", Arrays.asList(1, null, 3));
+ fail();
+ } catch (NullPointerException expected) {}
+ try {
+ builder.putAll("foo", 4, null, 6);
+ fail();
+ } catch (NullPointerException expected) {}
+ try {
+ builder.putAll(toPut);
+ fail();
+ } catch (NullPointerException expected) {}
+ }
+
+ public void testCopyOf() {
+ HashMultimap<String, Integer> input = HashMultimap.create();
+ input.put("foo", 1);
+ input.put("bar", 2);
+ input.put("foo", 3);
+ Multimap<String, Integer> multimap = ImmutableSetMultimap.copyOf(input);
+ assertEquals(multimap, input);
+ assertEquals(input, multimap);
+ }
+
+ public void testCopyOfWithDuplicates() {
+ ArrayListMultimap<Object, Object> input = ArrayListMultimap.create();
+ input.put("foo", 1);
+ input.put("bar", 2);
+ input.put("foo", 3);
+ input.put("foo", 1);
+ ImmutableSetMultimap<Object, Object> copy
+ = ImmutableSetMultimap.copyOf(input);
+ assertEquals(3, copy.size());
+ }
+
+ public void testCopyOfEmpty() {
+ HashMultimap<String, Integer> input = HashMultimap.create();
+ Multimap<String, Integer> multimap = ImmutableSetMultimap.copyOf(input);
+ assertEquals(multimap, input);
+ assertEquals(input, multimap);
+ }
+
+ public void testCopyOfImmutableSetMultimap() {
+ Multimap<String, Integer> multimap = createMultimap();
+ assertSame(multimap, ImmutableSetMultimap.copyOf(multimap));
+ }
+
+ public void testCopyOfNullKey() {
+ HashMultimap<String, Integer> input = HashMultimap.create();
+ input.put(null, 1);
+ try {
+ ImmutableSetMultimap.copyOf(input);
+ fail();
+ } catch (NullPointerException expected) {}
+ }
+
+ public void testCopyOfNullValue() {
+ HashMultimap<String, Integer> input = HashMultimap.create();
+ input.putAll("foo", Arrays.asList(1, null, 3));
+ try {
+ ImmutableSetMultimap.copyOf(input);
+ fail();
+ } catch (NullPointerException expected) {}
+ }
+
+ public void testEmptyMultimapReads() {
+ Multimap<String, Integer> multimap = ImmutableSetMultimap.of();
+ assertFalse(multimap.containsKey("foo"));
+ assertFalse(multimap.containsValue(1));
+ assertFalse(multimap.containsEntry("foo", 1));
+ assertTrue(multimap.entries().isEmpty());
+ assertTrue(multimap.equals(HashMultimap.create()));
+ assertEquals(Collections.emptySet(), multimap.get("foo"));
+ assertEquals(0, multimap.hashCode());
+ assertTrue(multimap.isEmpty());
+ assertEquals(HashMultiset.create(), multimap.keys());
+ assertEquals(Collections.emptySet(), multimap.keySet());
+ assertEquals(0, multimap.size());
+ assertTrue(multimap.values().isEmpty());
+ assertEquals("{}", multimap.toString());
+ }
+
+ public void testEmptyMultimapWrites() {
+ Multimap<String, Integer> multimap = ImmutableSetMultimap.of();
+ UnmodifiableCollectionTests.assertMultimapIsUnmodifiable(
+ multimap, "foo", 1);
+ }
+
+ public void testMultimapReads() {
+ Multimap<String, Integer> multimap = createMultimap();
+ assertTrue(multimap.containsKey("foo"));
+ assertFalse(multimap.containsKey("cat"));
+ assertTrue(multimap.containsValue(1));
+ assertFalse(multimap.containsValue(5));
+ assertTrue(multimap.containsEntry("foo", 1));
+ assertFalse(multimap.containsEntry("cat", 1));
+ assertFalse(multimap.containsEntry("foo", 5));
+ assertFalse(multimap.entries().isEmpty());
+ assertEquals(3, multimap.size());
+ assertFalse(multimap.isEmpty());
+ assertEquals("{foo=[1, 3], bar=[2]}", multimap.toString());
+ }
+
+ public void testMultimapWrites() {
+ Multimap<String, Integer> multimap = createMultimap();
+ UnmodifiableCollectionTests.assertMultimapIsUnmodifiable(
+ multimap, "bar", 2);
+ }
+
+ public void testMultimapEquals() {
+ Multimap<String, Integer> multimap = createMultimap();
+ Multimap<String, Integer> hashMultimap = HashMultimap.create();
+ hashMultimap.putAll("foo", Arrays.asList(1, 3));
+ hashMultimap.put("bar", 2);
+
+ new EqualsTester(multimap)
+ .addEqualObject(createMultimap())
+ .addEqualObject(hashMultimap)
+ .addEqualObject(ImmutableSetMultimap.<String, Integer>builder()
+ .put("bar", 2).put("foo", 1).put("foo", 3).build())
+ .addEqualObject(ImmutableSetMultimap.<String, Integer>builder()
+ .put("bar", 2).put("foo", 3).put("foo", 1).build())
+ .addNotEqualObject(ImmutableSetMultimap.<String, Integer>builder()
+ .put("foo", 2).put("foo", 3).put("foo", 1).build())
+ .addNotEqualObject(ImmutableSetMultimap.<String, Integer>builder()
+ .put("bar", 2).put("foo", 3).build())
+ .testEquals();
+ }
+
+ public void testOf() {
+ assertMultimapEquals(
+ ImmutableSetMultimap.of("one", 1),
+ "one", 1);
+ assertMultimapEquals(
+ ImmutableSetMultimap.of("one", 1, "two", 2),
+ "one", 1, "two", 2);
+ assertMultimapEquals(
+ ImmutableSetMultimap.of("one", 1, "two", 2, "three", 3),
+ "one", 1, "two", 2, "three", 3);
+ assertMultimapEquals(
+ ImmutableSetMultimap.of("one", 1, "two", 2, "three", 3, "four", 4),
+ "one", 1, "two", 2, "three", 3, "four", 4);
+ assertMultimapEquals(
+ ImmutableSetMultimap.of(
+ "one", 1, "two", 2, "three", 3, "four", 4, "five", 5),
+ "one", 1, "two", 2, "three", 3, "four", 4, "five", 5);
+ }
+
+ private static <K, V> void assertMultimapEquals(Multimap<K, V> multimap,
+ Object... alternatingKeysAndValues) {
+ assertEquals(multimap.size(), alternatingKeysAndValues.length / 2);
+ int i = 0;
+ for (Entry<K, V> entry : multimap.entries()) {
+ assertEquals(alternatingKeysAndValues[i++], entry.getKey());
+ assertEquals(alternatingKeysAndValues[i++], entry.getValue());
+ }
+ }
+
+ public void testSerialization() {
+ Multimap<String, Integer> multimap = createMultimap();
+ SerializableTester.reserializeAndAssert(multimap);
+ assertEquals(multimap.size(),
+ SerializableTester.reserialize(multimap).size());
+ SerializableTester.reserializeAndAssert(multimap.get("foo"));
+ SerializableTester.reserializeAndAssert(multimap.keySet());
+ SerializableTester.reserializeAndAssert(multimap.keys());
+ SerializableTester.reserializeAndAssert(multimap.asMap());
+ Collection<Integer> valuesCopy
+ = SerializableTester.reserialize(multimap.values());
+ assertEquals(HashMultiset.create(multimap.values()),
+ HashMultiset.create(valuesCopy));
+ }
+
+ public void testEmptySerialization() {
+ Multimap<String, Integer> multimap = ImmutableSetMultimap.of();
+ assertSame(multimap, SerializableTester.reserialize(multimap));
+ }
+
+ private ImmutableSetMultimap<String, Integer> createMultimap() {
+ return ImmutableSetMultimap.<String, Integer>builder()
+ .put("foo", 1).put("bar", 2).put("foo", 3).build();
+ }
+}
diff --git a/test/com/google/common/collect/ImmutableSetTest.java b/test/com/google/common/collect/ImmutableSetTest.java
new file mode 100644
index 0000000..f66d712
--- /dev/null
+++ b/test/com/google/common/collect/ImmutableSetTest.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.ImmutableSet.Builder;
+import com.google.common.testutils.NullPointerTester;
+
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * Unit test for {@link ImmutableSet}.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ * @author Nick Kralevich
+ */
+public class ImmutableSetTest extends AbstractImmutableSetTest {
+
+ @Override protected Set<String> of() {
+ return ImmutableSet.of();
+ }
+
+ @Override protected Set<String> of(String e) {
+ return ImmutableSet.of(e);
+ }
+
+ @Override protected Set<String> of(String e1, String e2) {
+ return ImmutableSet.of(e1, e2);
+ }
+
+ @Override protected Set<String> of(String e1, String e2, String e3) {
+ return ImmutableSet.of(e1, e2, e3);
+ }
+
+ @Override protected Set<String> of(
+ String e1, String e2, String e3, String e4) {
+ return ImmutableSet.of(e1, e2, e3, e4);
+ }
+
+ @Override protected Set<String> of(
+ String e1, String e2, String e3, String e4, String e5) {
+ return ImmutableSet.of(e1, e2, e3, e4, e5);
+ }
+
+ @Override protected Set<String> of(String... elements) {
+ return ImmutableSet.of(elements);
+ }
+
+ @Override protected Set<String> copyOf(Iterable<String> elements) {
+ return ImmutableSet.copyOf(elements);
+ }
+
+ @Override protected Set<String> copyOf(Iterator<String> elements) {
+ return ImmutableSet.copyOf(elements);
+ }
+
+ public void testCreation_arrayOfArray() {
+ String[] array = new String[] { "a" };
+ Set<String[]> set = ImmutableSet.<String[]>of(array);
+ assertEquals(Collections.singleton(array), set);
+ }
+
+ public void testNullPointers() throws Exception {
+ NullPointerTester tester = new NullPointerTester();
+ tester.testAllPublicStaticMethods(ImmutableSet.class);
+ }
+
+ public void testChooseTableSize() {
+ assertEquals(8, Hashing.chooseTableSize(3));
+ assertEquals(16, Hashing.chooseTableSize(4));
+
+ assertEquals(1 << 30, Hashing.chooseTableSize(1 << 28));
+ assertEquals(1 << 30, Hashing.chooseTableSize(1 << 29 - 1));
+
+ // Now we hit the cap
+ assertEquals(1 << 30, Hashing.chooseTableSize(1 << 29));
+ assertEquals(1 << 30, Hashing.chooseTableSize(1 << 30 - 1));
+
+ // Now we've gone too far
+ try {
+ Hashing.chooseTableSize(1 << 30);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ public void testCopyOf_copiesImmutableSortedSet() {
+ ImmutableSortedSet<String> sortedSet = ImmutableSortedSet.of("a");
+ ImmutableSet<String> copy = ImmutableSet.copyOf(sortedSet);
+ assertNotSame(sortedSet, copy);
+ }
+
+ @Override <E extends Comparable<E>> Builder<E> builder() {
+ return ImmutableSet.builder();
+ }
+
+ @Override int getComplexBuilderSetLastElement() {
+ return LAST_COLOR_ADDED;
+ }
+}
diff --git a/test/com/google/common/collect/ImmutableSortedMapTest.java b/test/com/google/common/collect/ImmutableSortedMapTest.java
new file mode 100644
index 0000000..b765c04
--- /dev/null
+++ b/test/com/google/common/collect/ImmutableSortedMapTest.java
@@ -0,0 +1,794 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.base.Joiner;
+import com.google.common.collect.ImmutableSortedMap.Builder;
+import com.google.common.collect.testing.CollectionTestSuiteBuilder;
+import com.google.common.collect.testing.ReserializingTestCollectionGenerator;
+import com.google.common.collect.testing.ReserializingTestSetGenerator;
+import com.google.common.collect.testing.SampleElements;
+import static com.google.common.collect.testing.SampleElements.Strings.AFTER_LAST;
+import static com.google.common.collect.testing.SampleElements.Strings.BEFORE_FIRST;
+import static com.google.common.collect.testing.SampleElements.Strings.MIN_ELEMENT;
+import com.google.common.collect.testing.SetTestSuiteBuilder;
+import com.google.common.collect.testing.SortedMapInterfaceTest;
+import com.google.common.collect.testing.TestCollectionGenerator;
+import com.google.common.collect.testing.TestMapEntrySetGenerator;
+import com.google.common.collect.testing.TestStringSetGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.SetFeature;
+import com.google.common.testutils.NullPointerTester;
+import com.google.common.testutils.SerializableTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.SortedMap;
+
+/**
+ * Tests for {@link ImmutableSortedMap}.
+ *
+ * @author Kevin Bourrillion
+ * @author Jesse Wilson
+ * @author Jared Levy
+ */
+public class ImmutableSortedMapTest extends TestCase {
+ // TODO: Avoid duplicating code in ImmutableMapTest
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite();
+ suite.addTestSuite(ImmutableSortedMapTest.class);
+
+ suite.addTest(SetTestSuiteBuilder.using(keySetGenerator())
+ .withFeatures(
+ CollectionSize.ANY,
+ CollectionFeature.KNOWN_ORDER,
+ SetFeature.REJECTS_DUPLICATES_AT_CREATION)
+ .named("ImmutableSortedMap.keySet")
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(entrySetGenerator())
+ .withFeatures(
+ CollectionSize.ANY,
+ CollectionFeature.KNOWN_ORDER,
+ SetFeature.REJECTS_DUPLICATES_AT_CREATION)
+ .named("ImmutableSortedMap.entrySet")
+ .createTestSuite());
+
+ suite.addTest(CollectionTestSuiteBuilder.using(valuesGenerator())
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .named("ImmutableSortedMap.values")
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(
+ ReserializingTestSetGenerator.newInstance(keySetGenerator()))
+ .withFeatures(
+ CollectionSize.ANY,
+ CollectionFeature.KNOWN_ORDER,
+ SetFeature.REJECTS_DUPLICATES_AT_CREATION)
+ .named("ImmutableSortedMap.keySet, reserialized")
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(
+ ReserializingTestSetGenerator.newInstance(entrySetGenerator()))
+ .withFeatures(
+ CollectionSize.ANY,
+ CollectionFeature.KNOWN_ORDER,
+ SetFeature.REJECTS_DUPLICATES_AT_CREATION)
+ .named("ImmutableSortedMap.entrySet, reserialized")
+ .createTestSuite());
+
+ suite.addTest(CollectionTestSuiteBuilder.using(
+ ReserializingTestCollectionGenerator.newInstance(valuesGenerator()))
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .named("ImmutableSortedMap.values, reserialized")
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(headMapKeySetGenerator())
+ .withFeatures(
+ CollectionSize.ANY,
+ CollectionFeature.KNOWN_ORDER,
+ SetFeature.REJECTS_DUPLICATES_AT_CREATION)
+ .named("ImmutableSortedMap.headMap.keySet")
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(subMapEntrySetGenerator())
+ .withFeatures(
+ CollectionSize.ANY,
+ CollectionFeature.KNOWN_ORDER,
+ SetFeature.REJECTS_DUPLICATES_AT_CREATION)
+ .named("ImmutableSortedMap.subMap.entrySet")
+ .createTestSuite());
+
+ suite.addTest(CollectionTestSuiteBuilder.using(tailMapValuesGenerator())
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .named("ImmutableSortedMap.tailMap.values")
+ .createTestSuite());
+
+ return suite;
+ }
+
+ private static final Comparator<Entry<String, String>> ENTRY_COMPARATOR
+ = new Comparator<Entry<String, String>>() {
+ public int compare(Entry<String, String> o1, Entry<String, String> o2) {
+ return o1.getKey().compareTo(o2.getKey());
+ }
+ };
+
+ static TestMapEntrySetGenerator<String, String> entrySetGenerator() {
+ SampleElements.Strings sampleStrings = new SampleElements.Strings();
+ return new TestMapEntrySetGenerator<String, String>(
+ sampleStrings, sampleStrings) {
+ @Override public Set<Entry<String, String>> createFromEntries(
+ Entry<String, String>[] entries) {
+ Builder<String, String> builder = ImmutableSortedMap.naturalOrder();
+ for (Entry<String, String> entry : entries) {
+ builder.put(entry.getKey(), entry.getValue());
+ }
+ return builder.build().entrySet();
+ }
+ @Override public List<Entry<String, String>> order(
+ List<Entry<String, String>> insertionOrder) {
+ Collections.sort(insertionOrder, ENTRY_COMPARATOR);
+ return insertionOrder;
+ }
+ };
+ }
+
+ static TestStringSetGenerator keySetGenerator() {
+ return new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder();
+ for (String key : elements) {
+ builder.put(key, key.length());
+ }
+ return builder.build().keySet();
+ }
+ @Override public List<String> order(List<String> insertionOrder) {
+ Collections.sort(insertionOrder);
+ return insertionOrder;
+ }
+ };
+ }
+
+ static TestCollectionGenerator<String> valuesGenerator() {
+ return new TestCollectionGenerator<String>() {
+ public SampleElements<String> samples() {
+ return new SampleElements.Strings();
+ }
+
+ public Collection<String> create(Object... elements) {
+ Builder<Integer, String> builder = ImmutableSortedMap.naturalOrder();
+ for (int i = 0; i < elements.length; i++) {
+ builder.put(i, elements[i].toString());
+ }
+ return builder.build().values();
+ }
+
+ public String[] createArray(int length) {
+ return new String[length];
+ }
+
+ public List<String> order(List<String> insertionOrder) {
+ return insertionOrder;
+ }
+ };
+ }
+
+ static TestMapEntrySetGenerator<String, String> subMapEntrySetGenerator() {
+ SampleElements.Strings sampleStrings = new SampleElements.Strings();
+ return new TestMapEntrySetGenerator<String, String>(
+ sampleStrings, sampleStrings) {
+ @Override public Set<Entry<String, String>> createFromEntries(
+ Entry<String, String>[] entries) {
+ Builder<String, String> builder = ImmutableSortedMap.naturalOrder();
+ builder.put(BEFORE_FIRST, "begin");
+ builder.put(AFTER_LAST, "end");
+ for (Entry<String, String> entry : entries) {
+ builder.put(entry.getKey(), entry.getValue());
+ }
+ return builder.build().subMap(MIN_ELEMENT, AFTER_LAST).entrySet();
+ }
+ @Override public List<Entry<String, String>> order(
+ List<Entry<String, String>> insertionOrder) {
+ Collections.sort(insertionOrder, ENTRY_COMPARATOR);
+ return insertionOrder;
+ }
+ };
+ }
+
+ static TestStringSetGenerator headMapKeySetGenerator() {
+ return new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder();
+ builder.put(AFTER_LAST, -1);
+ for (String key : elements) {
+ builder.put(key, key.length());
+ }
+ return builder.build().headMap(AFTER_LAST).keySet();
+ }
+ @Override public List<String> order(List<String> insertionOrder) {
+ Collections.sort(insertionOrder);
+ return insertionOrder;
+ }
+ };
+ }
+
+ static TestCollectionGenerator<String> tailMapValuesGenerator() {
+ return new TestCollectionGenerator<String>() {
+ public SampleElements<String> samples() {
+ return new SampleElements.Strings();
+ }
+
+ public Collection<String> create(Object... elements) {
+ Builder<Integer, String> builder = ImmutableSortedMap.naturalOrder();
+ builder.put(-1, "begin");
+ for (int i = 0; i < elements.length; i++) {
+ builder.put(i, elements[i].toString());
+ }
+ return builder.build().tailMap(0).values();
+ }
+
+ public String[] createArray(int length) {
+ return new String[length];
+ }
+
+ public List<String> order(List<String> insertionOrder) {
+ return insertionOrder;
+ }
+ };
+ }
+
+ public abstract static class AbstractMapTests<K, V>
+ extends SortedMapInterfaceTest<K, V> {
+ public AbstractMapTests() {
+ super(false, false, false, false, false);
+ }
+
+ @Override protected SortedMap<K, V> makeEmptyMap() {
+ throw new UnsupportedOperationException();
+ }
+
+ private static final Joiner joiner = Joiner.on(", ");
+
+ @Override protected void assertMoreInvariants(Map<K, V> map) {
+ // TODO: can these be moved to MapInterfaceTest?
+ for (Entry<K, V> entry : map.entrySet()) {
+ assertEquals(entry.getKey() + "=" + entry.getValue(),
+ entry.toString());
+ }
+
+ assertEquals("{" + joiner.join(map.entrySet()) + "}",
+ map.toString());
+ assertEquals("[" + joiner.join(map.entrySet()) + "]",
+ map.entrySet().toString());
+ assertEquals("[" + joiner.join(map.keySet()) + "]",
+ map.keySet().toString());
+ assertEquals("[" + joiner.join(map.values()) + "]",
+ map.values().toString());
+
+ assertEquals(Sets.newHashSet(map.entrySet()), map.entrySet());
+ assertEquals(Sets.newHashSet(map.keySet()), map.keySet());
+ }
+ }
+
+ public static class MapTests extends AbstractMapTests<String, Integer> {
+ @Override protected SortedMap<String, Integer> makeEmptyMap() {
+ return ImmutableSortedMap.of();
+ }
+
+ @Override protected SortedMap<String, Integer> makePopulatedMap() {
+ return ImmutableSortedMap.of("one", 1, "two", 2, "three", 3);
+ }
+
+ @Override protected String getKeyNotInPopulatedMap() {
+ return "minus one";
+ }
+
+ @Override protected Integer getValueNotInPopulatedMap() {
+ return -1;
+ }
+ }
+
+ public static class SingletonMapTests
+ extends AbstractMapTests<String, Integer> {
+ @Override protected SortedMap<String, Integer> makePopulatedMap() {
+ return ImmutableSortedMap.of("one", 1);
+ }
+
+ @Override protected String getKeyNotInPopulatedMap() {
+ return "minus one";
+ }
+
+ @Override protected Integer getValueNotInPopulatedMap() {
+ return -1;
+ }
+ }
+
+ public static class ReserializedMapTests
+ extends AbstractMapTests<String, Integer> {
+ @Override protected SortedMap<String, Integer> makePopulatedMap() {
+ return SerializableTester.reserialize(
+ ImmutableSortedMap.of("one", 1, "two", 2, "three", 3));
+ }
+
+ @Override protected String getKeyNotInPopulatedMap() {
+ return "minus one";
+ }
+
+ @Override protected Integer getValueNotInPopulatedMap() {
+ return -1;
+ }
+ }
+
+ public static class HeadMapTests extends AbstractMapTests<String, Integer> {
+ @Override protected SortedMap<String, Integer> makePopulatedMap() {
+ return ImmutableSortedMap.of("a", 1, "b", 2, "c", 3, "d", 4, "e", 5)
+ .headMap("d");
+ }
+
+ @Override protected String getKeyNotInPopulatedMap() {
+ return "d";
+ }
+
+ @Override protected Integer getValueNotInPopulatedMap() {
+ return 4;
+ }
+ }
+
+ public static class TailMapTests extends AbstractMapTests<String, Integer> {
+ @Override protected SortedMap<String, Integer> makePopulatedMap() {
+ return ImmutableSortedMap.of("a", 1, "b", 2, "c", 3, "d", 4, "e", 5)
+ .tailMap("b");
+ }
+
+ @Override protected String getKeyNotInPopulatedMap() {
+ return "a";
+ }
+
+ @Override protected Integer getValueNotInPopulatedMap() {
+ return 1;
+ }
+ }
+
+ public static class SubMapTests extends AbstractMapTests<String, Integer> {
+ @Override protected SortedMap<String, Integer> makePopulatedMap() {
+ return ImmutableSortedMap.of("a", 1, "b", 2, "c", 3, "d", 4, "e", 5)
+ .subMap("b", "d");
+ }
+
+ @Override protected String getKeyNotInPopulatedMap() {
+ return "a";
+ }
+
+ @Override protected Integer getValueNotInPopulatedMap() {
+ return 4;
+ }
+ }
+
+ public static class CreationTests extends TestCase {
+ public void testEmptyBuilder() {
+ ImmutableSortedMap<String, Integer> map
+ = ImmutableSortedMap.<String, Integer>naturalOrder().build();
+ assertEquals(Collections.<String, Integer>emptyMap(), map);
+ }
+
+ public void testSingletonBuilder() {
+ ImmutableSortedMap<String, Integer> map
+ = ImmutableSortedMap.<String, Integer>naturalOrder()
+ .put("one", 1)
+ .build();
+ assertMapEquals(map, "one", 1);
+ }
+
+ public void testBuilder() {
+ ImmutableSortedMap<String, Integer> map
+ = ImmutableSortedMap.<String, Integer>naturalOrder()
+ .put("one", 1)
+ .put("two", 2)
+ .put("three", 3)
+ .put("four", 4)
+ .put("five", 5)
+ .build();
+ assertMapEquals(map,
+ "five", 5, "four", 4, "one", 1, "three", 3, "two", 2);
+ }
+
+ public void testBuilderPutAllWithEmptyMap() {
+ ImmutableSortedMap<String, Integer> map
+ = ImmutableSortedMap.<String, Integer>naturalOrder()
+ .putAll(Collections.<String, Integer>emptyMap())
+ .build();
+ assertEquals(Collections.<String, Integer>emptyMap(), map);
+ }
+
+ public void testBuilderPutAll() {
+ Map<String, Integer> toPut = new LinkedHashMap<String, Integer>();
+ toPut.put("one", 1);
+ toPut.put("two", 2);
+ toPut.put("three", 3);
+ Map<String, Integer> moreToPut = new LinkedHashMap<String, Integer>();
+ moreToPut.put("four", 4);
+ moreToPut.put("five", 5);
+
+ ImmutableSortedMap<String, Integer> map
+ = ImmutableSortedMap.<String, Integer>naturalOrder()
+ .putAll(toPut)
+ .putAll(moreToPut)
+ .build();
+ assertMapEquals(map,
+ "five", 5, "four", 4, "one", 1, "three", 3, "two", 2);
+ }
+
+ public void testBuilderReuse() {
+ Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder();
+ ImmutableSortedMap<String, Integer> mapOne = builder
+ .put("one", 1)
+ .put("two", 2)
+ .build();
+ ImmutableSortedMap<String, Integer> mapTwo = builder
+ .put("three", 3)
+ .put("four", 4)
+ .build();
+
+ assertMapEquals(mapOne, "one", 1, "two", 2);
+ assertMapEquals(mapTwo, "four", 4, "one", 1, "three", 3, "two", 2);
+ }
+
+ public void testBuilderPutNullKey() {
+ Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder();
+ try {
+ builder.put(null, 1);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testBuilderPutNullValue() {
+ Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder();
+ try {
+ builder.put("one", null);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testBuilderPutNullKeyViaPutAll() {
+ Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder();
+ try {
+ builder.putAll(Collections.<String, Integer>singletonMap(null, 1));
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testBuilderPutNullValueViaPutAll() {
+ Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder();
+ try {
+ builder.putAll(Collections.<String, Integer>singletonMap("one", null));
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testPuttingTheSameKeyTwiceThrowsOnBuild() {
+ Builder<String, Integer> builder
+ = ImmutableSortedMap.<String,Integer>naturalOrder()
+ .put("one", 1)
+ .put("one", 2); // throwing on this line would be even better
+
+ try {
+ builder.build();
+ fail();
+ } catch (IllegalArgumentException expected) {
+ assertEquals("Duplicate keys in mappings one=1 and one=2",
+ expected.getMessage());
+ }
+ }
+
+ public void testOf() {
+ assertMapEquals(
+ ImmutableSortedMap.of("one", 1),
+ "one", 1);
+ assertMapEquals(
+ ImmutableSortedMap.of("one", 1, "two", 2),
+ "one", 1, "two", 2);
+ assertMapEquals(
+ ImmutableSortedMap.of("one", 1, "two", 2, "three", 3),
+ "one", 1, "three", 3, "two", 2);
+ assertMapEquals(
+ ImmutableSortedMap.of("one", 1, "two", 2, "three", 3, "four", 4),
+ "four", 4, "one", 1, "three", 3, "two", 2);
+ assertMapEquals(
+ ImmutableSortedMap.of(
+ "one", 1, "two", 2, "three", 3, "four", 4, "five", 5),
+ "five", 5, "four", 4, "one", 1, "three", 3, "two", 2);
+ }
+
+ public void testOfNullKey() {
+ Integer n = null;
+ try {
+ ImmutableSortedMap.of(n, 1);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+
+ try {
+ ImmutableSortedMap.of("one", 1, null, 2);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testOfNullValue() {
+ try {
+ ImmutableSortedMap.of("one", null);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+
+ try {
+ ImmutableSortedMap.of("one", 1, "two", null);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testOfWithDuplicateKey() {
+ try {
+ ImmutableSortedMap.of("one", 1, "one", 1);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ assertEquals("Duplicate keys in mappings one=1 and one=1",
+ expected.getMessage());
+ }
+ }
+
+ public void testCopyOfEmptyMap() {
+ ImmutableSortedMap<String, Integer> copy
+ = ImmutableSortedMap.copyOf(Collections.<String, Integer>emptyMap());
+ assertEquals(Collections.<String, Integer>emptyMap(), copy);
+ assertSame(copy, ImmutableSortedMap.copyOf(copy));
+ assertSame(Ordering.natural(), copy.comparator());
+ }
+
+ public void testCopyOfSingletonMap() {
+ ImmutableSortedMap<String, Integer> copy
+ = ImmutableSortedMap.copyOf(Collections.singletonMap("one", 1));
+ assertMapEquals(copy, "one", 1);
+ assertSame(copy, ImmutableSortedMap.copyOf(copy));
+ assertSame(Ordering.natural(), copy.comparator());
+ }
+
+ public void testCopyOf() {
+ Map<String, Integer> original = new LinkedHashMap<String, Integer>();
+ original.put("one", 1);
+ original.put("two", 2);
+ original.put("three", 3);
+
+ ImmutableSortedMap<String, Integer> copy
+ = ImmutableSortedMap.copyOf(original);
+ assertMapEquals(copy, "one", 1, "three", 3, "two", 2);
+ assertSame(copy, ImmutableSortedMap.copyOf(copy));
+ assertSame(Ordering.natural(), copy.comparator());
+ }
+
+ public void testCopyOfExplicitComparator() {
+ Comparator<String> comparator = Ordering.natural().reverse();
+ Map<String, Integer> original = new LinkedHashMap<String, Integer>();
+ original.put("one", 1);
+ original.put("two", 2);
+ original.put("three", 3);
+
+ ImmutableSortedMap<String, Integer> copy
+ = ImmutableSortedMap.copyOf(original, comparator);
+ assertMapEquals(copy, "two", 2, "three", 3, "one", 1);
+ assertSame(copy, ImmutableSortedMap.copyOf(copy, comparator));
+ assertSame(comparator, copy.comparator());
+ }
+
+ public void testCopyOfImmutableSortedSetDifferentComparator() {
+ Comparator<String> comparator = Ordering.natural().reverse();
+ Map<String, Integer> original
+ = ImmutableSortedMap.of("one", 1, "two", 2, "three", 3);
+ ImmutableSortedMap<String, Integer> copy
+ = ImmutableSortedMap.copyOf(original, comparator);
+ assertMapEquals(copy, "two", 2, "three", 3, "one", 1);
+ assertSame(copy, ImmutableSortedMap.copyOf(copy, comparator));
+ assertSame(comparator, copy.comparator());
+ }
+
+ public void testCopyOfSortedNatural() {
+ SortedMap<String, Integer> original = Maps.newTreeMap();
+ original.put("one", 1);
+ original.put("two", 2);
+ original.put("three", 3);
+
+ ImmutableSortedMap<String, Integer> copy
+ = ImmutableSortedMap.copyOfSorted(original);
+ assertMapEquals(copy, "one", 1, "three", 3, "two", 2);
+ assertSame(copy, ImmutableSortedMap.copyOfSorted(copy));
+ assertSame(Ordering.natural(), copy.comparator());
+ }
+
+ public void testCopyOfSortedExplicit() {
+ Comparator<String> comparator = Ordering.natural().reverse();
+ SortedMap<String, Integer> original = Maps.newTreeMap(comparator);
+ original.put("one", 1);
+ original.put("two", 2);
+ original.put("three", 3);
+
+ ImmutableSortedMap<String, Integer> copy
+ = ImmutableSortedMap.copyOfSorted(original);
+ assertMapEquals(copy, "two", 2, "three", 3, "one", 1);
+ assertSame(copy, ImmutableSortedMap.copyOfSorted(copy));
+ assertSame(comparator, copy.comparator());
+ }
+
+ private static class IntegerDiv10 implements Comparable<IntegerDiv10> {
+ final int value;
+
+ IntegerDiv10(int value) {
+ this.value = value;
+ }
+
+ public int compareTo(IntegerDiv10 o) {
+ return value / 10 - o.value / 10;
+ }
+
+ @Override public String toString() {
+ return Integer.toString(value);
+ }
+ }
+
+ public void testCopyOfDuplicateKey() {
+ Map<IntegerDiv10, String> original = ImmutableMap.of(
+ new IntegerDiv10(3), "three",
+ new IntegerDiv10(20), "twenty",
+ new IntegerDiv10(11), "eleven",
+ new IntegerDiv10(25), "twenty five",
+ new IntegerDiv10(12), "twelve");
+
+ try {
+ ImmutableSortedMap.copyOf(original);
+ fail("Expected IllegalArgumentException");
+ } catch (IllegalArgumentException expected) {
+ assertEquals("Duplicate keys in mappings 11=eleven and 12=twelve",
+ expected.getMessage());
+ }
+ }
+
+ public void testImmutableMapCopyOfImmutableSortedMap() {
+ IntegerDiv10 three = new IntegerDiv10(3);
+ IntegerDiv10 eleven = new IntegerDiv10(11);
+ IntegerDiv10 twelve = new IntegerDiv10(12);
+ IntegerDiv10 twenty = new IntegerDiv10(20);
+ Map<IntegerDiv10, String> original = ImmutableSortedMap.of(
+ three, "three", eleven, "eleven", twenty, "twenty");
+ Map<IntegerDiv10, String> copy = ImmutableMap.copyOf(original);
+ assertTrue(original.containsKey(twelve));
+ assertFalse(copy.containsKey(twelve));
+ }
+
+ public void testBuilderReverseOrder() {
+ ImmutableSortedMap<String, Integer> map
+ = ImmutableSortedMap.<String, Integer>reverseOrder()
+ .put("one", 1)
+ .put("two", 2)
+ .put("three", 3)
+ .put("four", 4)
+ .put("five", 5)
+ .build();
+ assertMapEquals(map,
+ "two", 2, "three", 3, "one", 1, "four", 4, "five", 5);
+ assertEquals(Ordering.natural().reverse(), map.comparator());
+ }
+
+ public void testBuilderComparator() {
+ Comparator<String> comparator = Ordering.natural().reverse();
+ ImmutableSortedMap<String, Integer> map
+ = new ImmutableSortedMap.Builder<String, Integer>(comparator)
+ .put("one", 1)
+ .put("two", 2)
+ .put("three", 3)
+ .put("four", 4)
+ .put("five", 5)
+ .build();
+ assertMapEquals(map,
+ "two", 2, "three", 3, "one", 1, "four", 4, "five", 5);
+ assertSame(comparator, map.comparator());
+ }
+ }
+
+ public void testNullPointers() throws Exception {
+ NullPointerTester tester = new NullPointerTester();
+ tester.testAllPublicStaticMethods(ImmutableSortedMap.class);
+ tester.testAllPublicInstanceMethods(
+ ImmutableSortedMap.<String, Integer>naturalOrder());
+ if (false) {
+ // these tests aren't included due to a bug in NullPointerTester
+ // TODO: fix that bug, add these tests
+ tester.testAllPublicInstanceMethods(ImmutableSortedMap.of());
+ tester.testAllPublicInstanceMethods(ImmutableSortedMap.of("one", 1));
+ tester.testAllPublicInstanceMethods(
+ ImmutableSortedMap.of("one", 1, "two", 2, "three", 3));
+ }
+ }
+
+ private static <K, V> void assertMapEquals(Map<K, V> map,
+ Object... alternatingKeysAndValues) {
+ assertEquals(map.size(), alternatingKeysAndValues.length / 2);
+ int i = 0;
+ for (Entry<K, V> entry : map.entrySet()) {
+ assertEquals(alternatingKeysAndValues[i++], entry.getKey());
+ assertEquals(alternatingKeysAndValues[i++], entry.getValue());
+ }
+ }
+
+ private static class IntHolder implements Serializable {
+ public int value;
+
+ public IntHolder(int value) {
+ this.value = value;
+ }
+
+ @Override public boolean equals(Object o) {
+ return (o instanceof IntHolder) && ((IntHolder) o).value == value;
+ }
+
+ @Override public int hashCode() {
+ return value;
+ }
+
+ private static final long serialVersionUID = 5;
+ }
+
+ public void testMutableValues() {
+ IntHolder holderA = new IntHolder(1);
+ IntHolder holderB = new IntHolder(2);
+ Map<String, IntHolder> map
+ = ImmutableSortedMap.of("a", holderA, "b", holderB);
+ holderA.value = 3;
+ assertTrue(map.entrySet().contains(
+ Maps.immutableEntry("a", new IntHolder(3))));
+ Map<String, Integer> intMap
+ = ImmutableSortedMap.of("a", 3, "b", 2);
+ assertEquals(intMap.hashCode(), map.entrySet().hashCode());
+ assertEquals(intMap.hashCode(), map.hashCode());
+ }
+
+ public void testViewSerialization() {
+ Map<String, Integer> map
+ = ImmutableSortedMap.of("one", 1, "two", 2, "three", 3);
+ SerializableTester.reserializeAndAssert(map.entrySet());
+ SerializableTester.reserializeAndAssert(map.keySet());
+ assertEquals(Lists.newArrayList(map.values()),
+ Lists.newArrayList(SerializableTester.reserialize(map.values())));
+ }
+}
diff --git a/test/com/google/common/collect/ImmutableSortedSetTest.java b/test/com/google/common/collect/ImmutableSortedSetTest.java
new file mode 100644
index 0000000..9d690f1
--- /dev/null
+++ b/test/com/google/common/collect/ImmutableSortedSetTest.java
@@ -0,0 +1,689 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.ImmutableSet.Builder;
+import static com.google.common.testing.junit3.JUnitAsserts.assertContentsInOrder;
+import static com.google.common.testing.junit3.JUnitAsserts.assertNotEqual;
+import com.google.common.testutils.NullPointerTester;
+import com.google.common.testutils.SerializableTester;
+
+import static java.util.Arrays.asList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.SortedSet;
+
+/**
+ * Unit tests for {@link ImmutableSortedSet}.
+ *
+ * @author Jared Levy
+ */
+public class ImmutableSortedSetTest extends AbstractImmutableSetTest {
+
+ // enum singleton pattern
+ private enum StringLengthComparator implements Comparator<String> {
+ INSTANCE;
+
+ public int compare(String a, String b) {
+ return a.length() - b.length();
+ }
+ }
+
+ private static final Comparator<String> STRING_LENGTH
+ = StringLengthComparator.INSTANCE;
+
+ @Override protected Set<String> of() {
+ return ImmutableSortedSet.of();
+ }
+
+ @Override protected Set<String> of(String e) {
+ return ImmutableSortedSet.of(e);
+ }
+
+ @Override protected Set<String> of(String e1, String e2) {
+ return ImmutableSortedSet.of(e1, e2);
+ }
+
+ @Override protected Set<String> of(String e1, String e2, String e3) {
+ return ImmutableSortedSet.of(e1, e2, e3);
+ }
+
+ @Override protected Set<String> of(
+ String e1, String e2, String e3, String e4) {
+ return ImmutableSortedSet.of(e1, e2, e3, e4);
+ }
+
+ @Override protected Set<String> of(
+ String e1, String e2, String e3, String e4, String e5) {
+ return ImmutableSortedSet.of(e1, e2, e3, e4, e5);
+ }
+
+ @Override protected Set<String> of(String... elements) {
+ return ImmutableSortedSet.of(elements);
+ }
+
+ @Override protected Set<String> copyOf(Iterable<String> elements) {
+ return ImmutableSortedSet.copyOf(elements);
+ }
+
+ @Override protected Set<String> copyOf(Iterator<String> elements) {
+ return ImmutableSortedSet.copyOf(elements);
+ }
+
+ public void testNullPointers() throws Exception {
+ NullPointerTester tester = new NullPointerTester();
+ tester.testAllPublicStaticMethods(ImmutableSortedSet.class);
+ }
+
+ public void testEmpty_comparator() {
+ SortedSet<String> set = ImmutableSortedSet.of();
+ assertSame(Ordering.natural(), set.comparator());
+ }
+
+ public void testEmpty_headSet() {
+ SortedSet<String> set = ImmutableSortedSet.of();
+ assertSame(set, set.headSet("c"));
+ }
+
+ public void testEmpty_tailSet() {
+ SortedSet<String> set = ImmutableSortedSet.of();
+ assertSame(set, set.tailSet("f"));
+ }
+
+ public void testEmpty_subSet() {
+ SortedSet<String> set = ImmutableSortedSet.of();
+ assertSame(set, set.subSet("c", "f"));
+ }
+
+ public void testEmpty_first() {
+ SortedSet<String> set = ImmutableSortedSet.of();
+ try {
+ set.first();
+ fail();
+ } catch (NoSuchElementException expected) {
+ }
+ }
+
+ public void testEmpty_last() {
+ SortedSet<String> set = ImmutableSortedSet.of();
+ try {
+ set.last();
+ fail();
+ } catch (NoSuchElementException expected) {
+ }
+ }
+
+ public void testEmpty_serialization() {
+ SortedSet<String> set = ImmutableSortedSet.of();
+ SortedSet<String> copy = SerializableTester.reserialize(set);
+ assertSame(set, copy);
+ }
+
+ public void testSingle_comparator() {
+ SortedSet<String> set = ImmutableSortedSet.of("e");
+ assertSame(Ordering.natural(), set.comparator());
+ }
+
+ public void testSingle_headSet() {
+ SortedSet<String> set = ImmutableSortedSet.of("e");
+ assertTrue(set.headSet("g") instanceof ImmutableSortedSet<?>);
+ assertContentsInOrder(set.headSet("g"), "e");
+ assertSame(ImmutableSortedSet.of(), set.headSet("c"));
+ assertSame(ImmutableSortedSet.of(), set.headSet("e"));
+ }
+
+ public void testSingle_tailSet() {
+ SortedSet<String> set = ImmutableSortedSet.of("e");
+ assertTrue(set.tailSet("c") instanceof ImmutableSortedSet<?>);
+ assertContentsInOrder(set.tailSet("c"), "e");
+ assertContentsInOrder(set.tailSet("e"), "e");
+ assertSame(ImmutableSortedSet.of(), set.tailSet("g"));
+ }
+
+ public void testSingle_subSet() {
+ SortedSet<String> set = ImmutableSortedSet.of("e");
+ assertTrue(set.subSet("c", "g") instanceof ImmutableSortedSet<?>);
+ assertContentsInOrder(set.subSet("c", "g"), "e");
+ assertContentsInOrder(set.subSet("e", "g"), "e");
+ assertSame(ImmutableSortedSet.of(), set.subSet("f", "g"));
+ assertSame(ImmutableSortedSet.of(), set.subSet("c", "e"));
+ assertSame(ImmutableSortedSet.of(), set.subSet("c", "d"));
+ }
+
+ public void testSingle_first() {
+ SortedSet<String> set = ImmutableSortedSet.of("e");
+ assertEquals("e", set.first());
+ }
+
+ public void testSingle_last() {
+ SortedSet<String> set = ImmutableSortedSet.of("e");
+ assertEquals("e", set.last());
+ }
+
+ public void testSingle_serialization() {
+ SortedSet<String> set = ImmutableSortedSet.of("e");
+ SortedSet<String> copy = SerializableTester.reserializeAndAssert(set);
+ assertEquals(set.comparator(), copy.comparator());
+ }
+
+ public void testOf_ordering() {
+ SortedSet<String> set =
+ ImmutableSortedSet.of("e", "a", "f", "b", "d", "c");
+ assertContentsInOrder(set, "a", "b", "c", "d", "e", "f");
+ }
+
+ public void testOf_ordering_dupes() {
+ SortedSet<String> set =
+ ImmutableSortedSet.of("e", "a", "e", "f", "b", "b", "d", "a", "c");
+ assertContentsInOrder(set, "a", "b", "c", "d", "e", "f");
+ }
+
+ public void testOf_comparator() {
+ SortedSet<String> set =
+ ImmutableSortedSet.of("e", "a", "f", "b", "d", "c");
+ assertSame(Ordering.natural(), set.comparator());
+ }
+
+ public void testOf_headSet() {
+ SortedSet<String> set =
+ ImmutableSortedSet.of("e", "f", "b", "d", "c");
+ assertTrue(set.headSet("e") instanceof ImmutableSortedSet<?>);
+ assertContentsInOrder(set.headSet("e"), "b", "c", "d");
+ assertContentsInOrder(set.headSet("g"), "b", "c", "d", "e", "f");
+ assertSame(ImmutableSortedSet.of(), set.headSet("a"));
+ assertSame(ImmutableSortedSet.of(), set.headSet("b"));
+ }
+
+ public void testOf_tailSet() {
+ SortedSet<String> set =
+ ImmutableSortedSet.of("e", "f", "b", "d", "c");
+ assertTrue(set.tailSet("e") instanceof ImmutableSortedSet<?>);
+ assertContentsInOrder(set.tailSet("e"), "e", "f");
+ assertContentsInOrder(set.tailSet("a"), "b", "c", "d", "e", "f");
+ assertSame(ImmutableSortedSet.of(), set.tailSet("g"));
+ }
+
+ public void testOf_subSet() {
+ SortedSet<String> set =
+ ImmutableSortedSet.of("e", "f", "b", "d", "c");
+ assertTrue(set.subSet("c", "e") instanceof ImmutableSortedSet<?>);
+ assertContentsInOrder(set.subSet("c", "e"), "c", "d");
+ assertContentsInOrder(set.subSet("a", "g"), "b", "c", "d", "e", "f");
+ assertSame(ImmutableSortedSet.of(), set.subSet("a", "b"));
+ assertSame(ImmutableSortedSet.of(), set.subSet("g", "h"));
+ assertSame(ImmutableSortedSet.of(), set.subSet("c", "c"));
+ try {
+ set.subSet("e", "c");
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+ SerializableTester.reserializeAndAssert(set.subSet("c", "e"));
+ }
+
+ public void testOf_first() {
+ SortedSet<String> set =
+ ImmutableSortedSet.of("e", "f", "b", "d", "c");
+ assertEquals("b", set.first());
+ }
+
+ public void testOf_last() {
+ SortedSet<String> set =
+ ImmutableSortedSet.of("e", "f", "b", "d", "c");
+ assertEquals("f", set.last());
+ }
+
+ public void testOf_serialization() {
+ SortedSet<String> set =
+ ImmutableSortedSet.of("e", "f", "b", "d", "c");
+ SortedSet<String> copy = SerializableTester.reserializeAndAssert(set);
+ assertTrue(Iterables.elementsEqual(set, copy));
+ assertEquals(set.comparator(), copy.comparator());
+ }
+
+ /* "Explicit" indicates an explicit comparator. */
+
+ public void testExplicit_ordering() {
+ SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add(
+ "in", "the", "quick", "jumped", "over", "a").build();
+ assertContentsInOrder(set, "a", "in", "the", "over", "quick", "jumped");
+ }
+
+ public void testExplicit_ordering_dupes() {
+ SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add(
+ "in", "the", "quick", "brown", "fox", "jumped",
+ "over", "a", "lazy", "dog").build();
+ assertContentsInOrder(set, "a", "in", "the", "over", "quick", "jumped");
+ }
+
+ public void testExplicit_contains() {
+ SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add(
+ "in", "the", "quick", "jumped", "over", "a").build();
+ assertTrue(set.contains("quick"));
+ assertTrue(set.contains("google"));
+ assertFalse(set.contains(""));
+ assertFalse(set.contains("california"));
+ assertFalse(set.contains(null));
+ assertFalse(set.contains(3.7));
+ }
+
+ public void testExplicit_comparator() {
+ SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add(
+ "in", "the", "quick", "jumped", "over", "a").build();
+ assertSame(STRING_LENGTH, set.comparator());
+ }
+
+ public void testExplicit_headSet() {
+ SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add(
+ "in", "the", "quick", "jumped", "over", "a").build();
+ assertTrue(set.headSet("a") instanceof ImmutableSortedSet<?>);
+ assertTrue(set.headSet("fish") instanceof ImmutableSortedSet<?>);
+ assertContentsInOrder(set.headSet("fish"), "a", "in", "the");
+ assertContentsInOrder(
+ set.headSet("california"), "a", "in", "the", "over", "quick", "jumped");
+ assertTrue(set.headSet("a").isEmpty());
+ assertTrue(set.headSet("").isEmpty());
+ }
+
+ public void testExplicit_tailSet() {
+ SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add(
+ "in", "the", "quick", "jumped", "over", "a").build();
+ assertTrue(set.tailSet("california") instanceof ImmutableSortedSet<?>);
+ assertTrue(set.tailSet("fish") instanceof ImmutableSortedSet<?>);
+ assertContentsInOrder(set.tailSet("fish"), "over", "quick", "jumped");
+ assertContentsInOrder(
+ set.tailSet("a"), "a", "in", "the", "over", "quick", "jumped");
+ assertTrue(set.tailSet("california").isEmpty());
+ }
+
+ public void testExplicit_subSet() {
+ SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add(
+ "in", "the", "quick", "jumped", "over", "a").build();
+ assertTrue(set.subSet("the", "quick") instanceof ImmutableSortedSet<?>);
+ assertTrue(set.subSet("", "b") instanceof ImmutableSortedSet<?>);
+ assertContentsInOrder(set.subSet("the", "quick"), "the", "over");
+ assertContentsInOrder(
+ set.subSet("a", "california"), "a", "in", "the", "over", "quick",
+ "jumped");
+ assertTrue(set.subSet("", "b").isEmpty());
+ assertTrue(set.subSet("vermont", "california").isEmpty());
+ assertTrue(set.subSet("aaa", "zzz").isEmpty());
+ try {
+ set.subSet("quick", "the");
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ public void testExplicit_first() {
+ SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add(
+ "in", "the", "quick", "jumped", "over", "a").build();
+ assertEquals("a", set.first());
+ }
+
+ public void testExplicit_last() {
+ SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add(
+ "in", "the", "quick", "jumped", "over", "a").build();
+ assertEquals("jumped", set.last());
+ }
+
+ public void testExplicitEmpty_serialization() {
+ @SuppressWarnings("unchecked")
+ SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).build();
+ SortedSet<String> copy = SerializableTester.reserializeAndAssert(set);
+ assertTrue(set.isEmpty());
+ assertTrue(copy.isEmpty());
+ assertSame(set.comparator(), copy.comparator());
+ }
+
+ public void testExplicit_serialization() {
+ SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add(
+ "in", "the", "quick", "jumped", "over", "a").build();
+ SortedSet<String> copy = SerializableTester.reserializeAndAssert(set);
+ assertTrue(Iterables.elementsEqual(set, copy));
+ assertSame(set.comparator(), copy.comparator());
+ }
+
+ public void testCopyOf_ordering() {
+ SortedSet<String> set =
+ ImmutableSortedSet.copyOf(asList(
+ "e", "a", "f", "b", "d", "c"));
+ assertContentsInOrder(set, "a", "b", "c", "d", "e", "f");
+ }
+
+ public void testCopyOf_ordering_dupes() {
+ SortedSet<String> set =
+ ImmutableSortedSet.copyOf(asList(
+ "e", "a", "e", "f", "b", "b", "d", "a", "c"));
+ assertContentsInOrder(set, "a", "b", "c", "d", "e", "f");
+ }
+
+ public void testCopyOf_subSet() {
+ SortedSet<String> set =
+ ImmutableSortedSet.of("e", "a", "f", "b", "d", "c");
+ SortedSet<String> subset = set.subSet("c", "e");
+ SortedSet<String> copy = ImmutableSortedSet.copyOf(subset);
+ assertEquals(subset, copy);
+ assertFalse(subset == copy);
+ }
+
+ public void testCopyOf_headSet() {
+ SortedSet<String> set =
+ ImmutableSortedSet.of("e", "a", "f", "b", "d", "c");
+ SortedSet<String> headset = set.headSet("d");
+ SortedSet<String> copy = ImmutableSortedSet.copyOf(headset);
+ assertEquals(headset, copy);
+ assertFalse(headset == copy);
+ }
+
+ public void testCopyOf_tailSet() {
+ SortedSet<String> set =
+ ImmutableSortedSet.of("e", "a", "f", "b", "d", "c");
+ SortedSet<String> tailset = set.tailSet("d");
+ SortedSet<String> copy = ImmutableSortedSet.copyOf(tailset);
+ assertEquals(tailset, copy);
+ assertFalse(tailset == copy);
+ }
+
+ public void testCopyOf_comparator() {
+ SortedSet<String> set =
+ ImmutableSortedSet.copyOf(asList(
+ "e", "a", "f", "b", "d", "c"));
+ assertSame(Ordering.natural(), set.comparator());
+ }
+
+ public void testCopyOf_iterator_ordering() {
+ SortedSet<String> set =
+ ImmutableSortedSet.copyOf(asIterator(
+ "e", "a", "f", "b", "d", "c"));
+ assertContentsInOrder(set, "a", "b", "c", "d", "e", "f");
+ }
+
+ public void testCopyOf_iterator_ordering_dupes() {
+ SortedSet<String> set =
+ ImmutableSortedSet.copyOf(asIterator(
+ "e", "a", "e", "f", "b", "b", "d", "a", "c"));
+ assertContentsInOrder(set, "a", "b", "c", "d", "e", "f");
+ }
+
+ public void testCopyOf_iterator_comparator() {
+ SortedSet<String> set =
+ ImmutableSortedSet.copyOf(asIterator(
+ "e", "a", "f", "b", "d", "c"));
+ assertSame(Ordering.natural(), set.comparator());
+ }
+
+ public void testCopyOf_sortedSet_ordering() {
+ SortedSet<String> set =
+ ImmutableSortedSet.copyOf(Sets.newTreeSet(asList(
+ "e", "a", "f", "b", "d", "c")));
+ assertContentsInOrder(set, "a", "b", "c", "d", "e", "f");
+ }
+
+ public void testCopyOf_sortedSet_comparator() {
+ SortedSet<String> set =
+ ImmutableSortedSet.copyOf(Sets.<String>newTreeSet());
+ assertSame(Ordering.natural(), set.comparator());
+ }
+
+ public void testCopyOfExplicit_ordering() {
+ SortedSet<String> set =
+ ImmutableSortedSet.copyOf(STRING_LENGTH, asList(
+ "in", "the", "quick", "jumped", "over", "a"));
+ assertContentsInOrder(set, "a", "in", "the", "over", "quick", "jumped");
+ }
+
+ public void testCopyOfExplicit_ordering_dupes() {
+ SortedSet<String> set =
+ ImmutableSortedSet.copyOf(STRING_LENGTH, asList(
+ "in", "the", "quick", "brown", "fox", "jumped", "over", "a",
+ "lazy", "dog"));
+ assertContentsInOrder(set, "a", "in", "the", "over", "quick", "jumped");
+ }
+
+ public void testCopyOfExplicit_comparator() {
+ SortedSet<String> set =
+ ImmutableSortedSet.copyOf(STRING_LENGTH, asList(
+ "in", "the", "quick", "jumped", "over", "a"));
+ assertSame(STRING_LENGTH, set.comparator());
+ }
+
+ public void testCopyOfExplicit_iterator_ordering() {
+ SortedSet<String> set =
+ ImmutableSortedSet.copyOf(STRING_LENGTH, asIterator(
+ "in", "the", "quick", "jumped", "over", "a"));
+ assertContentsInOrder(set, "a", "in", "the", "over", "quick", "jumped");
+ }
+
+ public void testCopyOfExplicit_iterator_ordering_dupes() {
+ SortedSet<String> set =
+ ImmutableSortedSet.copyOf(STRING_LENGTH, asIterator(
+ "in", "the", "quick", "brown", "fox", "jumped", "over", "a",
+ "lazy", "dog"));
+ assertContentsInOrder(set, "a", "in", "the", "over", "quick", "jumped");
+ }
+
+ public void testCopyOfExplicit_iterator_comparator() {
+ SortedSet<String> set =
+ ImmutableSortedSet.copyOf(STRING_LENGTH, asIterator(
+ "in", "the", "quick", "jumped", "over", "a"));
+ assertSame(STRING_LENGTH, set.comparator());
+ }
+
+ public void testCopyOf_sortedSetIterable() {
+ SortedSet<String> input = Sets.newTreeSet(STRING_LENGTH);
+ Collections.addAll(input, "in", "the", "quick", "jumped", "over", "a");
+ SortedSet<String> set = ImmutableSortedSet.copyOf(input);
+ assertContentsInOrder(set, "a", "in", "jumped", "over", "quick", "the");
+ }
+
+ public void testCopyOfSorted_natural_ordering() {
+ SortedSet<String> input = Sets.newTreeSet(
+ asList("in", "the", "quick", "jumped", "over", "a"));
+ SortedSet<String> set = ImmutableSortedSet.copyOfSorted(input);
+ assertContentsInOrder(set, "a", "in", "jumped", "over", "quick", "the");
+ }
+
+ public void testCopyOfSorted_natural_comparator() {
+ SortedSet<String> input =
+ Sets.newTreeSet(asList("in", "the", "quick", "jumped", "over", "a"));
+ SortedSet<String> set = ImmutableSortedSet.copyOfSorted(input);
+ assertSame(Ordering.natural(), set.comparator());
+ }
+
+ public void testCopyOfSorted_explicit_ordering() {
+ SortedSet<String> input = Sets.newTreeSet(STRING_LENGTH);
+ Collections.addAll(input, "in", "the", "quick", "jumped", "over", "a");
+ SortedSet<String> set = ImmutableSortedSet.copyOfSorted(input);
+ assertContentsInOrder(set, "a", "in", "the", "over", "quick", "jumped");
+ assertSame(STRING_LENGTH, set.comparator());
+ }
+
+ public void testEquals_bothDefaultOrdering() {
+ SortedSet<String> set = ImmutableSortedSet.of("a", "b", "c");
+ assertEquals(set, Sets.newTreeSet(asList("a", "b", "c")));
+ assertEquals(Sets.newTreeSet(asList("a", "b", "c")), set);
+ assertNotEqual(set, Sets.newTreeSet(asList("a", "b", "d")));
+ assertNotEqual(Sets.newTreeSet(asList("a", "b", "d")), set);
+ assertNotEqual(set, Sets.newTreeSet(asList(4, 5, 6)));
+ assertNotEqual(Sets.newTreeSet(asList(4, 5, 6)), set);
+ }
+
+ public void testEquals_bothExplicitOrdering() {
+ SortedSet<String> set = ImmutableSortedSet.of("in", "the", "a");
+ assertEquals(Sets.newTreeSet(asList("in", "the", "a")), set);
+ assertNotEqual(set, Sets.newTreeSet(asList("in", "the", "house")));
+ assertNotEqual(Sets.newTreeSet(asList("in", "the", "house")), set);
+ assertNotEqual(set, Sets.newTreeSet(asList(4, 5, 6)));
+ assertNotEqual(Sets.newTreeSet(asList(4, 5, 6)), set);
+
+ Set<String> complex = Sets.newTreeSet(STRING_LENGTH);
+ Collections.addAll(complex, "in", "the", "a");
+ assertEquals(set, complex);
+ }
+
+ public void testContainsAll_notSortedSet() {
+ SortedSet<String> set = ImmutableSortedSet.of("a", "b", "f");
+ assertTrue(set.containsAll(Collections.emptyList()));
+ assertTrue(set.containsAll(asList("b")));
+ assertTrue(set.containsAll(asList("b", "b")));
+ assertTrue(set.containsAll(asList("b", "f")));
+ assertTrue(set.containsAll(asList("b", "f", "a")));
+ assertFalse(set.containsAll(asList("d")));
+ assertFalse(set.containsAll(asList("z")));
+ assertFalse(set.containsAll(asList("b", "d")));
+ assertFalse(set.containsAll(asList("f", "d", "a")));
+ }
+
+ public void testContainsAll_sameComparator() {
+ SortedSet<String> set = ImmutableSortedSet.of("a", "b", "f");
+ assertTrue(set.containsAll(Sets.newTreeSet()));
+ assertTrue(set.containsAll(Sets.newTreeSet(asList("b"))));
+ assertTrue(set.containsAll(Sets.newTreeSet(asList("a", "f"))));
+ assertTrue(set.containsAll(Sets.newTreeSet(asList("a", "b", "f"))));
+ assertFalse(set.containsAll(Sets.newTreeSet(asList("d"))));
+ assertFalse(set.containsAll(Sets.newTreeSet(asList("z"))));
+ assertFalse(set.containsAll(Sets.newTreeSet(asList("b", "d"))));
+ assertFalse(set.containsAll(Sets.newTreeSet(asList("f", "d", "a"))));
+ }
+
+ public void testContainsAll_differentComparator() {
+ Comparator<Comparable<?>> comparator = Collections.reverseOrder();
+ SortedSet<String> set = new ImmutableSortedSet.Builder<String>(comparator)
+ .add("a", "b", "f").build();
+ assertTrue(set.containsAll(Sets.newTreeSet()));
+ assertTrue(set.containsAll(Sets.newTreeSet(asList("b"))));
+ assertTrue(set.containsAll(Sets.newTreeSet(asList("a", "f"))));
+ assertTrue(set.containsAll(Sets.newTreeSet(asList("a", "b", "f"))));
+ assertFalse(set.containsAll(Sets.newTreeSet(asList("d"))));
+ assertFalse(set.containsAll(Sets.newTreeSet(asList("z"))));
+ assertFalse(set.containsAll(Sets.newTreeSet(asList("b", "d"))));
+ assertFalse(set.containsAll(Sets.newTreeSet(asList("f", "d", "a"))));
+ }
+
+ public void testDifferentComparator_serialization() {
+ Comparator<Comparable<?>> comparator = Collections.reverseOrder();
+ SortedSet<String> set = new ImmutableSortedSet.Builder<String>(comparator)
+ .add("a", "b", "c").build();
+ SortedSet<String> copy = SerializableTester.reserializeAndAssert(set);
+ assertTrue(Iterables.elementsEqual(set, copy));
+ assertEquals(set.comparator(), copy.comparator());
+ }
+
+ public void testReverseOrder() {
+ SortedSet<String> set = ImmutableSortedSet.<String>reverseOrder()
+ .add("a", "b", "c").build();
+ assertContentsInOrder(set, "c", "b", "a");
+ assertEquals(Ordering.natural().reverse(), set.comparator());
+ }
+
+ private static final Comparator<Object> TO_STRING
+ = new Comparator<Object>() {
+ public int compare(Object o1, Object o2) {
+ return o1.toString().compareTo(o2.toString());
+ }
+ };
+
+ public void testSupertypeComparator() {
+ SortedSet<Integer> set = new ImmutableSortedSet.Builder<Integer>(TO_STRING)
+ .add(3, 12, 101, 44).build();
+ assertContentsInOrder(set, 101, 12, 3, 44);
+ }
+
+ public void testSupertypeComparatorSubtypeElements() {
+ SortedSet<Number> set = new ImmutableSortedSet.Builder<Number>(TO_STRING)
+ .add(3, 12, 101, 44).build();
+ assertContentsInOrder(set, 101, 12, 3, 44);
+ }
+
+ @Override <E extends Comparable<E>> Builder<E> builder() {
+ return ImmutableSortedSet.naturalOrder();
+ }
+
+ @Override int getComplexBuilderSetLastElement() {
+ return 0x00FFFFFF;
+ }
+
+ public void testLegacyComparable_of() {
+ ImmutableSortedSet<LegacyComparable> set0 = ImmutableSortedSet.of();
+
+ @SuppressWarnings("unchecked") // using a legacy comparable
+ ImmutableSortedSet<LegacyComparable> set1 = ImmutableSortedSet.of(
+ LegacyComparable.Z);
+
+ @SuppressWarnings("unchecked") // using a legacy comparable
+ ImmutableSortedSet<LegacyComparable> set2 = ImmutableSortedSet.of(
+ LegacyComparable.Z, LegacyComparable.Y);
+ }
+
+ public void testLegacyComparable_copyOf_collection() {
+ @SuppressWarnings("unchecked") // using a legacy comparable
+ ImmutableSortedSet<LegacyComparable> set
+ = ImmutableSortedSet.copyOf(LegacyComparable.VALUES_BACKWARD);
+ assertTrue(Iterables.elementsEqual(LegacyComparable.VALUES_FORWARD, set));
+ }
+
+ public void testLegacyComparable_copyOf_iterator() {
+ @SuppressWarnings("unchecked") // using a legacy comparable
+ ImmutableSortedSet<LegacyComparable> set = ImmutableSortedSet.copyOf(
+ LegacyComparable.VALUES_BACKWARD.iterator());
+ assertTrue(Iterables.elementsEqual(LegacyComparable.VALUES_FORWARD, set));
+ }
+
+ public void testLegacyComparable_builder_natural() {
+ @SuppressWarnings("unchecked")
+ // Note: IntelliJ wrongly reports an error for this statement
+ ImmutableSortedSet.Builder<LegacyComparable> builder
+ = ImmutableSortedSet.<LegacyComparable>naturalOrder();
+
+ builder.addAll(LegacyComparable.VALUES_BACKWARD);
+ builder.add(LegacyComparable.X);
+ builder.add(LegacyComparable.Y, LegacyComparable.Z);
+
+ ImmutableSortedSet<LegacyComparable> set = builder.build();
+ assertTrue(Iterables.elementsEqual(LegacyComparable.VALUES_FORWARD, set));
+ }
+
+ public void testLegacyComparable_builder_reverse() {
+ @SuppressWarnings("unchecked")
+ // Note: IntelliJ wrongly reports an error for this statement
+ ImmutableSortedSet.Builder<LegacyComparable> builder
+ = ImmutableSortedSet.<LegacyComparable>reverseOrder();
+
+ builder.addAll(LegacyComparable.VALUES_FORWARD);
+ builder.add(LegacyComparable.X);
+ builder.add(LegacyComparable.Y, LegacyComparable.Z);
+
+ ImmutableSortedSet<LegacyComparable> set = builder.build();
+ assertTrue(Iterables.elementsEqual(LegacyComparable.VALUES_BACKWARD, set));
+ }
+
+ @SuppressWarnings("deprecation")
+ public void testBuilderMethod() {
+ try {
+ ImmutableSortedSet.Builder<String> builder = ImmutableSortedSet.builder();
+ fail();
+ } catch (UnsupportedOperationException expected) {
+ }
+ }
+
+ private static final <E> Iterator<E> asIterator(E... elements) {
+ return asList(elements).iterator();
+ }
+}
diff --git a/test/com/google/common/collect/InverseBiMapTest.java b/test/com/google/common/collect/InverseBiMapTest.java
new file mode 100644
index 0000000..823c762
--- /dev/null
+++ b/test/com/google/common/collect/InverseBiMapTest.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+/**
+ * Unit test covering the inverse view of a {@code BiMap}.
+ *
+ * @author Kevin Bourrillion
+ */
+public class InverseBiMapTest extends AbstractBiMapTest {
+ @Override protected BiMap<Integer, String> create() {
+ BiMap<String,Integer> inverse = HashBiMap.create();
+ return inverse.inverse();
+ }
+}
diff --git a/test/com/google/common/collect/IterablesTest.java b/test/com/google/common/collect/IterablesTest.java
new file mode 100644
index 0000000..362e1f5
--- /dev/null
+++ b/test/com/google/common/collect/IterablesTest.java
@@ -0,0 +1,797 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import static com.google.common.collect.Lists.newArrayList;
+import static com.google.common.collect.testing.IteratorFeature.MODIFIABLE;
+import com.google.common.collect.testing.IteratorTester;
+import com.google.common.testing.junit3.JUnitAsserts;
+import static com.google.common.testing.junit3.JUnitAsserts.assertContentsInOrder;
+import com.google.common.testutils.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import static java.util.Arrays.asList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.RandomAccess;
+import java.util.Set;
+import java.util.SortedSet;
+
+/**
+ * Unit test for {@code Iterables}.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ */
+public class IterablesTest extends TestCase {
+ public void testSize0() {
+ Iterable<String> iterable = Collections.emptySet();
+ assertEquals(0, Iterables.size(iterable));
+ }
+
+ public void testSize1Collection() {
+ Iterable<String> iterable = Collections.singleton("a");
+ assertEquals(1, Iterables.size(iterable));
+ }
+
+ public void testSize2NonCollection() {
+ Iterable<Integer> iterable = new Iterable<Integer>() {
+ public Iterator<Integer> iterator() {
+ return asList(0, 1).iterator();
+ }
+ };
+ assertEquals(2, Iterables.size(iterable));
+ }
+
+ @SuppressWarnings("serial")
+ public void testSize_collection_doesntIterate() {
+ List<Integer> nums = asList(1, 2, 3, 4, 5);
+ List<Integer> collection = new ArrayList<Integer>(nums) {
+ @Override public Iterator<Integer> iterator() {
+ fail("Don't iterate me!");
+ return null;
+ }
+ };
+ assertEquals(5, Iterables.size(collection));
+ }
+
+ private static Iterable<String> iterable(String... elements) {
+ final List<String> list = asList(elements);
+ return new Iterable<String>() {
+ public Iterator<String> iterator() {
+ return list.iterator();
+ }
+ };
+ }
+
+ public void test_contains_null_set_yes() {
+ Iterable<String> set = Sets.newHashSet("a", null, "b");
+ assertTrue(Iterables.contains(set, null));
+ }
+
+ public void test_contains_null_set_no() {
+ Iterable<String> set = Sets.newHashSet("a", "b");
+ assertFalse(Iterables.contains(set, null));
+ }
+
+ public void test_contains_null_iterable_yes() {
+ Iterable<String> set = iterable("a", null, "b");
+ assertTrue(Iterables.contains(set, null));
+ }
+
+ public void test_contains_null_iterable_no() {
+ Iterable<String> set = iterable("a", "b");
+ assertFalse(Iterables.contains(set, null));
+ }
+
+ public void test_contains_nonnull_set_yes() {
+ Iterable<String> set = Sets.newHashSet("a", null, "b");
+ assertTrue(Iterables.contains(set, "b"));
+ }
+
+ public void test_contains_nonnull_set_no() {
+ Iterable<String> set = Sets.newHashSet("a", "b");
+ assertFalse(Iterables.contains(set, "c"));
+ }
+
+ public void test_contains_nonnull_iterable_yes() {
+ Iterable<String> set = iterable("a", null, "b");
+ assertTrue(Iterables.contains(set, "b"));
+ }
+
+ public void test_contains_nonnull_iterable_no() {
+ Iterable<String> set = iterable("a", "b");
+ assertFalse(Iterables.contains(set, "c"));
+ }
+
+ public void testGetOnlyElement_noDefault_valid() {
+ Iterable<String> iterable = Collections.singletonList("foo");
+ assertEquals("foo", Iterables.getOnlyElement(iterable));
+ }
+
+ public void testGetOnlyElement_noDefault_empty() {
+ Iterable<String> iterable = Collections.emptyList();
+ try {
+ Iterables.getOnlyElement(iterable);
+ fail();
+ } catch (NoSuchElementException expected) {
+ }
+ }
+
+ public void testGetOnlyElement_noDefault_multiple() {
+ Iterable<String> iterable = asList("foo", "bar");
+ try {
+ Iterables.getOnlyElement(iterable);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ public void testGetOnlyElement_withDefault_singleton() {
+ Iterable<String> iterable = Collections.singletonList("foo");
+ assertEquals("foo", Iterables.getOnlyElement(iterable, "bar"));
+ }
+
+ public void testGetOnlyElement_withDefault_empty() {
+ Iterable<String> iterable = Collections.emptyList();
+ assertEquals("bar", Iterables.getOnlyElement(iterable, "bar"));
+ }
+
+ public void testGetOnlyElement_withDefault_empty_null() {
+ Iterable<String> iterable = Collections.emptyList();
+ assertNull(Iterables.getOnlyElement(iterable, null));
+ }
+
+ public void testGetOnlyElement_withDefault_multiple() {
+ Iterable<String> iterable = asList("foo", "bar");
+ try {
+ Iterables.getOnlyElement(iterable, "x");
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ public void testToArrayEmpty() {
+ Iterable<String> iterable = Collections.emptyList();
+ String[] array = Iterables.toArray(iterable, String.class);
+ assertTrue(Arrays.equals(new String[0], array));
+ }
+
+ public void testToArraySingleton() {
+ Iterable<String> iterable = Collections.singletonList("a");
+ String[] array = Iterables.toArray(iterable, String.class);
+ assertTrue(Arrays.equals(new String[] { "a" }, array));
+ }
+
+ public void testToArray() {
+ String[] sourceArray = new String[] {"a", "b", "c"};
+ Iterable<String> iterable = asList(sourceArray);
+ String[] newArray = Iterables.toArray(iterable, String.class);
+ assertTrue(Arrays.equals(sourceArray, newArray));
+ }
+
+ public void testFilter() {
+ Iterable<String> unfiltered = newArrayList("foo", "bar");
+ Iterable<String> filtered = Iterables.filter(unfiltered,
+ Predicates.equalTo("foo"));
+
+ List<String> expected = Collections.singletonList("foo");
+ List<String> actual = newArrayList(filtered);
+ assertEquals(expected, actual);
+ assertCanIterateAgain(filtered);
+ assertEquals("[foo]", filtered.toString());
+ }
+
+ public void testAny() {
+ List<String> list = newArrayList();
+ Predicate<String> predicate = Predicates.equalTo("pants");
+
+ assertFalse(Iterables.any(list, predicate));
+ list.add("cool");
+ assertFalse(Iterables.any(list, predicate));
+ list.add("pants");
+ assertTrue(Iterables.any(list, predicate));
+ }
+
+ public void testAll() {
+ List<String> list = newArrayList();
+ Predicate<String> predicate = Predicates.equalTo("cool");
+
+ assertTrue(Iterables.all(list, predicate));
+ list.add("cool");
+ assertTrue(Iterables.all(list, predicate));
+ list.add("pants");
+ assertFalse(Iterables.all(list, predicate));
+ }
+
+ public void testFind() {
+ Iterable<String> list = newArrayList("cool", "pants");
+ assertEquals("cool", Iterables.find(list, Predicates.equalTo("cool")));
+ assertEquals("pants", Iterables.find(list, Predicates.equalTo("pants")));
+ try {
+ Iterables.find(list, Predicates.alwaysFalse());
+ fail();
+ } catch (NoSuchElementException e) {
+ }
+ assertEquals("cool", Iterables.find(list, Predicates.alwaysTrue()));
+ assertCanIterateAgain(list);
+ }
+
+ private static class TypeA {}
+ private interface TypeB {}
+ private static class HasBoth extends TypeA implements TypeB {}
+
+ public void testFilterByType() throws Exception {
+ HasBoth hasBoth = new HasBoth();
+ Iterable<TypeA> alist =
+ newArrayList(new TypeA(), new TypeA(), hasBoth, new TypeA());
+ Iterable<TypeB> blist = Iterables.filter(alist, TypeB.class);
+ JUnitAsserts.assertContentsInOrder(blist, hasBoth);
+ }
+
+ public void testTransform() {
+ List<String> input = asList("1", "2", "3");
+ Iterable<Integer> result = Iterables.transform(input,
+ new Function<String, Integer>() {
+ public Integer apply(String from) {
+ return Integer.valueOf(from);
+ }
+ });
+
+ List<Integer> actual = newArrayList(result);
+ List<Integer> expected = asList(1, 2, 3);
+ assertEquals(expected, actual);
+ assertCanIterateAgain(result);
+ assertEquals("[1, 2, 3]", result.toString());
+ }
+
+ public void testPoorlyBehavedTransform() {
+ List<String> input = asList("1", null, "3");
+ Iterable<Integer> result = Iterables.transform(input,
+ new Function<String, Integer>() {
+ public Integer apply(String from) {
+ return Integer.valueOf(from);
+ }
+ });
+
+ Iterator<Integer> resultIterator = result.iterator();
+ resultIterator.next();
+
+ try {
+ resultIterator.next();
+ fail("Expected NFE");
+ } catch (NumberFormatException nfe) {
+ // Expected to fail.
+ }
+ }
+
+ public void testNullFriendlyTransform() {
+ List<Integer> input = asList(1, 2, null, 3);
+ Iterable<String> result = Iterables.transform(input,
+ new Function<Integer, String>() {
+ public String apply(Integer from) {
+ return String.valueOf(from);
+ }
+ });
+
+ List<String> actual = newArrayList(result);
+ List<String> expected = asList("1", "2", "null", "3");
+ assertEquals(expected, actual);
+ }
+
+ // Far less exhaustive than the tests in IteratorsTest
+ public void testCycle() {
+ Iterable<String> cycle = Iterables.cycle("a", "b");
+
+ int howManyChecked = 0;
+ for (String string : cycle) {
+ String expected = (howManyChecked % 2 == 0) ? "a" : "b";
+ assertEquals(expected, string);
+ if (howManyChecked++ == 5) {
+ break;
+ }
+ }
+
+ // We left the last iterator pointing to "b". But a new iterator should
+ // always point to "a".
+ for (String string : cycle) {
+ assertEquals("a", string);
+ break;
+ }
+
+ assertEquals("[a, b] (cycled)", cycle.toString());
+ }
+
+ // Again, the exhaustive tests are in IteratorsTest
+ public void testConcatIterable() {
+ List<Integer> list1 = newArrayList(1);
+ List<Integer> list2 = newArrayList(4);
+
+ @SuppressWarnings("unchecked")
+ List<List<Integer>> input = newArrayList(list1, list2);
+
+ Iterable<Integer> result = Iterables.concat(input);
+ assertEquals(asList(1, 4), newArrayList(result));
+
+ // Now change the inputs and see result dynamically change as well
+
+ list1.add(2);
+ List<Integer> list3 = newArrayList(3);
+ input.add(1, list3);
+
+ assertEquals(asList(1, 2, 3, 4), newArrayList(result));
+ assertEquals("[1, 2, 3, 4]", result.toString());
+ }
+
+ public void testConcatVarargs() {
+ List<Integer> list1 = newArrayList(1);
+ List<Integer> list2 = newArrayList(4);
+ List<Integer> list3 = newArrayList(7, 8);
+ List<Integer> list4 = newArrayList(9);
+ List<Integer> list5 = newArrayList(10);
+ @SuppressWarnings("unchecked")
+ Iterable<Integer> result =
+ Iterables.concat(list1, list2, list3, list4, list5);
+ assertEquals(asList(1, 4, 7, 8, 9, 10), newArrayList(result));
+ assertEquals("[1, 4, 7, 8, 9, 10]", result.toString());
+ }
+
+ public void testConcatNullPointerException() {
+ List<Integer> list1 = newArrayList(1);
+ List<Integer> list2 = newArrayList(4);
+
+ try {
+ Iterables.concat(list1, null, list2);
+ fail();
+ } catch (NullPointerException expected) {}
+ }
+
+ public void testConcatPeformingFiniteCycle() {
+ Iterable<Integer> iterable = asList(1, 2, 3);
+ int n = 4;
+ Iterable<Integer> repeated
+ = Iterables.concat(Collections.nCopies(n, iterable));
+ assertContentsInOrder(repeated, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3);
+ }
+
+ public void testPartition_badSize() {
+ Iterable<Integer> source = Collections.singleton(1);
+ try {
+ Iterables.partition(source, 0);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ public void testPartition_empty() {
+ Iterable<Integer> source = Collections.emptySet();
+ Iterable<List<Integer>> partitions = Iterables.partition(source, 1);
+ assertTrue(Iterables.isEmpty(partitions));
+ }
+
+ public void testPartition_singleton1() {
+ Iterable<Integer> source = Collections.singleton(1);
+ Iterable<List<Integer>> partitions = Iterables.partition(source, 1);
+ assertEquals(1, Iterables.size(partitions));
+ assertEquals(Collections.singletonList(1), partitions.iterator().next());
+ }
+
+ public void testPartition_view() {
+ List<Integer> list = asList(1, 2);
+ Iterable<List<Integer>> partitions = Iterables.partition(list, 2);
+
+ // Changes before the partition is retrieved are reflected
+ list.set(0, 3);
+
+ Iterator<List<Integer>> iterator = partitions.iterator();
+
+ // Changes before the partition is retrieved are reflected
+ list.set(1, 4);
+
+ List<Integer> first = iterator.next();
+
+ // Changes after are not
+ list.set(0, 5);
+
+ assertEquals(ImmutableList.of(3, 4), first);
+ }
+
+ public void testPartitionRandomAccessInput() {
+ Iterable<Integer> source = asList(1, 2, 3);
+ Iterable<List<Integer>> partitions = Iterables.partition(source, 2);
+ Iterator<List<Integer>> iterator = partitions.iterator();
+ assertTrue(iterator.next() instanceof RandomAccess);
+ assertTrue(iterator.next() instanceof RandomAccess);
+ }
+
+ public void testPartitionNonRandomAccessInput() {
+ Iterable<Integer> source = Lists.newLinkedList(asList(1, 2, 3));
+ Iterable<List<Integer>> partitions = Iterables.partition(source, 2);
+ Iterator<List<Integer>> iterator = partitions.iterator();
+ // Even though the input list doesn't implement RandomAccess, the output
+ // lists do.
+ assertTrue(iterator.next() instanceof RandomAccess);
+ assertTrue(iterator.next() instanceof RandomAccess);
+ }
+
+ public void testPaddedPartition_basic() {
+ List<Integer> list = asList(1, 2, 3, 4, 5);
+ Iterable<List<Integer>> partitions = Iterables.paddedPartition(list, 2);
+ assertEquals(3, Iterables.size(partitions));
+ assertEquals(asList(5, null), Iterables.getLast(partitions));
+ }
+
+ public void testPaddedPartitionRandomAccessInput() {
+ Iterable<Integer> source = asList(1, 2, 3);
+ Iterable<List<Integer>> partitions = Iterables.paddedPartition(source, 2);
+ Iterator<List<Integer>> iterator = partitions.iterator();
+ assertTrue(iterator.next() instanceof RandomAccess);
+ assertTrue(iterator.next() instanceof RandomAccess);
+ }
+
+ public void testPaddedPartitionNonRandomAccessInput() {
+ Iterable<Integer> source = Lists.newLinkedList(asList(1, 2, 3));
+ Iterable<List<Integer>> partitions = Iterables.paddedPartition(source, 2);
+ Iterator<List<Integer>> iterator = partitions.iterator();
+ // Even though the input list doesn't implement RandomAccess, the output
+ // lists do.
+ assertTrue(iterator.next() instanceof RandomAccess);
+ assertTrue(iterator.next() instanceof RandomAccess);
+ }
+
+ // More tests in IteratorsTest
+ public void testAddAllToList() {
+ List<String> alreadyThere = newArrayList("already", "there");
+ List<String> freshlyAdded = newArrayList("freshly", "added");
+
+ boolean changed = Iterables.addAll(alreadyThere, freshlyAdded);
+ assertContentsInOrder(alreadyThere, "already", "there", "freshly", "added");
+ assertTrue(changed);
+ }
+
+ private static void assertCanIterateAgain(Iterable<?> iterable) {
+ for (@SuppressWarnings("unused") Object obj : iterable) {
+ }
+ }
+
+ public void testNullPointerExceptions() throws Exception {
+ NullPointerTester tester = new NullPointerTester();
+ tester.testAllPublicStaticMethods(Iterables.class);
+ }
+
+ // More exhaustive tests are in IteratorsTest.
+ public void testElementsEqual() throws Exception {
+ Iterable<?> a;
+ Iterable<?> b;
+
+ // A few elements.
+ a = asList(4, 8, 15, 16, 23, 42);
+ b = asList(4, 8, 15, 16, 23, 42);
+ assertTrue(Iterables.elementsEqual(a, b));
+
+ // An element differs.
+ a = asList(4, 8, 15, 12, 23, 42);
+ b = asList(4, 8, 15, 16, 23, 42);
+ assertFalse(Iterables.elementsEqual(a, b));
+
+ // null versus non-null.
+ a = asList(4, 8, 15, null, 23, 42);
+ b = asList(4, 8, 15, 16, 23, 42);
+ assertFalse(Iterables.elementsEqual(a, b));
+ assertFalse(Iterables.elementsEqual(b, a));
+
+ // Different lengths.
+ a = asList(4, 8, 15, 16, 23);
+ b = asList(4, 8, 15, 16, 23, 42);
+ assertFalse(Iterables.elementsEqual(a, b));
+ assertFalse(Iterables.elementsEqual(b, a));
+ }
+
+ public void testReversePassesIteratorsTester() throws Exception {
+ new IteratorTester<Integer>(5, MODIFIABLE, newArrayList(2, 4, 6, 8),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<Integer> newTargetIterator() {
+ return Iterables.reverse(newArrayList(8, 6, 4, 2)).iterator();
+ }
+ }.test();
+ }
+
+ public void testReverseWorksAsExpected() {
+ String[] testStrs = new String[] {"foo", "bar", "baz"};
+ Object[] expected = new Object[] {"baz", "bar", "foo"};
+
+ List<String> stuff = ImmutableList.of(testStrs);
+
+ Iterable<String> reversed = Iterables.reverse(stuff);
+ JUnitAsserts.assertContentsInOrder(reversed, expected);
+ assertEquals("[baz, bar, foo]", reversed.toString());
+
+ List<String> removable = newArrayList("foo", "bar", "bad", "baz");
+
+ reversed = Iterables.reverse(removable);
+ JUnitAsserts.assertContentsInOrder(reversed, "baz", "bad", "bar", "foo");
+
+ Iterator<String> reverseIter = reversed.iterator();
+ assertEquals("baz", reverseIter.next());
+ assertEquals("bad", reverseIter.next());
+ reverseIter.remove();
+
+ JUnitAsserts.assertContentsInOrder(reversed, expected);
+ JUnitAsserts.assertContentsInOrder(reversed, expected);
+ }
+
+ public void testToString() {
+ List<String> list = Collections.emptyList();
+ assertEquals("[]", Iterables.toString(list));
+
+ list = newArrayList("yam", "bam", "jam", "ham");
+ assertEquals("[yam, bam, jam, ham]", Iterables.toString(list));
+ }
+
+ public void testIsEmpty() {
+ Iterable<String> emptyList = Collections.emptyList();
+ assertTrue(Iterables.isEmpty(emptyList));
+
+ Iterable<String> singletonList = Collections.singletonList("foo");
+ assertFalse(Iterables.isEmpty(singletonList));
+ }
+
+ private void testGetOnAbc(Iterable<String> iterable) {
+ try {
+ Iterables.get(iterable, -1);
+ fail();
+ } catch (IndexOutOfBoundsException expected) {}
+ assertEquals("a", Iterables.get(iterable, 0));
+ assertEquals("b", Iterables.get(iterable, 1));
+ assertEquals("c", Iterables.get(iterable, 2));
+ try {
+ Iterables.get(iterable, 3);
+ fail();
+ } catch (IndexOutOfBoundsException nsee) {}
+ try {
+ Iterables.get(iterable, 4);
+ fail();
+ } catch (IndexOutOfBoundsException nsee) {}
+ }
+
+ private void testGetOnEmpty(Iterable<String> iterable) {
+ try {
+ Iterables.get(iterable, 0);
+ fail();
+ } catch (IndexOutOfBoundsException expected) {}
+ }
+
+ public void testGet_list() {
+ testGetOnAbc(newArrayList("a", "b", "c"));
+ }
+
+ public void testGet_emptyList() {
+ testGetOnEmpty(Collections.<String>emptyList());
+ }
+
+ public void testGet_sortedSet() {
+ testGetOnAbc(ImmutableSortedSet.of("b", "c", "a"));
+ }
+
+ public void testGet_emptySortedSet() {
+ testGetOnEmpty(ImmutableSortedSet.<String>of());
+ }
+
+ public void testGet_iterable() {
+ testGetOnAbc(ImmutableSet.of("a", "b", "c"));
+ }
+
+ public void testGet_emptyIterable() {
+ testGetOnEmpty(Sets.<String>newHashSet());
+ }
+
+ public void testGetLast_list() {
+ List<String> list = newArrayList("a", "b", "c");
+ assertEquals("c", Iterables.getLast(list));
+ }
+
+ public void testGetLast_emptyList() {
+ List<String> list = Collections.emptyList();
+ try {
+ Iterables.getLast(list);
+ fail();
+ } catch (NoSuchElementException e) {}
+ }
+
+ public void testGetLast_sortedSet() {
+ SortedSet<String> sortedSet = ImmutableSortedSet.of("b", "c", "a");
+ assertEquals("c", Iterables.getLast(sortedSet));
+ }
+
+ public void testGetLast_emptySortedSet() {
+ SortedSet<String> sortedSet = ImmutableSortedSet.of();
+ try {
+ Iterables.getLast(sortedSet);
+ fail();
+ } catch (NoSuchElementException e) {}
+ }
+
+ public void testGetLast_iterable() {
+ Set<String> set = ImmutableSet.of("a", "b", "c");
+ assertEquals("c", Iterables.getLast(set));
+ }
+
+ public void testGetLast_emptyIterable() {
+ Set<String> set = Sets.newHashSet();
+ try {
+ Iterables.getLast(set);
+ fail();
+ } catch (NoSuchElementException e) {}
+ }
+
+ public void testUnmodifiableIterable() {
+ List<String> list = newArrayList("a", "b", "c");
+ Iterable<String> iterable = Iterables.unmodifiableIterable(list);
+ Iterator<String> iterator = iterable.iterator();
+ iterator.next();
+ try {
+ iterator.remove();
+ fail();
+ } catch (UnsupportedOperationException expected) {}
+ assertEquals("[a, b, c]", iterable.toString());
+ }
+
+ public void testFrequency_multiset() {
+ Multiset<String> multiset
+ = ImmutableMultiset.of("a", "b", "a", "c", "b", "a");
+ assertEquals(3, Iterables.frequency(multiset, "a"));
+ assertEquals(2, Iterables.frequency(multiset, "b"));
+ assertEquals(1, Iterables.frequency(multiset, "c"));
+ assertEquals(0, Iterables.frequency(multiset, "d"));
+ assertEquals(0, Iterables.frequency(multiset, 4.2));
+ assertEquals(0, Iterables.frequency(multiset, null));
+ }
+
+ public void testFrequency_set() {
+ Set<String> set = Sets.newHashSet("a", "b", "c");
+ assertEquals(1, Iterables.frequency(set, "a"));
+ assertEquals(1, Iterables.frequency(set, "b"));
+ assertEquals(1, Iterables.frequency(set, "c"));
+ assertEquals(0, Iterables.frequency(set, "d"));
+ assertEquals(0, Iterables.frequency(set, 4.2));
+ assertEquals(0, Iterables.frequency(set, null));
+ }
+
+ public void testFrequency_list() {
+ List<String> list = newArrayList("a", "b", "a", "c", "b", "a");
+ assertEquals(3, Iterables.frequency(list, "a"));
+ assertEquals(2, Iterables.frequency(list, "b"));
+ assertEquals(1, Iterables.frequency(list, "c"));
+ assertEquals(0, Iterables.frequency(list, "d"));
+ assertEquals(0, Iterables.frequency(list, 4.2));
+ assertEquals(0, Iterables.frequency(list, null));
+ }
+
+ public void testRemoveAll_collection() {
+ List<String> list = newArrayList("a", "b", "c", "d", "e");
+ assertTrue(Iterables.removeAll(list, newArrayList("b", "d", "f")));
+ assertEquals(newArrayList("a", "c", "e"), list);
+ assertFalse(Iterables.removeAll(list, newArrayList("x", "y", "z")));
+ assertEquals(newArrayList("a", "c", "e"), list);
+ }
+
+ public void testRemoveAll_iterable() {
+ final List<String> list = newArrayList("a", "b", "c", "d", "e");
+ Iterable<String> iterable = new Iterable<String>() {
+ public Iterator<String> iterator() {
+ return list.iterator();
+ }
+ };
+ assertTrue(Iterables.removeAll(iterable, newArrayList("b", "d", "f")));
+ assertEquals(newArrayList("a", "c", "e"), list);
+ assertFalse(Iterables.removeAll(iterable, newArrayList("x", "y", "z")));
+ assertEquals(newArrayList("a", "c", "e"), list);
+ }
+
+ public void testRetainAll_collection() {
+ List<String> list = newArrayList("a", "b", "c", "d", "e");
+ assertTrue(Iterables.retainAll(list, newArrayList("b", "d", "f")));
+ assertEquals(newArrayList("b", "d"), list);
+ assertFalse(Iterables.retainAll(list, newArrayList("b", "e", "d")));
+ assertEquals(newArrayList("b", "d"), list);
+ }
+
+ public void testRetainAll_iterable() {
+ final List<String> list = newArrayList("a", "b", "c", "d", "e");
+ Iterable<String> iterable = new Iterable<String>() {
+ public Iterator<String> iterator() {
+ return list.iterator();
+ }
+ };
+ assertTrue(Iterables.retainAll(iterable, newArrayList("b", "d", "f")));
+ assertEquals(newArrayList("b", "d"), list);
+ assertFalse(Iterables.retainAll(iterable, newArrayList("b", "e", "d")));
+ assertEquals(newArrayList("b", "d"), list);
+ }
+
+ public void testRemoveIf_randomAccess() {
+ List<String> list = newArrayList("a", "b", "c", "d", "e");
+ assertTrue(Iterables.removeIf(list,
+ new Predicate<String>() {
+ public boolean apply(String s) {
+ return s.equals("b") || s.equals("d") || s.equals("f");
+ }
+ }));
+ assertEquals(newArrayList("a", "c", "e"), list);
+ assertFalse(Iterables.removeIf(list,
+ new Predicate<String>() {
+ public boolean apply(String s) {
+ return s.equals("x") || s.equals("y") || s.equals("z");
+ }
+ }));
+ assertEquals(newArrayList("a", "c", "e"), list);
+ }
+
+ public void testRemoveIf_noRandomAccess() {
+ List<String> list = Lists.newLinkedList(asList("a", "b", "c", "d", "e"));
+ assertTrue(Iterables.removeIf(list,
+ new Predicate<String>() {
+ public boolean apply(String s) {
+ return s.equals("b") || s.equals("d") || s.equals("f");
+ }
+ }));
+ assertEquals(newArrayList("a", "c", "e"), list);
+ assertFalse(Iterables.removeIf(list,
+ new Predicate<String>() {
+ public boolean apply(String s) {
+ return s.equals("x") || s.equals("y") || s.equals("z");
+ }
+ }));
+ assertEquals(newArrayList("a", "c", "e"), list);
+ }
+
+ // The Maps returned by Maps.filterEntries(), Maps.filterKeys(), and
+ // Maps.filterValues() are not tested with removeIf() since Maps are not
+ // Iterable. Those returned by Iterators.filter() and Iterables.filter()
+ // are not tested because they are unmodifiable.
+
+ public void testIterableWithToString() {
+ assertEquals("[]", create().toString());
+ assertEquals("[a]", create("a").toString());
+ assertEquals("[a, b, c]", create("a", "b", "c").toString());
+ assertEquals("[c, a, a]", create("c", "a", "a").toString());
+ }
+
+ public void testIterableWithToStringNull() {
+ assertEquals("[null]", create((String) null).toString());
+ assertEquals("[null, null]", create(null, null).toString());
+ assertEquals("[, null, a]", create("", null, "a").toString());
+ }
+
+ /** Returns a new iterable over the specified strings. */
+ private static Iterable<String> create(String... strings) {
+ final List<String> list = asList(strings);
+ return new Iterables.IterableWithToString<String>() {
+ public Iterator<String> iterator() {
+ return list.iterator();
+ }
+ };
+ }
+}
diff --git a/test/com/google/common/collect/IteratorsTest.java b/test/com/google/common/collect/IteratorsTest.java
new file mode 100644
index 0000000..981d5da
--- /dev/null
+++ b/test/com/google/common/collect/IteratorsTest.java
@@ -0,0 +1,1181 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import static com.google.common.collect.Iterators.get;
+import static com.google.common.collect.Iterators.getLast;
+import static com.google.common.collect.Lists.newArrayList;
+import com.google.common.collect.testing.IteratorFeature;
+import static com.google.common.collect.testing.IteratorFeature.MODIFIABLE;
+import static com.google.common.collect.testing.IteratorFeature.UNMODIFIABLE;
+import com.google.common.collect.testing.IteratorTester;
+import com.google.common.collect.testing.ListTestSuiteBuilder;
+import com.google.common.collect.testing.TestStringListGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.ListFeature;
+import static com.google.common.testing.junit3.JUnitAsserts.assertContentsInOrder;
+import com.google.common.testutils.NullPointerTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.Arrays;
+import static java.util.Arrays.asList;
+import java.util.Collection;
+import java.util.Collections;
+import static java.util.Collections.singleton;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.RandomAccess;
+import java.util.Set;
+import java.util.Vector;
+
+/**
+ * Unit test for {@code Iterators}.
+ *
+ * @author Kevin Bourrillion
+ */
+public class IteratorsTest extends TestCase {
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite(IteratorsTest.class.getSimpleName());
+ suite.addTest(testsForRemoveAllAndRetainAll());
+ suite.addTestSuite(IteratorsTest.class);
+ return suite;
+ }
+
+ public void testEmptyIterator() {
+ Iterator<String> iterator = Iterators.emptyIterator();
+ assertFalse(iterator.hasNext());
+ try {
+ iterator.next();
+ fail("no exception thrown");
+ } catch (NoSuchElementException expected) {
+ }
+ try {
+ iterator.remove();
+ fail("no exception thrown");
+ } catch (UnsupportedOperationException expected) {
+ }
+ }
+
+ public void testSize0() {
+ Iterator<String> iterator = Iterators.emptyIterator();
+ assertEquals(0, Iterators.size(iterator));
+ }
+
+ public void testSize1() {
+ Iterator<Integer> iterator = Collections.singleton(0).iterator();
+ assertEquals(1, Iterators.size(iterator));
+ }
+
+ public void testSize_partiallyConsumed() {
+ Iterator<Integer> iterator = asList(1, 2, 3, 4, 5).iterator();
+ iterator.next();
+ iterator.next();
+ assertEquals(3, Iterators.size(iterator));
+ }
+
+ public void test_contains_nonnull_yes() {
+ Iterator<String> set = asList("a", null, "b").iterator();
+ assertTrue(Iterators.contains(set, "b"));
+ }
+
+ public void test_contains_nonnull_no() {
+ Iterator<String> set = asList("a", "b").iterator();
+ assertFalse(Iterators.contains(set, "c"));
+ }
+
+ public void test_contains_null_yes() {
+ Iterator<String> set = asList("a", null, "b").iterator();
+ assertTrue(Iterators.contains(set, null));
+ }
+
+ public void test_contains_null_no() {
+ Iterator<String> set = asList("a", "b").iterator();
+ assertFalse(Iterators.contains(set, null));
+ }
+
+ public void testGetOnlyElement_noDefault_valid() {
+ Iterator<String> iterator = Collections.singletonList("foo").iterator();
+ assertEquals("foo", Iterators.getOnlyElement(iterator));
+ }
+
+ public void testGetOnlyElement_noDefault_empty() {
+ Iterator<String> iterator = Iterators.emptyIterator();
+ try {
+ Iterators.getOnlyElement(iterator);
+ fail();
+ } catch (NoSuchElementException expected) {
+ }
+ }
+
+ public void testGetOnlyElement_noDefault_moreThanOneLessThanFiveElements() {
+ Iterator<String> iterator = asList("one", "two").iterator();
+ try {
+ Iterators.getOnlyElement(iterator);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ assertEquals("expected one element but was: <one, two>",
+ expected.getMessage());
+ }
+ }
+
+ public void testGetOnlyElement_noDefault_fiveElements() {
+ Iterator<String> iterator =
+ asList("one", "two", "three", "four", "five").iterator();
+ try {
+ Iterators.getOnlyElement(iterator);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ assertEquals("expected one element but was: "
+ + "<one, two, three, four, five>",
+ expected.getMessage());
+ }
+ }
+
+ public void testGetOnlyElement_noDefault_moreThanFiveElements() {
+ Iterator<String> iterator =
+ asList("one", "two", "three", "four", "five", "six").iterator();
+ try {
+ Iterators.getOnlyElement(iterator);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ assertEquals("expected one element but was: "
+ + "<one, two, three, four, five, ...>",
+ expected.getMessage());
+ }
+ }
+
+ public void testGetOnlyElement_withDefault_singleton() {
+ Iterator<String> iterator = Collections.singletonList("foo").iterator();
+ assertEquals("foo", Iterators.getOnlyElement(iterator, "bar"));
+ }
+
+ public void testGetOnlyElement_withDefault_empty() {
+ Iterator<String> iterator = Iterators.emptyIterator();
+ assertEquals("bar", Iterators.getOnlyElement(iterator, "bar"));
+ }
+
+ public void testGetOnlyElement_withDefault_empty_null() {
+ Iterator<String> iterator = Iterators.emptyIterator();
+ assertNull(Iterators.getOnlyElement(iterator, null));
+ }
+
+ public void testGetOnlyElement_withDefault_two() {
+ Iterator<String> iterator = asList("foo", "bar").iterator();
+ try {
+ Iterators.getOnlyElement(iterator, "x");
+ fail();
+ } catch (IllegalArgumentException expected) {
+ assertEquals("expected one element but was: <foo, bar>",
+ expected.getMessage());
+ }
+ }
+
+ public void testToArrayEmpty() {
+ Iterator<String> iterator = Collections.<String>emptyList().iterator();
+ String[] array = Iterators.toArray(iterator, String.class);
+ assertTrue(Arrays.equals(new String[0], array));
+ }
+
+ public void testToArraySingleton() {
+ Iterator<String> iterator = Collections.singletonList("a").iterator();
+ String[] array = Iterators.toArray(iterator, String.class);
+ assertTrue(Arrays.equals(new String[] { "a" }, array));
+ }
+
+ public void testToArray() {
+ String[] sourceArray = new String[] {"a", "b", "c"};
+ Iterator<String> iterator = asList(sourceArray).iterator();
+ String[] newArray = Iterators.toArray(iterator, String.class);
+ assertTrue(Arrays.equals(sourceArray, newArray));
+ }
+
+ public void testFilterSimple() {
+ Iterator<String> unfiltered = Lists.newArrayList("foo", "bar").iterator();
+ Iterator<String> filtered = Iterators.filter(unfiltered,
+ Predicates.equalTo("foo"));
+ List<String> expected = Collections.singletonList("foo");
+ List<String> actual = Lists.newArrayList(filtered);
+ assertEquals(expected, actual);
+ }
+
+ public void testFilterNoMatch() {
+ Iterator<String> unfiltered = Lists.newArrayList("foo", "bar").iterator();
+ Iterator<String> filtered = Iterators.filter(unfiltered,
+ Predicates.alwaysFalse());
+ List<String> expected = Collections.emptyList();
+ List<String> actual = Lists.newArrayList(filtered);
+ assertEquals(expected, actual);
+ }
+
+ public void testFilterMatchAll() {
+ Iterator<String> unfiltered = Lists.newArrayList("foo", "bar").iterator();
+ Iterator<String> filtered = Iterators.filter(unfiltered,
+ Predicates.alwaysTrue());
+ List<String> expected = Lists.newArrayList("foo", "bar");
+ List<String> actual = Lists.newArrayList(filtered);
+ assertEquals(expected, actual);
+ }
+
+ public void testFilterNothing() {
+ Iterator<String> unfiltered = Collections.<String>emptyList().iterator();
+ Iterator<String> filtered = Iterators.filter(unfiltered,
+ new Predicate<String>() {
+ public boolean apply(String s) {
+ fail("Should never be evaluated");
+ return false;
+ }
+ });
+
+ List<String> expected = Collections.emptyList();
+ List<String> actual = Lists.newArrayList(filtered);
+ assertEquals(expected, actual);
+ }
+
+ public void testFilterUsingIteratorTester() throws Exception {
+ final List<Integer> list = asList(1, 2, 3, 4, 5);
+ final Predicate<Integer> isEven = new Predicate<Integer>() {
+ public boolean apply(Integer integer) {
+ return integer % 2 == 0;
+ }
+ };
+ new IteratorTester<Integer>(5, UNMODIFIABLE, asList(2, 4),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<Integer> newTargetIterator() {
+ return Iterators.filter(list.iterator(), isEven);
+ }
+ }.test();
+ }
+
+ public void testAny() {
+ List<String> list = Lists.newArrayList();
+ Predicate<String> predicate = Predicates.equalTo("pants");
+
+ assertFalse(Iterators.any(list.iterator(), predicate));
+ list.add("cool");
+ assertFalse(Iterators.any(list.iterator(), predicate));
+ list.add("pants");
+ assertTrue(Iterators.any(list.iterator(), predicate));
+ }
+
+ public void testAll() {
+ List<String> list = Lists.newArrayList();
+ Predicate<String> predicate = Predicates.equalTo("cool");
+
+ assertTrue(Iterators.all(list.iterator(), predicate));
+ list.add("cool");
+ assertTrue(Iterators.all(list.iterator(), predicate));
+ list.add("pants");
+ assertFalse(Iterators.all(list.iterator(), predicate));
+ }
+
+ public void testFind() {
+ Iterable<String> list = Lists.newArrayList("cool", "pants");
+ assertEquals("cool",
+ Iterators.find(list.iterator(), Predicates.equalTo("cool")));
+ assertEquals("pants",
+ Iterators.find(list.iterator(), Predicates.equalTo("pants")));
+ try {
+ Iterators.find(list.iterator(), Predicates.alwaysFalse());
+ fail();
+ } catch (NoSuchElementException e) {
+ }
+ assertEquals("cool",
+ Iterators.find(list.iterator(), Predicates.alwaysTrue()));
+ }
+
+ public void testTransform() {
+ Iterator<String> input = asList("1", "2", "3").iterator();
+ Iterator<Integer> result = Iterators.transform(input,
+ new Function<String, Integer>() {
+ public Integer apply(String from) {
+ return Integer.valueOf(from);
+ }
+ });
+
+ List<Integer> actual = Lists.newArrayList(result);
+ List<Integer> expected = asList(1, 2, 3);
+ assertEquals(expected, actual);
+ }
+
+ public void testTransformRemove() {
+ List<String> list = Lists.newArrayList("1", "2", "3");
+ Iterator<String> input = list.iterator();
+ Iterator<Integer> iterator = Iterators.transform(input,
+ new Function<String, Integer>() {
+ public Integer apply(String from) {
+ return Integer.valueOf(from);
+ }
+ });
+
+ assertEquals(Integer.valueOf(1), iterator.next());
+ assertEquals(Integer.valueOf(2), iterator.next());
+ iterator.remove();
+ assertEquals(asList("1", "3"), list);
+ }
+
+ public void testPoorlyBehavedTransform() {
+ Iterator<String> input = asList("1", null, "3").iterator();
+ Iterator<Integer> result = Iterators.transform(input,
+ new Function<String, Integer>() {
+ public Integer apply(String from) {
+ return Integer.valueOf(from);
+ }
+ });
+
+ result.next();
+ try {
+ result.next();
+ fail("Expected NFE");
+ } catch (NumberFormatException nfe) {
+ // Expected to fail.
+ }
+ }
+
+ public void testNullFriendlyTransform() {
+ Iterator<Integer> input = asList(1, 2, null, 3).iterator();
+ Iterator<String> result = Iterators.transform(input,
+ new Function<Integer, String>() {
+ public String apply(Integer from) {
+ return String.valueOf(from);
+ }
+ });
+
+ List<String> actual = Lists.newArrayList(result);
+ List<String> expected = asList("1", "2", "null", "3");
+ assertEquals(expected, actual);
+ }
+
+ public void testCycleOfEmpty() {
+ // "<String>" for javac 1.5.
+ Iterator<String> cycle = Iterators.<String>cycle();
+ assertFalse(cycle.hasNext());
+ }
+
+ public void testCycleOfOne() {
+ Iterator<String> cycle = Iterators.cycle("a");
+ for (int i = 0; i < 3; i++) {
+ assertTrue(cycle.hasNext());
+ assertEquals("a", cycle.next());
+ }
+ }
+
+ public void testCycleOfOneWithRemove() {
+ Iterable<String> iterable = Lists.newArrayList("a");
+ Iterator<String> cycle = Iterators.cycle(iterable);
+ assertTrue(cycle.hasNext());
+ assertEquals("a", cycle.next());
+ cycle.remove();
+ assertEquals(Collections.emptyList(), iterable);
+ assertFalse(cycle.hasNext());
+ }
+
+ public void testCycleOfTwo() {
+ Iterator<String> cycle = Iterators.cycle("a", "b");
+ for (int i = 0; i < 3; i++) {
+ assertTrue(cycle.hasNext());
+ assertEquals("a", cycle.next());
+ assertTrue(cycle.hasNext());
+ assertEquals("b", cycle.next());
+ }
+ }
+
+ public void testCycleOfTwoWithRemove() {
+ Iterable<String> iterable = Lists.newArrayList("a", "b");
+ Iterator<String> cycle = Iterators.cycle(iterable);
+ assertTrue(cycle.hasNext());
+ assertEquals("a", cycle.next());
+ assertTrue(cycle.hasNext());
+ assertEquals("b", cycle.next());
+ assertTrue(cycle.hasNext());
+ assertEquals("a", cycle.next());
+ cycle.remove();
+ assertEquals(Collections.singletonList("b"), iterable);
+ assertTrue(cycle.hasNext());
+ assertEquals("b", cycle.next());
+ assertTrue(cycle.hasNext());
+ assertEquals("b", cycle.next());
+ cycle.remove();
+ assertEquals(Collections.emptyList(), iterable);
+ assertFalse(cycle.hasNext());
+ }
+
+ public void testCycleRemoveWithoutNext() {
+ Iterator<String> cycle = Iterators.cycle("a", "b");
+ assertTrue(cycle.hasNext());
+ try {
+ cycle.remove();
+ fail("no exception thrown");
+ } catch (IllegalStateException expected) {
+ }
+ }
+
+ public void testCycleRemoveSameElementTwice() {
+ Iterator<String> cycle = Iterators.cycle("a", "b");
+ cycle.next();
+ cycle.remove();
+ try {
+ cycle.remove();
+ fail("no exception thrown");
+ } catch (IllegalStateException expected) {
+ }
+ }
+
+ public void testCycleWhenRemoveIsNotSupported() {
+ Iterable<String> iterable = asList("a", "b");
+ Iterator<String> cycle = Iterators.cycle(iterable);
+ cycle.next();
+ try {
+ cycle.remove();
+ fail("no exception thrown");
+ } catch (UnsupportedOperationException expected) {
+ }
+ }
+
+ public void testCycleRemoveAfterHasNext() {
+ Iterable<String> iterable = Lists.newArrayList("a");
+ Iterator<String> cycle = Iterators.cycle(iterable);
+ assertTrue(cycle.hasNext());
+ assertEquals("a", cycle.next());
+ assertTrue(cycle.hasNext());
+ cycle.remove();
+ assertEquals(Collections.emptyList(), iterable);
+ assertFalse(cycle.hasNext());
+ }
+
+ public void testCycleNoSuchElementException() {
+ Iterable<String> iterable = Lists.newArrayList("a");
+ Iterator<String> cycle = Iterators.cycle(iterable);
+ assertTrue(cycle.hasNext());
+ assertEquals("a", cycle.next());
+ cycle.remove();
+ assertFalse(cycle.hasNext());
+ try {
+ cycle.next();
+ fail();
+ } catch (NoSuchElementException expected) {}
+ }
+
+ public void testCycleUsingIteratorTester() throws Exception {
+ new IteratorTester<Integer>(5, UNMODIFIABLE, asList(1, 2, 1, 2, 1,
+ 2, 1, 2, 1, 2, 1, 2), IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<Integer> newTargetIterator() {
+ return Iterators.cycle(asList(1, 2));
+ }
+ }.test();
+ }
+
+ public void testConcatNoIteratorsYieldsEmpty() throws Exception {
+ new EmptyIteratorTester() {
+ @SuppressWarnings("unchecked")
+ @Override protected Iterator<Integer> newTargetIterator() {
+ return Iterators.concat();
+ }
+ }.test();
+ }
+
+ public void testConcatOneEmptyIteratorYieldsEmpty() throws Exception {
+ new EmptyIteratorTester() {
+ @SuppressWarnings("unchecked")
+ @Override protected Iterator<Integer> newTargetIterator() {
+ return Iterators.concat(iterateOver());
+ }
+ }.test();
+ }
+
+ public void testConcatMultipleEmptyIteratorsYieldsEmpty() throws Exception {
+ new EmptyIteratorTester() {
+ @Override protected Iterator<Integer> newTargetIterator() {
+ return Iterators.concat(iterateOver(), iterateOver());
+ }
+ }.test();
+ }
+
+ public void testConcatSingletonYieldsSingleton() throws Exception {
+ new SingletonIteratorTester() {
+ @SuppressWarnings("unchecked")
+ @Override protected Iterator<Integer> newTargetIterator() {
+ return Iterators.concat(iterateOver(1));
+ }
+ }.test();
+ }
+
+ public void testConcatEmptyAndSingletonAndEmptyYieldsSingleton()
+ throws Exception {
+ new SingletonIteratorTester() {
+ @Override protected Iterator<Integer> newTargetIterator() {
+ return Iterators.concat(iterateOver(), iterateOver(1), iterateOver());
+ }
+ }.test();
+ }
+
+ public void testConcatSingletonAndSingletonYieldsDoubleton()
+ throws Exception {
+ new DoubletonIteratorTester() {
+ @Override protected Iterator<Integer> newTargetIterator() {
+ return Iterators.concat(iterateOver(1), iterateOver(2));
+ }
+ }.test();
+ }
+
+ public void testConcatSingletonAndSingletonWithEmptiesYieldsDoubleton()
+ throws Exception {
+ new DoubletonIteratorTester() {
+ @Override protected Iterator<Integer> newTargetIterator() {
+ return Iterators.concat(
+ iterateOver(1), iterateOver(), iterateOver(), iterateOver(2));
+ }
+ }.test();
+ }
+
+ public void testConcatUnmodifiable() throws Exception {
+ new IteratorTester<Integer>(5, UNMODIFIABLE, asList(1, 2),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<Integer> newTargetIterator() {
+ return Iterators.concat(asList(1).iterator(),
+ Arrays.<Integer>asList().iterator(), asList(2).iterator());
+ }
+ }.test();
+ }
+
+ /**
+ * Illustrates the somewhat bizarre behavior when a null is passed in.
+ */
+ public void testConcatContainingNull() {
+ @SuppressWarnings("unchecked")
+ Iterator<Iterator<Integer>> input
+ = asList(iterateOver(1, 2), null, iterateOver(3)).iterator();
+ Iterator<Integer> result = Iterators.concat(input);
+ assertEquals(1, (int) result.next());
+ assertEquals(2, (int) result.next());
+ try {
+ result.hasNext();
+ fail("no exception thrown");
+ } catch (NullPointerException e) {
+ }
+ try {
+ result.next();
+ fail("no exception thrown");
+ } catch (NullPointerException e) {
+ }
+ // There is no way to get "through" to the 3. Buh-bye
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testConcatVarArgsContainingNull() {
+ try {
+ Iterators.concat(iterateOver(1, 2), null, iterateOver(3), iterateOver(4),
+ iterateOver(5));
+ fail("no exception thrown");
+ } catch (NullPointerException e) {
+ }
+ }
+
+ public void testAddAllWithEmptyIterator() {
+ List<String> alreadyThere = Lists.newArrayList("already", "there");
+
+ boolean changed = Iterators.addAll(alreadyThere,
+ Iterators.<String>emptyIterator());
+ assertContentsInOrder(alreadyThere, "already", "there");
+ assertFalse(changed);
+ }
+
+ public void testAddAllToList() {
+ List<String> alreadyThere = Lists.newArrayList("already", "there");
+ List<String> freshlyAdded = Lists.newArrayList("freshly", "added");
+
+ boolean changed = Iterators.addAll(alreadyThere, freshlyAdded.iterator());
+
+ assertContentsInOrder(alreadyThere, "already", "there", "freshly", "added");
+ assertTrue(changed);
+ }
+
+ public void testAddAllToSet() {
+ Set<String> alreadyThere
+ = Sets.newLinkedHashSet(asList("already", "there"));
+ List<String> oneMore = Lists.newArrayList("there");
+
+ boolean changed = Iterators.addAll(alreadyThere, oneMore.iterator());
+ assertContentsInOrder(alreadyThere, "already", "there");
+ assertFalse(changed);
+ }
+
+ public void testNullPointerExceptions() throws Exception {
+ NullPointerTester tester = new NullPointerTester();
+ tester.testAllPublicStaticMethods(Iterators.class);
+ }
+
+ private static abstract class EmptyIteratorTester
+ extends IteratorTester<Integer> {
+ protected EmptyIteratorTester() {
+ super(3, MODIFIABLE, Collections.<Integer>emptySet(),
+ IteratorTester.KnownOrder.KNOWN_ORDER);
+ }
+ }
+
+ private static abstract class SingletonIteratorTester
+ extends IteratorTester<Integer> {
+ protected SingletonIteratorTester() {
+ super(3, MODIFIABLE, singleton(1), IteratorTester.KnownOrder.KNOWN_ORDER);
+ }
+ }
+
+ private static abstract class DoubletonIteratorTester
+ extends IteratorTester<Integer> {
+ protected DoubletonIteratorTester() {
+ super(5, MODIFIABLE, newArrayList(1, 2),
+ IteratorTester.KnownOrder.KNOWN_ORDER);
+ }
+ }
+
+ private static Iterator<Integer> iterateOver(final Integer... values) {
+ return newArrayList(values).iterator();
+ }
+
+ public void testElementsEqual() {
+ Iterable<?> a;
+ Iterable<?> b;
+
+ // Base case.
+ a = Lists.newArrayList();
+ b = Collections.emptySet();
+ assertTrue(Iterators.elementsEqual(a.iterator(), b.iterator()));
+
+ // A few elements.
+ a = asList(4, 8, 15, 16, 23, 42);
+ b = asList(4, 8, 15, 16, 23, 42);
+ assertTrue(Iterators.elementsEqual(a.iterator(), b.iterator()));
+
+ // The same, but with nulls.
+ a = asList(4, 8, null, 16, 23, 42);
+ b = asList(4, 8, null, 16, 23, 42);
+ assertTrue(Iterators.elementsEqual(a.iterator(), b.iterator()));
+
+ // Different Iterable types (still equal elements, though).
+ a = ImmutableList.of(4, 8, 15, 16, 23, 42);
+ b = asList(4, 8, 15, 16, 23, 42);
+ assertTrue(Iterators.elementsEqual(a.iterator(), b.iterator()));
+
+ // An element differs.
+ a = asList(4, 8, 15, 12, 23, 42);
+ b = asList(4, 8, 15, 16, 23, 42);
+ assertFalse(Iterators.elementsEqual(a.iterator(), b.iterator()));
+
+ // null versus non-null.
+ a = asList(4, 8, 15, null, 23, 42);
+ b = asList(4, 8, 15, 16, 23, 42);
+ assertFalse(Iterators.elementsEqual(a.iterator(), b.iterator()));
+ assertFalse(Iterators.elementsEqual(b.iterator(), a.iterator()));
+
+ // Different lengths.
+ a = asList(4, 8, 15, 16, 23);
+ b = asList(4, 8, 15, 16, 23, 42);
+ assertFalse(Iterators.elementsEqual(a.iterator(), b.iterator()));
+ assertFalse(Iterators.elementsEqual(b.iterator(), a.iterator()));
+
+ // Different lengths, one is empty.
+ a = Collections.emptySet();
+ b = asList(4, 8, 15, 16, 23, 42);
+ assertFalse(Iterators.elementsEqual(a.iterator(), b.iterator()));
+ assertFalse(Iterators.elementsEqual(b.iterator(), a.iterator()));
+ }
+
+ public void testPartition_badSize() {
+ Iterator<Integer> source = Iterators.singletonIterator(1);
+ try {
+ Iterators.partition(source, 0);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ public void testPartition_empty() {
+ Iterator<Integer> source = Iterators.emptyIterator();
+ Iterator<List<Integer>> partitions = Iterators.partition(source, 1);
+ assertFalse(partitions.hasNext());
+ }
+
+ public void testPartition_singleton1() {
+ Iterator<Integer> source = Iterators.singletonIterator(1);
+ Iterator<List<Integer>> partitions = Iterators.partition(source, 1);
+ assertTrue(partitions.hasNext());
+ assertTrue(partitions.hasNext());
+ assertEquals(ImmutableList.of(1), partitions.next());
+ assertFalse(partitions.hasNext());
+ }
+
+ public void testPartition_singleton2() {
+ Iterator<Integer> source = Iterators.singletonIterator(1);
+ Iterator<List<Integer>> partitions = Iterators.partition(source, 2);
+ assertTrue(partitions.hasNext());
+ assertTrue(partitions.hasNext());
+ assertEquals(ImmutableList.of(1), partitions.next());
+ assertFalse(partitions.hasNext());
+ }
+
+ public void testPartition_general() throws Exception {
+ new IteratorTester<List<Integer>>(5,
+ IteratorFeature.UNMODIFIABLE,
+ ImmutableList.of(
+ asList(1, 2, 3),
+ asList(4, 5, 6),
+ asList(7)),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<List<Integer>> newTargetIterator() {
+ Iterator<Integer> source = Iterators.forArray(1, 2, 3, 4, 5, 6, 7);
+ return Iterators.partition(source, 3);
+ }
+ }.test();
+ }
+
+ public void testPartition_view() {
+ List<Integer> list = asList(1, 2);
+ Iterator<List<Integer>> partitions
+ = Iterators.partition(list.iterator(), 1);
+
+ // Changes before the partition is retrieved are reflected
+ list.set(0, 3);
+ List<Integer> first = partitions.next();
+
+ // Changes after are not
+ list.set(0, 4);
+
+ assertEquals(ImmutableList.of(3), first);
+ }
+
+ public void testPartitionRandomAccess() {
+ Iterator<Integer> source = asList(1, 2, 3).iterator();
+ Iterator<List<Integer>> partitions = Iterators.partition(source, 2);
+ assertTrue(partitions.next() instanceof RandomAccess);
+ assertTrue(partitions.next() instanceof RandomAccess);
+ }
+
+ public void testPaddedPartition_badSize() {
+ Iterator<Integer> source = Iterators.singletonIterator(1);
+ try {
+ Iterators.paddedPartition(source, 0);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ public void testPaddedPartition_empty() {
+ Iterator<Integer> source = Iterators.emptyIterator();
+ Iterator<List<Integer>> partitions = Iterators.paddedPartition(source, 1);
+ assertFalse(partitions.hasNext());
+ }
+
+ public void testPaddedPartition_singleton1() {
+ Iterator<Integer> source = Iterators.singletonIterator(1);
+ Iterator<List<Integer>> partitions = Iterators.paddedPartition(source, 1);
+ assertTrue(partitions.hasNext());
+ assertTrue(partitions.hasNext());
+ assertEquals(ImmutableList.of(1), partitions.next());
+ assertFalse(partitions.hasNext());
+ }
+
+ public void testPaddedPartition_singleton2() {
+ Iterator<Integer> source = Iterators.singletonIterator(1);
+ Iterator<List<Integer>> partitions = Iterators.paddedPartition(source, 2);
+ assertTrue(partitions.hasNext());
+ assertTrue(partitions.hasNext());
+ assertEquals(asList(1, null), partitions.next());
+ assertFalse(partitions.hasNext());
+ }
+
+ public void testPaddedPartition_general() throws Exception {
+ new IteratorTester<List<Integer>>(5,
+ IteratorFeature.UNMODIFIABLE,
+ ImmutableList.of(
+ asList(1, 2, 3),
+ asList(4, 5, 6),
+ asList(7, null, null)),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<List<Integer>> newTargetIterator() {
+ Iterator<Integer> source = Iterators.forArray(1, 2, 3, 4, 5, 6, 7);
+ return Iterators.paddedPartition(source, 3);
+ }
+ }.test();
+ }
+
+ public void testPaddedPartition_view() {
+ List<Integer> list = asList(1, 2);
+ Iterator<List<Integer>> partitions
+ = Iterators.paddedPartition(list.iterator(), 1);
+
+ // Changes before the PaddedPartition is retrieved are reflected
+ list.set(0, 3);
+ List<Integer> first = partitions.next();
+
+ // Changes after are not
+ list.set(0, 4);
+
+ assertEquals(ImmutableList.of(3), first);
+ }
+
+ public void testPaddedPartitionRandomAccess() {
+ Iterator<Integer> source = asList(1, 2, 3).iterator();
+ Iterator<List<Integer>> partitions = Iterators.paddedPartition(source, 2);
+ assertTrue(partitions.next() instanceof RandomAccess);
+ assertTrue(partitions.next() instanceof RandomAccess);
+ }
+
+ public void testForArrayEmpty() {
+ String[] array = new String[0];
+ Iterator<String> iterator = Iterators.forArray(array);
+ assertFalse(iterator.hasNext());
+ try {
+ iterator.next();
+ fail();
+ } catch (NoSuchElementException expected) {}
+ }
+
+ public void testForArrayTypical() {
+ String[] array = {"foo", "bar"};
+ Iterator<String> iterator = Iterators.forArray(array);
+ assertTrue(iterator.hasNext());
+ assertEquals("foo", iterator.next());
+ assertTrue(iterator.hasNext());
+ try {
+ iterator.remove();
+ fail();
+ } catch (UnsupportedOperationException expected) {}
+ assertEquals("bar", iterator.next());
+ assertFalse(iterator.hasNext());
+ try {
+ iterator.next();
+ fail();
+ } catch (NoSuchElementException expected) {}
+ }
+
+ public void testForArrayOffset() {
+ String[] array = {"foo", "bar", "cat", "dog"};
+ Iterator<String> iterator = Iterators.forArray(array, 1, 2);
+ assertTrue(iterator.hasNext());
+ assertEquals("bar", iterator.next());
+ assertTrue(iterator.hasNext());
+ assertEquals("cat", iterator.next());
+ assertFalse(iterator.hasNext());
+ try {
+ Iterators.forArray(array, 2, 3);
+ fail();
+ } catch (IndexOutOfBoundsException expected) {}
+ }
+
+ public void testForArrayLength0() {
+ String[] array = {"foo", "bar"};
+ assertFalse(Iterators.forArray(array, 0, 0).hasNext());
+ assertFalse(Iterators.forArray(array, 1, 0).hasNext());
+ assertFalse(Iterators.forArray(array, 2, 0).hasNext());
+ try {
+ Iterators.forArray(array, -1, 0);
+ fail();
+ } catch (IndexOutOfBoundsException expected) {}
+ try {
+ Iterators.forArray(array, 3, 0);
+ fail();
+ } catch (IndexOutOfBoundsException expected) {}
+ }
+
+ public void testForArrayUsingTester() throws Exception {
+ new IteratorTester<Integer>(6, UNMODIFIABLE, asList(1, 2, 3),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<Integer> newTargetIterator() {
+ return Iterators.forArray(1, 2, 3);
+ }
+ }.test();
+ }
+
+ public void testForArrayWithOffsetUsingTester() throws Exception {
+ new IteratorTester<Integer>(6, UNMODIFIABLE, asList(1, 2, 3),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<Integer> newTargetIterator() {
+ return Iterators.forArray(new Integer[] { 0, 1, 2, 3, 4 }, 1, 3);
+ }
+ }.test();
+ }
+
+ public void testForEnumerationEmpty() {
+ Enumeration<Integer> enumer = enumerate();
+ Iterator<Integer> iter = Iterators.forEnumeration(enumer);
+
+ assertFalse(iter.hasNext());
+ try {
+ iter.next();
+ fail();
+ } catch (NoSuchElementException expected) {
+ }
+ }
+
+ public void testForEnumerationSingleton() {
+ Enumeration<Integer> enumer = enumerate(1);
+ Iterator<Integer> iter = Iterators.forEnumeration(enumer);
+
+ assertTrue(iter.hasNext());
+ assertTrue(iter.hasNext());
+ assertEquals(1, (int) iter.next());
+ try {
+ iter.remove();
+ fail();
+ } catch (UnsupportedOperationException expected) {
+ }
+ assertFalse(iter.hasNext());
+ try {
+ iter.next();
+ fail();
+ } catch (NoSuchElementException expected) {
+ }
+ }
+
+ public void testForEnumerationTypical() {
+ Enumeration<Integer> enumer = enumerate(1, 2, 3);
+ Iterator<Integer> iter = Iterators.forEnumeration(enumer);
+
+ assertTrue(iter.hasNext());
+ assertEquals(1, (int) iter.next());
+ assertTrue(iter.hasNext());
+ assertEquals(2, (int) iter.next());
+ assertTrue(iter.hasNext());
+ assertEquals(3, (int) iter.next());
+ assertFalse(iter.hasNext());
+ }
+
+ public void testAsEnumerationEmpty() {
+ Iterator<Integer> iter = Iterators.emptyIterator();
+ Enumeration<Integer> enumer = Iterators.asEnumeration(iter);
+
+ assertFalse(enumer.hasMoreElements());
+ try {
+ enumer.nextElement();
+ fail();
+ } catch (NoSuchElementException expected) {
+ }
+ }
+
+ public void testAsEnumerationSingleton() {
+ Iterator<Integer> iter = ImmutableList.of(1).iterator();
+ Enumeration<Integer> enumer = Iterators.asEnumeration(iter);
+
+ assertTrue(enumer.hasMoreElements());
+ assertTrue(enumer.hasMoreElements());
+ assertEquals(1, (int) enumer.nextElement());
+ assertFalse(enumer.hasMoreElements());
+ try {
+ enumer.nextElement();
+ fail();
+ } catch (NoSuchElementException expected) {
+ }
+ }
+
+ public void testAsEnumerationTypical() {
+ Iterator<Integer> iter = ImmutableList.of(1, 2, 3).iterator();
+ Enumeration<Integer> enumer = Iterators.asEnumeration(iter);
+
+ assertTrue(enumer.hasMoreElements());
+ assertEquals(1, (int) enumer.nextElement());
+ assertTrue(enumer.hasMoreElements());
+ assertEquals(2, (int) enumer.nextElement());
+ assertTrue(enumer.hasMoreElements());
+ assertEquals(3, (int) enumer.nextElement());
+ assertFalse(enumer.hasMoreElements());
+ }
+
+ private static Enumeration<Integer> enumerate(Integer... ints) {
+ Vector<Integer> vector = new Vector<Integer>();
+ vector.addAll(asList(ints));
+ return vector.elements();
+ }
+
+ public void testToString() {
+ List<String> list = Collections.emptyList();
+ assertEquals("[]", Iterators.toString(list.iterator()));
+
+ list = Lists.newArrayList("yam", "bam", "jam", "ham");
+ assertEquals("[yam, bam, jam, ham]", Iterators.toString(list.iterator()));
+ }
+
+ public void testGetLast_basic() {
+ List<String> list = newArrayList();
+ list.add("a");
+ list.add("b");
+ assertEquals("b", getLast(list.iterator()));
+ }
+
+ public void testGetLast_exception() {
+ List<String> list = newArrayList();
+ try {
+ getLast(list.iterator());
+ fail();
+ } catch (NoSuchElementException expected) {
+ }
+ }
+
+ public void testGet_basic() {
+ List<String> list = newArrayList();
+ list.add("a");
+ list.add("b");
+ Iterator<String> iterator = list.iterator();
+ assertEquals("b", get(iterator, 1));
+ assertFalse(iterator.hasNext());
+ }
+
+ public void testGet_atSize() {
+ List<String> list = newArrayList();
+ list.add("a");
+ list.add("b");
+ Iterator<String> iterator = list.iterator();
+ try {
+ get(iterator, 2);
+ fail();
+ } catch (IndexOutOfBoundsException expected) {}
+ assertFalse(iterator.hasNext());
+ }
+
+ public void testGet_pastEnd() {
+ List<String> list = newArrayList();
+ list.add("a");
+ list.add("b");
+ Iterator<String> iterator = list.iterator();
+ try {
+ get(iterator, 5);
+ fail();
+ } catch (IndexOutOfBoundsException expected) {}
+ assertFalse(iterator.hasNext());
+ }
+
+ public void testGet_empty() {
+ List<String> list = newArrayList();
+ Iterator<String> iterator = list.iterator();
+ try {
+ get(iterator, 0);
+ fail();
+ } catch (IndexOutOfBoundsException expected) {}
+ assertFalse(iterator.hasNext());
+ }
+
+ public void testGet_negativeIndex() {
+ List<String> list = newArrayList("a", "b", "c");
+ Iterator<String> iterator = list.iterator();
+ try {
+ get(iterator, -1);
+ fail();
+ } catch (IndexOutOfBoundsException expected) {}
+ }
+
+ public void testFrequency() {
+ List<String> list = newArrayList("a", null, "b", null, "a", null);
+ assertEquals(2, Iterators.frequency(list.iterator(), "a"));
+ assertEquals(1, Iterators.frequency(list.iterator(), "b"));
+ assertEquals(0, Iterators.frequency(list.iterator(), "c"));
+ assertEquals(0, Iterators.frequency(list.iterator(), 4.2));
+ assertEquals(3, Iterators.frequency(list.iterator(), null));
+ }
+
+ public void testSingletonIterator() throws Exception {
+ new IteratorTester<Integer>(
+ 3, UNMODIFIABLE, singleton(1), IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<Integer> newTargetIterator() {
+ return Iterators.singletonIterator(1);
+ }
+ }.test();
+ }
+
+ public void testRemoveAll() {
+ List<String> list = newArrayList("a", "b", "c", "d", "e");
+ assertTrue(Iterators.removeAll(
+ list.iterator(), newArrayList("b", "d", "f")));
+ assertEquals(newArrayList("a", "c", "e"), list);
+ assertFalse(Iterators.removeAll(
+ list.iterator(), newArrayList("x", "y", "z")));
+ assertEquals(newArrayList("a", "c", "e"), list);
+ }
+
+ public void testRemoveIf() {
+ List<String> list = newArrayList("a", "b", "c", "d", "e");
+ assertTrue(Iterators.removeIf(
+ list.iterator(),
+ new Predicate<String>() {
+ public boolean apply(String s) {
+ return s.equals("b") || s.equals("d") || s.equals("f");
+ }
+ }));
+ assertEquals(newArrayList("a", "c", "e"), list);
+ assertFalse(Iterators.removeIf(
+ list.iterator(),
+ new Predicate<String>() {
+ public boolean apply(String s) {
+ return s.equals("x") || s.equals("y") || s.equals("z");
+ }
+ }));
+ assertEquals(newArrayList("a", "c", "e"), list);
+ }
+
+ public void testRetainAll() {
+ List<String> list = newArrayList("a", "b", "c", "d", "e");
+ assertTrue(Iterators.retainAll(
+ list.iterator(), newArrayList("b", "d", "f")));
+ assertEquals(newArrayList("b", "d"), list);
+ assertFalse(Iterators.retainAll(
+ list.iterator(), newArrayList("b", "e", "d")));
+ assertEquals(newArrayList("b", "d"), list);
+ }
+
+ private static Test testsForRemoveAllAndRetainAll() {
+ return ListTestSuiteBuilder.using(new TestStringListGenerator() {
+ @Override public List<String> create(final String[] elements) {
+ final List<String> delegate = newArrayList(elements);
+ return new ForwardingList<String>() {
+ @Override protected List<String> delegate() {
+ return delegate;
+ }
+
+ @Override public boolean removeAll(Collection<?> c) {
+ return Iterators.removeAll(iterator(), c);
+ }
+
+ @Override public boolean retainAll(Collection<?> c) {
+ return Iterators.retainAll(iterator(), c);
+ }
+ };
+ }
+ })
+ .named("ArrayList with Iterators.removeAll and retainAll")
+ .withFeatures(
+ ListFeature.GENERAL_PURPOSE,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionSize.ANY)
+ .createTestSuite();
+ }
+
+ public void testRecursiveCallsToPeekingIteratorShouldAvoidRewrapping() {
+ Iterator<Integer> iterator = newArrayList(1, 2, 3).iterator();
+ // Should be able to make a PeekingIterator<T> from an Iterator<? extends T>
+ PeekingIterator<Number> first = Iterators.<Number>peekingIterator(iterator);
+ PeekingIterator<Number> second = Iterators.peekingIterator(first);
+ assertSame("Should not rewrap iterator returned by peekingIterator()",
+ first, second);
+ }
+} \ No newline at end of file
diff --git a/test/com/google/common/collect/Jsr166HashMap.java b/test/com/google/common/collect/Jsr166HashMap.java
new file mode 100644
index 0000000..546e1bb
--- /dev/null
+++ b/test/com/google/common/collect/Jsr166HashMap.java
@@ -0,0 +1,138 @@
+/*
+ * Written by Doug Lea with assistance from members of JCP JSR-166
+ * Expert Group and released to the public domain, as explained at
+ * http://creativecommons.org/licenses/publicdomain
+ * Other contributors include Andrew Wright, Jeffrey Hayes,
+ * Pat Fisher, Mike Judd.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.CustomConcurrentHashMap.SimpleStrategy;
+
+import java.io.Serializable;
+import java.util.Map;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * A copy of {@link java.util.concurrent.ConcurrentHashMap} used to test {@link
+ * com.google.common.collect.CustomConcurrentHashMap}. This also serves
+ * as the examples in the CustomConcurrentHashMap Javadocs.
+ */
+public class Jsr166HashMap<K, V> extends ForwardingConcurrentMap<K, V>
+ implements Serializable {
+ private static class Strategy<K, V> extends SimpleStrategy<K, V>
+ implements Serializable {
+ private static final long serialVersionUID = 0;
+ }
+
+ /* ---------------- Public operations -------------- */
+
+ /**
+ * The default initial capacity for this table,
+ * used when not otherwise specified in a constructor.
+ */
+ static final int DEFAULT_INITIAL_CAPACITY = 16;
+
+ /**
+ * The default load factor for this table, used when not
+ * otherwise specified in a constructor.
+ */
+ static final float DEFAULT_LOAD_FACTOR = 0.75f;
+
+ /**
+ * The default concurrency level for this table, used when not
+ * otherwise specified in a constructor.
+ */
+ static final int DEFAULT_CONCURRENCY_LEVEL = 16;
+
+ final ConcurrentMap<K, V> delegate;
+
+ @Override protected ConcurrentMap<K, V> delegate() {
+ return delegate;
+ }
+
+ /**
+ * Creates a new, empty map with the specified initial capacity, load factor
+ * and concurrency level.
+ *
+ * @param initialCapacity the initial capacity. The implementation performs
+ * internal sizing to accommodate this many
+ * elements.
+ * @param loadFactor the load factor threshold, used to control
+ * resizing. Resizing may be performed when the
+ * average number of elements per bin exceeds this
+ * threshold.
+ * @param concurrencyLevel the estimated number of concurrently updating
+ * threads. The implementation performs internal
+ * sizing to try to accommodate this many threads.
+ * @throws IllegalArgumentException if the initial capacity is negative or
+ * the load factor or concurrencyLevel are
+ * nonpositive.
+ */
+ public Jsr166HashMap(int initialCapacity,
+ float loadFactor, int concurrencyLevel) {
+ // just ignore loadFactor.
+ this.delegate = new CustomConcurrentHashMap.Builder()
+ .initialCapacity(initialCapacity)
+ .concurrencyLevel(concurrencyLevel)
+ .buildMap(new Strategy<K, V>());
+ }
+
+ /**
+ * Creates a new, empty map with the specified initial capacity and load
+ * factor and with the default concurrencyLevel (16).
+ *
+ * @param initialCapacity The implementation performs internal sizing to
+ * accommodate this many elements.
+ * @param loadFactor the load factor threshold, used to control
+ * resizing. Resizing may be performed when the
+ * average number of elements per bin exceeds this
+ * threshold.
+ * @throws IllegalArgumentException if the initial capacity of elements is
+ * negative or the load factor is
+ * nonpositive
+ * @since 1.6
+ */
+ public Jsr166HashMap(int initialCapacity, float loadFactor) {
+ this(initialCapacity, loadFactor, DEFAULT_CONCURRENCY_LEVEL);
+ }
+
+ /**
+ * Creates a new, empty map with the specified initial capacity, and with
+ * default load factor (0.75) and concurrencyLevel (16).
+ *
+ * @param initialCapacity the initial capacity. The implementation performs
+ * internal sizing to accommodate this many
+ * elements.
+ * @throws IllegalArgumentException if the initial capacity of elements is
+ * negative.
+ */
+ public Jsr166HashMap(int initialCapacity) {
+ this(initialCapacity, DEFAULT_LOAD_FACTOR, DEFAULT_CONCURRENCY_LEVEL);
+ }
+
+ /**
+ * Creates a new, empty map with a default initial capacity (16), load
+ * factor (0.75) and concurrencyLevel (16).
+ */
+ public Jsr166HashMap() {
+ this(DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR,
+ DEFAULT_CONCURRENCY_LEVEL);
+ }
+
+ /**
+ * Creates a new map with the same mappings as the given map. The map is
+ * created with a capacity of 1.5 times the number of mappings in the given
+ * map or 16 (whichever is greater), and a default load factor (0.75) and
+ * concurrencyLevel (16).
+ *
+ * @param m the map
+ */
+ public Jsr166HashMap(Map<? extends K, ? extends V> m) {
+ this(Math.max((int) (m.size() / DEFAULT_LOAD_FACTOR) + 1,
+ DEFAULT_INITIAL_CAPACITY),
+ DEFAULT_LOAD_FACTOR, DEFAULT_CONCURRENCY_LEVEL);
+ putAll(m);
+ }
+} \ No newline at end of file
diff --git a/test/com/google/common/collect/Jsr166HashMapTest.java b/test/com/google/common/collect/Jsr166HashMapTest.java
new file mode 100644
index 0000000..822a2c2
--- /dev/null
+++ b/test/com/google/common/collect/Jsr166HashMapTest.java
@@ -0,0 +1,629 @@
+/*
+ * Written by Doug Lea with assistance from members of JCP JSR-166
+ * Expert Group and released to the public domain, as explained at
+ * http://creativecommons.org/licenses/publicdomain
+ * Other contributors include Andrew Wright, Jeffrey Hayes,
+ * Pat Fisher, Mike Judd.
+ */
+
+package com.google.common.collect;
+
+import junit.framework.TestCase;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * ConcurrentHashMap tests copied from ConcurrentHashMapTest. Useful as a
+ * test case for CustomConcurrentHashMap.
+ */
+@SuppressWarnings("unchecked")
+public class Jsr166HashMapTest extends TestCase {
+
+ /*
+ * The following two methods and constants were copied from JSR166TestCase.
+ */
+
+ /**
+ * fail with message "should throw exception"
+ */
+ public void shouldThrow() {
+ fail("Should throw exception");
+ }
+
+ /**
+ * fail with message "Unexpected exception"
+ */
+ public void unexpectedException() {
+ fail("Unexpected exception");
+ }
+
+ static final Integer zero = new Integer(0);
+ static final Integer one = new Integer(1);
+ static final Integer two = new Integer(2);
+ static final Integer three = new Integer(3);
+ static final Integer four = new Integer(4);
+ static final Integer five = new Integer(5);
+ static final Integer six = new Integer(6);
+ static final Integer seven = new Integer(7);
+ static final Integer eight = new Integer(8);
+ static final Integer nine = new Integer(9);
+ static final Integer m1 = new Integer(-1);
+ static final Integer m2 = new Integer(-2);
+ static final Integer m3 = new Integer(-3);
+ static final Integer m4 = new Integer(-4);
+ static final Integer m5 = new Integer(-5);
+ static final Integer m6 = new Integer(-6);
+ static final Integer m10 = new Integer(-10);
+
+ /**
+ * Create a map from Integers 1-5 to Strings "A"-"E".
+ */
+ private static Jsr166HashMap map5() {
+ Jsr166HashMap map = new Jsr166HashMap(5);
+ assertTrue(map.isEmpty());
+ map.put(one, "A");
+ map.put(two, "B");
+ map.put(three, "C");
+ map.put(four, "D");
+ map.put(five, "E");
+ assertFalse(map.isEmpty());
+ assertEquals(5, map.size());
+ return map;
+ }
+
+ /**
+ * clear removes all pairs
+ */
+ public void testClear() {
+ Jsr166HashMap map = map5();
+ map.clear();
+ assertEquals(map.size(), 0);
+ }
+
+ /**
+ * Maps with same contents are equal
+ */
+ public void testEquals() {
+ Jsr166HashMap map1 = map5();
+ Jsr166HashMap map2 = map5();
+ assertEquals(map1, map2);
+ assertEquals(map2, map1);
+ map1.clear();
+ assertFalse(map1.equals(map2));
+ assertFalse(map2.equals(map1));
+ }
+
+ /**
+ * containsKey returns true for contained key
+ */
+ public void testContainsKey() {
+ Jsr166HashMap map = map5();
+ assertTrue(map.containsKey(one));
+ assertFalse(map.containsKey(zero));
+ }
+
+ /**
+ * containsValue returns true for held values
+ */
+ public void testContainsValue() {
+ Jsr166HashMap map = map5();
+ assertTrue(map.containsValue("A"));
+ assertFalse(map.containsValue("Z"));
+ }
+
+ /**
+ * get returns the correct element at the given key, or null if not present
+ */
+ public void testGet() {
+ Jsr166HashMap map = map5();
+ assertEquals("A", (String) map.get(one));
+ Jsr166HashMap empty = new Jsr166HashMap();
+ assertNull(map.get("anything"));
+ }
+
+ /**
+ * isEmpty is true of empty map and false for non-empty
+ */
+ public void testIsEmpty() {
+ Jsr166HashMap empty = new Jsr166HashMap();
+ Jsr166HashMap map = map5();
+ assertTrue(empty.isEmpty());
+ assertFalse(map.isEmpty());
+ }
+
+ /**
+ * keySet returns a Set containing all the keys
+ */
+ public void testKeySet() {
+ Jsr166HashMap map = map5();
+ Set s = map.keySet();
+ assertEquals(5, s.size());
+ assertTrue(s.contains(one));
+ assertTrue(s.contains(two));
+ assertTrue(s.contains(three));
+ assertTrue(s.contains(four));
+ assertTrue(s.contains(five));
+ }
+
+ /**
+ * keySet.toArray returns contains all keys
+ */
+ public void testKeySetToArray() {
+ Jsr166HashMap map = map5();
+ Set s = map.keySet();
+ Object[] ar = s.toArray();
+ assertTrue(s.containsAll(Arrays.asList(ar)));
+ assertEquals(5, ar.length);
+ ar[0] = m10;
+ assertFalse(s.containsAll(Arrays.asList(ar)));
+ }
+
+ /**
+ * Values.toArray contains all values
+ */
+ public void testValuesToArray() {
+ Jsr166HashMap map = map5();
+ Collection v = map.values();
+ Object[] ar = v.toArray();
+ ArrayList s = new ArrayList(Arrays.asList(ar));
+ assertEquals(5, ar.length);
+ assertTrue(s.contains("A"));
+ assertTrue(s.contains("B"));
+ assertTrue(s.contains("C"));
+ assertTrue(s.contains("D"));
+ assertTrue(s.contains("E"));
+ }
+
+ /**
+ * entrySet.toArray contains all entries
+ */
+ public void testEntrySetToArray() {
+ Jsr166HashMap map = map5();
+ Set s = map.entrySet();
+ Object[] ar = s.toArray();
+ assertEquals(5, ar.length);
+ for (int i = 0; i < 5; ++i) {
+ assertTrue(map.containsKey(((Map.Entry) (ar[i])).getKey()));
+ assertTrue(map.containsValue(((Map.Entry) (ar[i])).getValue()));
+ }
+ }
+
+ /**
+ * values collection contains all values
+ */
+ public void testValues() {
+ Jsr166HashMap map = map5();
+ Collection s = map.values();
+ assertEquals(5, s.size());
+ assertTrue(s.contains("A"));
+ assertTrue(s.contains("B"));
+ assertTrue(s.contains("C"));
+ assertTrue(s.contains("D"));
+ assertTrue(s.contains("E"));
+ }
+
+ /**
+ * entrySet contains all pairs
+ */
+ public void testEntrySet() {
+ Jsr166HashMap map = map5();
+ Set s = map.entrySet();
+ assertEquals(5, s.size());
+ Iterator it = s.iterator();
+ while (it.hasNext()) {
+ Map.Entry e = (Map.Entry) it.next();
+ assertTrue(
+ (e.getKey().equals(one) && e.getValue().equals("A")) ||
+ (e.getKey().equals(two) && e.getValue().equals("B"))
+ ||
+ (e.getKey().equals(three) && e.getValue()
+ .equals("C")) ||
+ (e.getKey().equals(four) && e.getValue()
+ .equals("D")) ||
+ (e.getKey().equals(five) && e.getValue()
+ .equals("E")));
+ }
+ }
+
+ /**
+ * putAll adds all key-value pairs from the given map
+ */
+ public void testPutAll() {
+ Jsr166HashMap empty = new Jsr166HashMap();
+ Jsr166HashMap map = map5();
+ empty.putAll(map);
+ assertEquals(5, empty.size());
+ assertTrue(empty.containsKey(one));
+ assertTrue(empty.containsKey(two));
+ assertTrue(empty.containsKey(three));
+ assertTrue(empty.containsKey(four));
+ assertTrue(empty.containsKey(five));
+ }
+
+ /**
+ * putIfAbsent works when the given key is not present
+ */
+ public void testPutIfAbsent() {
+ Jsr166HashMap map = map5();
+ map.putIfAbsent(six, "Z");
+ assertTrue(map.containsKey(six));
+ }
+
+ /**
+ * putIfAbsent does not add the pair if the key is already present
+ */
+ public void testPutIfAbsent2() {
+ Jsr166HashMap map = map5();
+ assertEquals("A", map.putIfAbsent(one, "Z"));
+ }
+
+ /**
+ * replace fails when the given key is not present
+ */
+ public void testReplace() {
+ Jsr166HashMap map = map5();
+ assertNull(map.replace(six, "Z"));
+ assertFalse(map.containsKey(six));
+ }
+
+ /**
+ * replace succeeds if the key is already present
+ */
+ public void testReplace2() {
+ Jsr166HashMap map = map5();
+ assertNotNull(map.replace(one, "Z"));
+ assertEquals("Z", map.get(one));
+ }
+
+
+ /**
+ * replace value fails when the given key not mapped to expected value
+ */
+ public void testReplaceValue() {
+ Jsr166HashMap map = map5();
+ assertEquals("A", map.get(one));
+ assertFalse(map.replace(one, "Z", "Z"));
+ assertEquals("A", map.get(one));
+ }
+
+ /**
+ * replace value succeeds when the given key mapped to expected value
+ */
+ public void testReplaceValue2() {
+ Jsr166HashMap map = map5();
+ assertEquals("A", map.get(one));
+ assertTrue(map.replace(one, "A", "Z"));
+ assertEquals("Z", map.get(one));
+ }
+
+
+ /**
+ * remove removes the correct key-value pair from the map
+ */
+ public void testRemove() {
+ Jsr166HashMap map = map5();
+ map.remove(five);
+ assertEquals(4, map.size());
+ assertFalse(map.containsKey(five));
+ }
+
+ /**
+ * remove(key,value) removes only if pair present
+ */
+ public void testRemove2() {
+ Jsr166HashMap map = map5();
+ map.remove(five, "E");
+ assertEquals(4, map.size());
+ assertFalse(map.containsKey(five));
+ map.remove(four, "A");
+ assertEquals(4, map.size());
+ assertTrue(map.containsKey(four));
+
+ }
+
+ /**
+ * size returns the correct values
+ */
+ public void testSize() {
+ Jsr166HashMap map = map5();
+ Jsr166HashMap empty = new Jsr166HashMap();
+ assertEquals(0, empty.size());
+ assertEquals(5, map.size());
+ }
+
+ /**
+ * toString contains toString of elements
+ */
+ public void testToString() {
+ Jsr166HashMap map = map5();
+ String s = map.toString();
+ for (int i = 1; i <= 5; ++i) {
+ assertTrue(s.indexOf(String.valueOf(i)) >= 0);
+ }
+ }
+
+ // Exception tests
+
+ /**
+ * Cannot create with negative capacity
+ */
+ public void testConstructor1() {
+ try {
+ new Jsr166HashMap(-1, 0, 1);
+ shouldThrow();
+ } catch (IllegalArgumentException e) {
+ }
+ }
+
+ /**
+ * Cannot create with negative concurrency level
+ */
+ public void testConstructor2() {
+ try {
+ new Jsr166HashMap(1, 0, -1);
+ shouldThrow();
+ } catch (IllegalArgumentException e) {
+ }
+ }
+
+ /**
+ * Cannot create with only negative capacity
+ */
+ public void testConstructor3() {
+ try {
+ new Jsr166HashMap(-1);
+ shouldThrow();
+ } catch (IllegalArgumentException e) {
+ }
+ }
+
+ /**
+ * get(null) throws NPE
+ */
+ public void testGet_NullPointerException() {
+ try {
+ Jsr166HashMap c = new Jsr166HashMap(5);
+ c.get(null);
+ shouldThrow();
+ } catch (NullPointerException e) {
+ }
+ }
+
+ /**
+ * containsKey(null) throws NPE
+ */
+ public void testContainsKey_NullPointerException() {
+ try {
+ Jsr166HashMap c = new Jsr166HashMap(5);
+ c.containsKey(null);
+ shouldThrow();
+ } catch (NullPointerException e) {
+ }
+ }
+
+ /**
+ * containsValue(null) throws NPE
+ */
+ public void testContainsValue_NullPointerException() {
+ try {
+ Jsr166HashMap c = new Jsr166HashMap(5);
+ c.containsValue(null);
+ shouldThrow();
+ } catch (NullPointerException e) {
+ }
+ }
+
+ /**
+ * put(null,x) throws NPE
+ */
+ public void testPut1_NullPointerException() {
+ try {
+ Jsr166HashMap c = new Jsr166HashMap(5);
+ c.put(null, "whatever");
+ shouldThrow();
+ } catch (NullPointerException e) {
+ }
+ }
+
+ /**
+ * put(x, null) throws NPE
+ */
+ public void testPut2_NullPointerException() {
+ try {
+ Jsr166HashMap c = new Jsr166HashMap(5);
+ c.put("whatever", null);
+ shouldThrow();
+ } catch (NullPointerException e) {
+ }
+ }
+
+ /**
+ * putIfAbsent(null, x) throws NPE
+ */
+ public void testPutIfAbsent1_NullPointerException() {
+ try {
+ Jsr166HashMap c = new Jsr166HashMap(5);
+ c.putIfAbsent(null, "whatever");
+ shouldThrow();
+ } catch (NullPointerException e) {
+ }
+ }
+
+ /**
+ * replace(null, x) throws NPE
+ */
+ public void testReplace_NullPointerException() {
+ try {
+ Jsr166HashMap c = new Jsr166HashMap(5);
+ c.replace(null, "whatever");
+ shouldThrow();
+ } catch (NullPointerException e) {
+ }
+ }
+
+ /**
+ * replace(null, x, y) throws NPE
+ */
+ public void testReplaceValue_NullPointerException() {
+ try {
+ Jsr166HashMap c = new Jsr166HashMap(5);
+ c.replace(null, one, "whatever");
+ shouldThrow();
+ } catch (NullPointerException e) {
+ }
+ }
+
+ /**
+ * putIfAbsent(x, null) throws NPE
+ */
+ public void testPutIfAbsent2_NullPointerException() {
+ try {
+ Jsr166HashMap c = new Jsr166HashMap(5);
+ c.putIfAbsent("whatever", null);
+ shouldThrow();
+ } catch (NullPointerException e) {
+ }
+ }
+
+
+ /**
+ * replace(x, null) throws NPE
+ */
+ public void testReplace2_NullPointerException() {
+ try {
+ Jsr166HashMap c = new Jsr166HashMap(5);
+ c.replace("whatever", null);
+ shouldThrow();
+ } catch (NullPointerException e) {
+ }
+ }
+
+ /**
+ * replace(x, null, y) throws NPE
+ */
+ public void testReplaceValue2_NullPointerException() {
+ try {
+ Jsr166HashMap c = new Jsr166HashMap(5);
+ c.replace("whatever", null, "A");
+ shouldThrow();
+ } catch (NullPointerException e) {
+ }
+ }
+
+ /**
+ * replace(x, y, null) throws NPE
+ */
+ public void testReplaceValue3_NullPointerException() {
+ try {
+ Jsr166HashMap c = new Jsr166HashMap(5);
+ c.replace("whatever", one, null);
+ shouldThrow();
+ } catch (NullPointerException e) {
+ }
+ }
+
+
+ /**
+ * remove(null) throws NPE
+ */
+ public void testRemove1_NullPointerException() {
+ try {
+ Jsr166HashMap c = new Jsr166HashMap(5);
+ c.put("sadsdf", "asdads");
+ c.remove(null);
+ shouldThrow();
+ } catch (NullPointerException e) {
+ }
+ }
+
+ /**
+ * remove(null, x) throws NPE
+ */
+ public void testRemove2_NullPointerException() {
+ try {
+ Jsr166HashMap c = new Jsr166HashMap(5);
+ c.put("sadsdf", "asdads");
+ c.remove(null, "whatever");
+ shouldThrow();
+ } catch (NullPointerException e) {
+ }
+ }
+
+ /**
+ * remove(x, null) returns false
+ */
+ public void testRemove3() {
+ try {
+ Jsr166HashMap c = new Jsr166HashMap(5);
+ c.put("sadsdf", "asdads");
+ assertFalse(c.remove("sadsdf", null));
+ } catch (NullPointerException e) {
+ fail();
+ }
+ }
+
+ /**
+ * A deserialized map equals original
+ */
+ // TODO: why not use SerializableTester?
+ public void testSerialization() {
+ Jsr166HashMap q = map5();
+
+ try {
+ ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
+ ObjectOutputStream out =
+ new ObjectOutputStream(new BufferedOutputStream(bout));
+ out.writeObject(q);
+ out.close();
+
+ ByteArrayInputStream bin =
+ new ByteArrayInputStream(bout.toByteArray());
+ ObjectInputStream in =
+ new ObjectInputStream(new BufferedInputStream(bin));
+ Jsr166HashMap r = (Jsr166HashMap) in.readObject();
+ assertEquals(q.size(), r.size());
+ assertTrue(q.equals(r));
+ assertTrue(r.equals(q));
+ } catch (Exception e) {
+ e.printStackTrace();
+ unexpectedException();
+ }
+ }
+
+
+ /**
+ * SetValue of an EntrySet entry sets value in the map.
+ */
+ public void testSetValueWriteThrough() {
+ // Adapted from a bug report by Eric Zoerner
+ Jsr166HashMap map = new Jsr166HashMap(2, 5.0f, 1);
+ assertTrue(map.isEmpty());
+ for (int i = 0; i < 20; i++) {
+ map.put(new Integer(i), new Integer(i));
+ }
+ assertFalse(map.isEmpty());
+ Map.Entry entry1 = (Map.Entry) map.entrySet().iterator().next();
+
+ // assert that entry1 is not 16
+ assertTrue("entry is 16, test not valid",
+ !entry1.getKey().equals(new Integer(16)));
+
+ // remove 16 (a different key) from map
+ // which just happens to cause entry1 to be cloned in map
+ map.remove(new Integer(16));
+ entry1.setValue("XYZ");
+ assertTrue(map.containsValue("XYZ")); // fails
+ }
+
+}
diff --git a/test/com/google/common/collect/LegacyComparable.java b/test/com/google/common/collect/LegacyComparable.java
new file mode 100644
index 0000000..f27816d
--- /dev/null
+++ b/test/com/google/common/collect/LegacyComparable.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import java.io.Serializable;
+import java.util.Arrays;
+
+/**
+ * A class that implements {@code Comparable} without generics, such as those
+ * found in libraries that support Java 1.4 and before. Our library needs to
+ * do the bare minimum to accommodate such types, though their use may still
+ * require an explicit type parameter and/or warning suppression.
+ *
+ * @author Kevin Bourrillion
+ */
+@SuppressWarnings("unchecked")
+class LegacyComparable implements Comparable, Serializable {
+ static final LegacyComparable X = new LegacyComparable("x");
+ static final LegacyComparable Y = new LegacyComparable("y");
+ static final LegacyComparable Z = new LegacyComparable("z");
+
+ static final Iterable<LegacyComparable> VALUES_FORWARD
+ = Arrays.asList(X, Y, Z);
+ static final Iterable<LegacyComparable> VALUES_BACKWARD
+ = Arrays.asList(Z, Y, X);
+
+ private final String value;
+
+ LegacyComparable(String value) {
+ this.value = value;
+ }
+
+ public int compareTo(Object object) {
+ // This method is spec'd to throw CCE if object is of the wrong type
+ LegacyComparable that = (LegacyComparable) object;
+ return this.value.compareTo(that.value);
+ }
+
+ @Override public boolean equals(Object object) {
+ if (object instanceof LegacyComparable) {
+ LegacyComparable that = (LegacyComparable) object;
+ return this.value.equals(that.value);
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ return value.hashCode();
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/test/com/google/common/collect/LinkedHashMultimapTest.java b/test/com/google/common/collect/LinkedHashMultimapTest.java
new file mode 100644
index 0000000..87ac94c
--- /dev/null
+++ b/test/com/google/common/collect/LinkedHashMultimapTest.java
@@ -0,0 +1,348 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.Lists.newArrayList;
+import static com.google.common.collect.Sets.newHashSet;
+import static com.google.common.collect.Sets.newLinkedHashSet;
+import static com.google.common.collect.testing.IteratorFeature.MODIFIABLE;
+import com.google.common.collect.testing.IteratorTester;
+import static com.google.common.testing.junit3.JUnitAsserts.assertContentsInOrder;
+import com.google.common.testutils.SerializableTester;
+
+import static java.util.Arrays.asList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+/**
+ * Unit tests for {@code LinkedHashMultimap}.
+ *
+ * @author Jared Levy
+ */
+public class LinkedHashMultimapTest extends AbstractSetMultimapTest {
+
+ @Override protected Multimap<String, Integer> create() {
+ return LinkedHashMultimap.create();
+ }
+
+ private Multimap<String, Integer> initializeMultimap5() {
+ Multimap<String, Integer> multimap = getMultimap();
+ multimap.put("foo", 5);
+ multimap.put("bar", 4);
+ multimap.put("foo", 3);
+ multimap.put("cow", 2);
+ multimap.put("bar", 1);
+ return multimap;
+ }
+
+ public void testToString() {
+ assertEquals("{foo=[3, -1, 2, 4, 1], bar=[1, 2, 3]}",
+ createSample().toString());
+ }
+
+ public void testOrderingReadOnly() {
+ Multimap<String, Integer> multimap = initializeMultimap5();
+ assertOrderingReadOnly(multimap);
+ }
+
+ public void testOrderingUnmodifiable() {
+ Multimap<String, Integer> multimap = initializeMultimap5();
+ assertOrderingReadOnly(Multimaps.unmodifiableMultimap(multimap));
+ }
+
+ public void testOrderingSynchronized() {
+ Multimap<String, Integer> multimap = initializeMultimap5();
+ assertOrderingReadOnly(Multimaps.synchronizedMultimap(multimap));
+ }
+
+ public void testSerializationOrdering() {
+ Multimap<String, Integer> multimap = initializeMultimap5();
+ Multimap<String, Integer> copy
+ = SerializableTester.reserializeAndAssert(multimap);
+ assertOrderingReadOnly(copy);
+ }
+
+ private void assertOrderingReadOnly(Multimap<String, Integer> multimap) {
+ assertContentsInOrder(multimap.get("foo"), 5, 3);
+ assertContentsInOrder(multimap.get("bar"), 4, 1);
+ assertContentsInOrder(multimap.get("cow"), 2);
+
+ assertContentsInOrder(multimap.keySet(), "foo", "bar", "cow");
+ assertContentsInOrder(multimap.values(), 5, 4, 3, 2, 1);
+
+ Iterator<Map.Entry<String, Integer>> entryIterator =
+ multimap.entries().iterator();
+ assertEquals(Maps.immutableEntry("foo", 5), entryIterator.next());
+ assertEquals(Maps.immutableEntry("bar", 4), entryIterator.next());
+ assertEquals(Maps.immutableEntry("foo", 3), entryIterator.next());
+ assertEquals(Maps.immutableEntry("cow", 2), entryIterator.next());
+ assertEquals(Maps.immutableEntry("bar", 1), entryIterator.next());
+
+ Iterator<Map.Entry<String, Collection<Integer>>> collectionIterator =
+ multimap.asMap().entrySet().iterator();
+ Map.Entry<String, Collection<Integer>> entry = collectionIterator.next();
+ assertEquals("foo", entry.getKey());
+ assertContentsInOrder(entry.getValue(), 5, 3);
+ entry = collectionIterator.next();
+ assertEquals("bar", entry.getKey());
+ assertContentsInOrder(entry.getValue(), 4, 1);
+ entry = collectionIterator.next();
+ assertEquals("cow", entry.getKey());
+ assertContentsInOrder(entry.getValue(), 2);
+ }
+
+ public void testOrderingUpdates() {
+ Multimap<String, Integer> multimap = initializeMultimap5();
+
+ assertContentsInOrder(
+ multimap.replaceValues("foo", asList(6, 7)), 5, 3);
+ assertContentsInOrder(multimap.keySet(), "foo", "bar", "cow");
+ assertContentsInOrder(multimap.removeAll("foo"), 6, 7);
+ assertContentsInOrder(multimap.keySet(), "bar", "cow");
+ assertTrue(multimap.remove("bar", 4));
+ assertContentsInOrder(multimap.keySet(), "bar", "cow");
+ assertTrue(multimap.remove("bar", 1));
+ assertContentsInOrder(multimap.keySet(), "cow");
+ multimap.put("bar", 9);
+ assertContentsInOrder(multimap.keySet(), "cow", "bar");
+ }
+
+ public void testToStringNullExact() {
+ Multimap<String, Integer> multimap = getMultimap();
+
+ multimap.put("foo", 3);
+ multimap.put("foo", -1);
+ multimap.put(null, null);
+ multimap.put("bar", 1);
+ multimap.put("foo", 2);
+ multimap.put(null, 0);
+ multimap.put("bar", 2);
+ multimap.put("bar", null);
+ multimap.put("foo", null);
+ multimap.put("foo", 4);
+ multimap.put(null, -1);
+ multimap.put("bar", 3);
+ multimap.put("bar", 1);
+ multimap.put("foo", 1);
+
+ assertEquals(
+ "{foo=[3, -1, 2, null, 4, 1], null=[null, 0, -1], bar=[1, 2, null, 3]}",
+ multimap.toString());
+ }
+
+ public void testPutMultimapOrdered() {
+ Multimap<String, Integer> multimap = LinkedHashMultimap.create();
+ multimap.putAll(initializeMultimap5());
+ assertOrderingReadOnly(multimap);
+ }
+
+ public void testKeysToString_ordering() {
+ Multimap<String, Integer> multimap = initializeMultimap5();
+ assertEquals("[foo x 2, bar x 2, cow]", multimap.keys().toString());
+ }
+
+ public void testCreate() {
+ LinkedHashMultimap<String, Integer> multimap = LinkedHashMultimap.create();
+ multimap.put("foo", 1);
+ multimap.put("bar", 2);
+ multimap.put("foo", 3);
+ assertEquals(ImmutableSet.of(1, 3), multimap.get("foo"));
+ assertEquals(8, multimap.expectedValuesPerKey);
+ }
+
+ public void testCreateFromMultimap() {
+ Multimap<String, Integer> multimap = createSample();
+ LinkedHashMultimap<String, Integer> copy =
+ LinkedHashMultimap.create(multimap);
+ assertEquals(multimap, copy);
+ assertEquals(8, copy.expectedValuesPerKey);
+ }
+
+ public void testCreateFromSizes() {
+ LinkedHashMultimap<String, Integer> multimap
+ = LinkedHashMultimap.create(20, 15);
+ multimap.put("foo", 1);
+ multimap.put("bar", 2);
+ multimap.put("foo", 3);
+ assertEquals(ImmutableSet.of(1, 3), multimap.get("foo"));
+ assertEquals(15, multimap.expectedValuesPerKey);
+ }
+
+ public void testCreateFromIllegalSizes() {
+ try {
+ LinkedHashMultimap.create(-20, 15);
+ fail();
+ } catch (IllegalArgumentException expected) {}
+
+ try {
+ LinkedHashMultimap.create(20, -15);
+ fail();
+ } catch (IllegalArgumentException expected) {}
+ }
+
+ public void testGetIteration() throws Exception {
+ new IteratorTester<Integer>(6, MODIFIABLE,
+ newLinkedHashSet(asList(2, 3, 4, 7, 8)),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ private Multimap<String, Integer> multimap;
+
+ @Override protected Iterator<Integer> newTargetIterator() {
+ multimap = create();
+ multimap.putAll("foo", asList(2, 3, 4));
+ multimap.putAll("bar", asList(5, 6));
+ multimap.putAll("foo", asList(7, 8));
+ return multimap.get("foo").iterator();
+ }
+
+ @Override protected void verify(List<Integer> elements) {
+ assertEquals(newHashSet(elements), multimap.get("foo"));
+ }
+ }.test();
+ }
+
+ public void testEntriesIteration() throws Exception {
+ @SuppressWarnings("unchecked")
+ Set<Entry<String, Integer>> set = Sets.newLinkedHashSet(asList(
+ Maps.immutableEntry("foo", 2),
+ Maps.immutableEntry("foo", 3),
+ Maps.immutableEntry("bar", 4),
+ Maps.immutableEntry("bar", 5),
+ Maps.immutableEntry("foo", 6)));
+
+ new IteratorTester<Entry<String, Integer>>(6, MODIFIABLE, set,
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ private Multimap<String, Integer> multimap;
+
+ @Override protected Iterator<Entry<String, Integer>> newTargetIterator() {
+ multimap = create();
+ multimap.putAll("foo", asList(2, 3));
+ multimap.putAll("bar", asList(4, 5));
+ multimap.putAll("foo", asList(6));
+ return multimap.entries().iterator();
+ }
+
+ @Override protected void verify(List<Entry<String, Integer>> elements) {
+ assertEquals(newHashSet(elements), multimap.entries());
+ }
+ }.test();
+ }
+
+ public void testKeysIteration() throws Exception {
+ new IteratorTester<String>(6, MODIFIABLE, newArrayList("foo", "foo", "bar",
+ "bar", "foo"), IteratorTester.KnownOrder.KNOWN_ORDER) {
+ private Multimap<String, Integer> multimap;
+
+ @Override protected Iterator<String> newTargetIterator() {
+ multimap = create();
+ multimap.putAll("foo", asList(2, 3));
+ multimap.putAll("bar", asList(4, 5));
+ multimap.putAll("foo", asList(6));
+ return multimap.keys().iterator();
+ }
+
+ @Override protected void verify(List<String> elements) {
+ assertEquals(elements, Lists.newArrayList(multimap.keys()));
+ }
+ }.test();
+ }
+
+ public void testValuesIteration() throws Exception {
+ new IteratorTester<Integer>(6, MODIFIABLE, newArrayList(2, 3, 4, 5, 6),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ private Multimap<String, Integer> multimap;
+
+ @Override protected Iterator<Integer> newTargetIterator() {
+ multimap = create();
+ multimap.putAll("foo", asList(2, 3));
+ multimap.putAll("bar", asList(4, 5));
+ multimap.putAll("foo", asList(6));
+ return multimap.values().iterator();
+ }
+
+ @Override protected void verify(List<Integer> elements) {
+ assertEquals(elements, Lists.newArrayList(multimap.values()));
+ }
+ }.test();
+ }
+
+ public void testKeySetIteration() throws Exception {
+ new IteratorTester<String>(6, MODIFIABLE, newLinkedHashSet(asList(
+ "foo", "bar", "baz", "dog", "cat")),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ private Multimap<String, Integer> multimap;
+
+ @Override protected Iterator<String> newTargetIterator() {
+ multimap = create();
+ multimap.putAll("foo", asList(2, 3));
+ multimap.putAll("bar", asList(4, 5));
+ multimap.putAll("foo", asList(6));
+ multimap.putAll("baz", asList(7, 8));
+ multimap.putAll("dog", asList(9));
+ multimap.putAll("bar", asList(10, 11));
+ multimap.putAll("cat", asList(12, 13, 14));
+ return multimap.keySet().iterator();
+ }
+
+ @Override protected void verify(List<String> elements) {
+ assertEquals(newHashSet(elements), multimap.keySet());
+ }
+ }.test();
+ }
+
+ public void testAsSetIteration() throws Exception {
+ @SuppressWarnings("unchecked")
+ Set<Entry<String, Collection<Integer>>> set = newLinkedHashSet(asList(
+ Maps.immutableEntry("foo",
+ (Collection<Integer>) Sets.newHashSet(2, 3, 6)),
+ Maps.immutableEntry("bar",
+ (Collection<Integer>) Sets.newHashSet(4, 5, 10, 11)),
+ Maps.immutableEntry("baz",
+ (Collection<Integer>) Sets.newHashSet(7, 8)),
+ Maps.immutableEntry("dog",
+ (Collection<Integer>) Sets.newHashSet(9)),
+ Maps.immutableEntry("cat",
+ (Collection<Integer>) Sets.newHashSet(12, 13, 14))
+ ));
+ new IteratorTester<Entry<String, Collection<Integer>>>(6, MODIFIABLE, set,
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ private Multimap<String, Integer> multimap;
+
+ @Override protected Iterator<Entry<String, Collection<Integer>>>
+ newTargetIterator() {
+ multimap = create();
+ multimap.putAll("foo", asList(2, 3));
+ multimap.putAll("bar", asList(4, 5));
+ multimap.putAll("foo", asList(6));
+ multimap.putAll("baz", asList(7, 8));
+ multimap.putAll("dog", asList(9));
+ multimap.putAll("bar", asList(10, 11));
+ multimap.putAll("cat", asList(12, 13, 14));
+ return multimap.asMap().entrySet().iterator();
+ }
+
+ @Override protected void verify(
+ List<Entry<String, Collection<Integer>>> elements) {
+ assertEquals(newHashSet(elements), multimap.asMap().entrySet());
+ }
+ }.test();
+ }
+
+}
diff --git a/test/com/google/common/collect/LinkedHashMultisetTest.java b/test/com/google/common/collect/LinkedHashMultisetTest.java
new file mode 100644
index 0000000..8feee86
--- /dev/null
+++ b/test/com/google/common/collect/LinkedHashMultisetTest.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.Lists.newArrayList;
+import static com.google.common.collect.testing.IteratorFeature.MODIFIABLE;
+import com.google.common.collect.testing.IteratorTester;
+import static com.google.common.testing.junit3.JUnitAsserts.assertContentsInOrder;
+
+import java.util.Arrays;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
+
+/**
+ * Unit test for {@link LinkedHashMultiset}.
+ *
+ * @author Kevin Bourrillion
+ */
+public class LinkedHashMultisetTest extends AbstractMultisetTest {
+ @Override protected <E> Multiset<E> create() {
+ return LinkedHashMultiset.create();
+ }
+
+ public void testCreate() {
+ Multiset<String> multiset = LinkedHashMultiset.create();
+ multiset.add("foo", 2);
+ multiset.add("bar");
+ assertEquals(3, multiset.size());
+ assertEquals(2, multiset.count("foo"));
+ assertEquals("[foo x 2, bar]", multiset.toString());
+ }
+
+ public void testCreateWithSize() {
+ Multiset<String> multiset = LinkedHashMultiset.create(50);
+ multiset.add("foo", 2);
+ multiset.add("bar");
+ assertEquals(3, multiset.size());
+ assertEquals(2, multiset.count("foo"));
+ assertEquals("[foo x 2, bar]", multiset.toString());
+ }
+
+ public void testCreateFromIterable() {
+ Multiset<String> multiset
+ = LinkedHashMultiset.create(Arrays.asList("foo", "bar", "foo"));
+ assertEquals(3, multiset.size());
+ assertEquals(2, multiset.count("foo"));
+ assertEquals("[foo x 2, bar]", multiset.toString());
+ }
+
+ public void testIteratorBashing() throws Exception {
+ ms = createSample();
+ IteratorTester<String> tester =
+ new IteratorTester<String>(6, MODIFIABLE, newArrayList(ms),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<String> newTargetIterator() {
+ return createSample().iterator();
+ }
+ };
+ tester.test();
+ }
+
+ public void testElementSetIteratorBashing() throws Exception {
+ IteratorTester<String> tester =
+ new IteratorTester<String>(5, MODIFIABLE, newArrayList("a", "c", "b"),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<String> newTargetIterator() {
+ Multiset<String> multiset = create();
+ multiset.add("a", 3);
+ multiset.add("c", 1);
+ multiset.add("b", 2);
+ return multiset.elementSet().iterator();
+ }
+ };
+ tester.test();
+ }
+
+ public void testToString() {
+ ms.add("a", 3);
+ ms.add("c", 1);
+ ms.add("b", 2);
+
+ assertEquals("[a x 3, c, b x 2]", ms.toString());
+ }
+
+ public void testLosesPlaceInLine() throws Exception {
+ ms.add("a");
+ ms.add("b", 2);
+ ms.add("c");
+ assertContentsInOrder(ms.elementSet(), "a", "b", "c");
+ ms.remove("b");
+ assertContentsInOrder(ms.elementSet(), "a", "b", "c");
+ ms.add("b");
+ assertContentsInOrder(ms.elementSet(), "a", "b", "c");
+ ms.remove("b", 2);
+ ms.add("b");
+ assertContentsInOrder(ms.elementSet(), "a", "c", "b");
+ }
+
+ public void testIteratorRemoveConcurrentModification() {
+ ms.add("a");
+ ms.add("b");
+ Iterator<String> iterator = ms.iterator();
+ iterator.next();
+ ms.remove("a");
+ assertEquals(1, ms.size());
+ assertTrue(ms.contains("b"));
+ try {
+ iterator.remove();
+ fail();
+ } catch (ConcurrentModificationException expected) {}
+ assertEquals(1, ms.size());
+ assertTrue(ms.contains("b"));
+ }
+}
diff --git a/test/com/google/common/collect/LinkedListMultimapTest.java b/test/com/google/common/collect/LinkedListMultimapTest.java
new file mode 100644
index 0000000..b954958
--- /dev/null
+++ b/test/com/google/common/collect/LinkedListMultimapTest.java
@@ -0,0 +1,448 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.Lists.newArrayList;
+import static com.google.common.collect.Sets.newHashSet;
+import static com.google.common.collect.Sets.newLinkedHashSet;
+import static com.google.common.collect.testing.IteratorFeature.MODIFIABLE;
+import com.google.common.collect.testing.IteratorTester;
+import static com.google.common.testing.junit3.JUnitAsserts.assertContentsInOrder;
+
+import java.util.Arrays;
+import static java.util.Arrays.asList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.RandomAccess;
+import java.util.Set;
+
+/**
+ * Tests for {@code LinkedListMultimap}.
+ *
+ * @author Mike Bostock
+ */
+public class LinkedListMultimapTest extends AbstractListMultimapTest {
+
+ @Override protected LinkedListMultimap<String, Integer> create() {
+ return LinkedListMultimap.create();
+ }
+
+ /**
+ * Confirm that get() returns a List that doesn't implement RandomAccess.
+ */
+ public void testGetRandomAccess() {
+ Multimap<String, Integer> multimap = create();
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ assertFalse(multimap.get("foo") instanceof RandomAccess);
+ assertFalse(multimap.get("bar") instanceof RandomAccess);
+ }
+
+ /**
+ * Confirm that removeAll() returns a List that implements RandomAccess, even
+ * though get() doesn't.
+ */
+ public void testRemoveAllRandomAccess() {
+ Multimap<String, Integer> multimap = create();
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ assertTrue(multimap.removeAll("foo") instanceof RandomAccess);
+ assertTrue(multimap.removeAll("bar") instanceof RandomAccess);
+ }
+
+ /**
+ * Confirm that replaceValues() returns a List that implements RandomAccess,
+ * even though get() doesn't.
+ */
+ public void testReplaceValuesRandomAccess() {
+ Multimap<String, Integer> multimap = create();
+ multimap.put("foo", 1);
+ multimap.put("foo", 3);
+ assertTrue(multimap.replaceValues("foo", Arrays.asList(2, 4))
+ instanceof RandomAccess);
+ assertTrue(multimap.replaceValues("bar", Arrays.asList(2, 4))
+ instanceof RandomAccess);
+ }
+
+ public void testCreateFromMultimap() {
+ Multimap<String, Integer> multimap = createSample();
+ LinkedListMultimap<String, Integer> copy =
+ LinkedListMultimap.create(multimap);
+ assertEquals(multimap, copy);
+ }
+
+ public void testCreateFromSize() {
+ LinkedListMultimap<String, Integer> multimap
+ = LinkedListMultimap.create(20);
+ multimap.put("foo", 1);
+ multimap.put("bar", 2);
+ multimap.put("foo", 3);
+ assertEquals(ImmutableList.of(1, 3), multimap.get("foo"));
+ }
+
+ public void testCreateFromIllegalSize() {
+ try {
+ LinkedListMultimap.create(-20);
+ fail();
+ } catch (IllegalArgumentException expected) {}
+ }
+
+ /* "Linked" prefix avoids collision with AbstractMultimapTest. */
+
+ public void testLinkedToString() {
+ assertEquals("{foo=[3, -1, 2, 4, 1], bar=[1, 2, 3, 1]}",
+ createSample().toString());
+ }
+
+ public void testLinkedGetAdd() {
+ LinkedListMultimap<String, Integer> map = create();
+ map.put("bar", 1);
+ Collection<Integer> foos = map.get("foo");
+ foos.add(2);
+ foos.add(3);
+ map.put("bar", 4);
+ map.put("foo", 5);
+ assertEquals("{bar=[1, 4], foo=[2, 3, 5]}", map.toString());
+ assertEquals("[bar=1, foo=2, foo=3, bar=4, foo=5]",
+ map.entries().toString());
+ }
+
+ public void testLinkedGetInsert() {
+ ListMultimap<String, Integer> map = create();
+ map.put("bar", 1);
+ List<Integer> foos = map.get("foo");
+ foos.add(2);
+ foos.add(0, 3);
+ map.put("bar", 4);
+ map.put("foo", 5);
+ assertEquals("{bar=[1, 4], foo=[3, 2, 5]}", map.toString());
+ assertEquals("[bar=1, foo=3, foo=2, bar=4, foo=5]",
+ map.entries().toString());
+ }
+
+ public void testLinkedPutInOrder() {
+ Multimap<String, Integer> map = create();
+ map.put("foo", 1);
+ map.put("bar", 2);
+ map.put("bar", 3);
+ assertEquals("{foo=[1], bar=[2, 3]}", map.toString());
+ assertEquals("[foo=1, bar=2, bar=3]", map.entries().toString());
+ }
+
+ public void testLinkedPutOutOfOrder() {
+ Multimap<String, Integer> map = create();
+ map.put("bar", 1);
+ map.put("foo", 2);
+ map.put("bar", 3);
+ assertEquals("{bar=[1, 3], foo=[2]}", map.toString());
+ assertEquals("[bar=1, foo=2, bar=3]", map.entries().toString());
+ }
+
+ public void testLinkedPutAllMultimap() {
+ Multimap<String, Integer> src = create();
+ src.put("bar", 1);
+ src.put("foo", 2);
+ src.put("bar", 3);
+ Multimap<String, Integer> dst = create();
+ dst.putAll(src);
+ assertEquals("{bar=[1, 3], foo=[2]}", dst.toString());
+ assertEquals("[bar=1, foo=2, bar=3]", src.entries().toString());
+ }
+
+ public void testLinkedReplaceValues() {
+ Multimap<String, Integer> map = create();
+ map.put("bar", 1);
+ map.put("foo", 2);
+ map.put("bar", 3);
+ map.put("bar", 4);
+ assertEquals("{bar=[1, 3, 4], foo=[2]}", map.toString());
+ map.replaceValues("bar", asList(1, 2));
+ assertEquals("[bar=1, foo=2, bar=2]", map.entries().toString());
+ assertEquals("{bar=[1, 2], foo=[2]}", map.toString());
+ }
+
+ public void testLinkedClear() {
+ ListMultimap<String, Integer> map = create();
+ map.put("foo", 1);
+ map.put("foo", 2);
+ map.put("bar", 3);
+ List<Integer> foos = map.get("foo");
+ Collection<Integer> values = map.values();
+ assertEquals(asList(1, 2), foos);
+ assertContentsInOrder(values, 1, 2, 3);
+ map.clear();
+ assertEquals(Collections.emptyList(), foos);
+ assertContentsInOrder(values);
+ assertEquals("[]", map.entries().toString());
+ assertEquals("{}", map.toString());
+ }
+
+ public void testLinkedKeySet() {
+ Multimap<String, Integer> map = create();
+ map.put("bar", 1);
+ map.put("foo", 2);
+ map.put("bar", 3);
+ map.put("bar", 4);
+ assertEquals("[bar, foo]", map.keySet().toString());
+ map.keySet().remove("bar");
+ assertEquals("{foo=[2]}", map.toString());
+ }
+
+ public void testLinkedKeys() {
+ Multimap<String, Integer> map = create();
+ map.put("bar", 1);
+ map.put("foo", 2);
+ map.put("bar", 3);
+ map.put("bar", 4);
+ assertEquals("[bar=1, foo=2, bar=3, bar=4]",
+ map.entries().toString());
+ assertContentsInOrder(map.keys(), "bar", "foo", "bar", "bar");
+ map.keys().remove("bar"); // bar is no longer the first key!
+ assertEquals("{foo=[2], bar=[3, 4]}", map.toString());
+ }
+
+ public void testLinkedValues() {
+ Multimap<String, Integer> map = create();
+ map.put("bar", 1);
+ map.put("foo", 2);
+ map.put("bar", 3);
+ map.put("bar", 4);
+ assertEquals("[1, 2, 3, 4]", map.values().toString());
+ map.values().remove(2);
+ assertEquals("{bar=[1, 3, 4]}", map.toString());
+ }
+
+ public void testLinkedEntries() {
+ Multimap<String, Integer> map = create();
+ map.put("bar", 1);
+ map.put("foo", 2);
+ map.put("bar", 3);
+ Iterator<Map.Entry<String, Integer>> entries = map.entries().iterator();
+ Map.Entry<String, Integer> entry = entries.next();
+ assertEquals("bar", entry.getKey());
+ assertEquals(1, (int) entry.getValue());
+ entry = entries.next();
+ assertEquals("foo", entry.getKey());
+ assertEquals(2, (int) entry.getValue());
+ entry.setValue(4);
+ entry = entries.next();
+ assertEquals("bar", entry.getKey());
+ assertEquals(3, (int) entry.getValue());
+ assertFalse(entries.hasNext());
+ entries.remove();
+ assertEquals("{bar=[1], foo=[4]}", map.toString());
+ }
+
+ public void testLinkedAsMapEntries() {
+ Multimap<String, Integer> map = create();
+ map.put("bar", 1);
+ map.put("foo", 2);
+ map.put("bar", 3);
+ Iterator<Map.Entry<String, Collection<Integer>>> entries
+ = map.asMap().entrySet().iterator();
+ Map.Entry<String, Collection<Integer>> entry = entries.next();
+ assertEquals("bar", entry.getKey());
+ assertContentsInOrder(entry.getValue(), 1, 3);
+ try {
+ entry.setValue(Arrays.<Integer>asList());
+ fail("UnsupportedOperationException expected");
+ } catch (UnsupportedOperationException expected) {}
+ entries.remove(); // clear
+ entry = entries.next();
+ assertEquals("foo", entry.getKey());
+ assertContentsInOrder(entry.getValue(), 2);
+ assertFalse(entries.hasNext());
+ assertEquals("{foo=[2]}", map.toString());
+ }
+
+ /**
+ * Test calling setValue() on an entry returned by multimap.entries().
+ */
+ @Override public void testEntrySetValue() {
+ ListMultimap<String, Integer> multimap = create();
+ multimap.put("foo", 1);
+ multimap.put("bar", 3);
+ Collection<Map.Entry<String, Integer>> entries = multimap.entries();
+ Iterator<Map.Entry<String, Integer>> iterator = entries.iterator();
+ Map.Entry<String, Integer> entrya = iterator.next();
+ Map.Entry<String, Integer> entryb = iterator.next();
+
+ int oldValue = entrya.setValue(2);
+ assertEquals(1, oldValue);
+ assertFalse(multimap.containsEntry("foo", 1));
+ assertTrue(multimap.containsEntry("foo", 2));
+ assertTrue(multimap.containsEntry("bar", 3));
+ assertEquals(2, (int) entrya.getValue());
+ assertEquals(3, (int) entryb.getValue());
+ }
+
+ public void testEntriesAfterMultimapUpdate() {
+ ListMultimap<String, Integer> multimap = create();
+ multimap.put("foo", 2);
+ multimap.put("bar", 3);
+ Collection<Map.Entry<String, Integer>> entries = multimap.entries();
+ Iterator<Map.Entry<String, Integer>> iterator = entries.iterator();
+ Map.Entry<String, Integer> entrya = iterator.next();
+ Map.Entry<String, Integer> entryb = iterator.next();
+
+ assertEquals(2, (int) multimap.get("foo").set(0, 4));
+ assertFalse(multimap.containsEntry("foo", 2));
+ assertTrue(multimap.containsEntry("foo", 4));
+ assertTrue(multimap.containsEntry("bar", 3));
+ assertEquals(4, (int) entrya.getValue());
+ assertEquals(3, (int) entryb.getValue());
+
+ assertTrue(multimap.put("foo", 5));
+ assertTrue(multimap.containsEntry("foo", 5));
+ assertTrue(multimap.containsEntry("foo", 4));
+ assertTrue(multimap.containsEntry("bar", 3));
+ assertEquals(4, (int) entrya.getValue());
+ assertEquals(3, (int) entryb.getValue());
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testEntriesIteration() throws Exception {
+ List<Entry<String, Integer>> list = Lists.newArrayList(
+ Maps.immutableEntry("foo", 2),
+ Maps.immutableEntry("foo", 3),
+ Maps.immutableEntry("bar", 4),
+ Maps.immutableEntry("bar", 5),
+ Maps.immutableEntry("foo", 6));
+
+ new IteratorTester<Entry<String, Integer>>(6, MODIFIABLE, list,
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ private Multimap<String, Integer> multimap;
+
+ @Override protected Iterator<Entry<String, Integer>> newTargetIterator() {
+ multimap = create();
+ multimap.putAll("foo", asList(2, 3));
+ multimap.putAll("bar", asList(4, 5));
+ multimap.putAll("foo", asList(6));
+ return multimap.entries().iterator();
+ }
+
+ @Override protected void verify(List<Entry<String, Integer>> elements) {
+ assertEquals(elements, Lists.newArrayList(multimap.entries()));
+ }
+ }.test();
+ }
+
+ public void testKeysIteration() throws Exception {
+ new IteratorTester<String>(6, MODIFIABLE, newArrayList("foo", "foo", "bar",
+ "bar", "foo"), IteratorTester.KnownOrder.KNOWN_ORDER) {
+ private Multimap<String, Integer> multimap;
+
+ @Override protected Iterator<String> newTargetIterator() {
+ multimap = create();
+ multimap.putAll("foo", asList(2, 3));
+ multimap.putAll("bar", asList(4, 5));
+ multimap.putAll("foo", asList(6));
+ return multimap.keys().iterator();
+ }
+
+ @Override protected void verify(List<String> elements) {
+ assertEquals(elements, Lists.newArrayList(multimap.keys()));
+ }
+ }.test();
+ }
+
+ public void testValuesIteration() throws Exception {
+ new IteratorTester<Integer>(6, MODIFIABLE, newArrayList(2, 3, 4, 5, 6),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ private Multimap<String, Integer> multimap;
+
+ @Override protected Iterator<Integer> newTargetIterator() {
+ multimap = create();
+ multimap.putAll("foo", asList(2, 3));
+ multimap.putAll("bar", asList(4, 5));
+ multimap.putAll("foo", asList(6));
+ return multimap.values().iterator();
+ }
+
+ @Override protected void verify(List<Integer> elements) {
+ assertEquals(elements, Lists.newArrayList(multimap.values()));
+ }
+ }.test();
+ }
+
+ public void testKeySetIteration() throws Exception {
+ new IteratorTester<String>(6, MODIFIABLE, newLinkedHashSet(asList(
+ "foo", "bar", "baz", "dog", "cat")),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ private Multimap<String, Integer> multimap;
+
+ @Override protected Iterator<String> newTargetIterator() {
+ multimap = create();
+ multimap.putAll("foo", asList(2, 3));
+ multimap.putAll("bar", asList(4, 5));
+ multimap.putAll("foo", asList(6));
+ multimap.putAll("baz", asList(7, 8));
+ multimap.putAll("dog", asList(9));
+ multimap.putAll("bar", asList(10, 11));
+ multimap.putAll("cat", asList(12, 13, 14));
+ return multimap.keySet().iterator();
+ }
+
+ @Override protected void verify(List<String> elements) {
+ assertEquals(newHashSet(elements), multimap.keySet());
+ }
+ }.test();
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testAsSetIteration() throws Exception {
+ Set<Entry<String, Collection<Integer>>> set = Sets.newLinkedHashSet(asList(
+ Maps.immutableEntry("foo",
+ (Collection<Integer>) asList(2, 3, 6)),
+ Maps.immutableEntry("bar",
+ (Collection<Integer>) asList(4, 5, 10, 11)),
+ Maps.immutableEntry("baz",
+ (Collection<Integer>) asList(7, 8)),
+ Maps.immutableEntry("dog",
+ (Collection<Integer>) asList(9)),
+ Maps.immutableEntry("cat",
+ (Collection<Integer>) asList(12, 13, 14))
+ ));
+
+ new IteratorTester<Entry<String, Collection<Integer>>>(6, MODIFIABLE, set,
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ private Multimap<String, Integer> multimap;
+
+ @Override protected Iterator<Entry<String, Collection<Integer>>>
+ newTargetIterator() {
+ multimap = create();
+ multimap.putAll("foo", asList(2, 3));
+ multimap.putAll("bar", asList(4, 5));
+ multimap.putAll("foo", asList(6));
+ multimap.putAll("baz", asList(7, 8));
+ multimap.putAll("dog", asList(9));
+ multimap.putAll("bar", asList(10, 11));
+ multimap.putAll("cat", asList(12, 13, 14));
+ return multimap.asMap().entrySet().iterator();
+ }
+
+ @Override protected void verify(
+ List<Entry<String, Collection<Integer>>> elements) {
+ assertEquals(newHashSet(elements), multimap.asMap().entrySet());
+ }
+ }.test();
+ }
+}
diff --git a/test/com/google/common/collect/ListsTest.java b/test/com/google/common/collect/ListsTest.java
new file mode 100644
index 0000000..bec98a5
--- /dev/null
+++ b/test/com/google/common/collect/ListsTest.java
@@ -0,0 +1,705 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.testing.IteratorFeature.UNMODIFIABLE;
+import com.google.common.collect.testing.IteratorTester;
+import com.google.common.collect.testing.ListTestSuiteBuilder;
+import com.google.common.collect.testing.TestStringListGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.ListFeature;
+import static com.google.common.testing.junit3.JUnitAsserts.assertContentsInOrder;
+import com.google.common.testutils.NullPointerTester;
+import com.google.common.testutils.SerializableTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.easymock.classextension.EasyMock;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import static java.util.Arrays.asList;
+import java.util.Collection;
+import java.util.Collections;
+import static java.util.Collections.singletonList;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.NoSuchElementException;
+import java.util.RandomAccess;
+
+/**
+ * Unit test for {@code Lists}.
+ *
+ * @author Kevin Bourrillion
+ * @author Mike Bostock
+ * @author Jared Levy
+ */
+public class ListsTest extends TestCase {
+
+ private static final Collection<Integer> SOME_COLLECTION
+ = asList(0, 1, 1);
+
+ private static final Iterable<Integer> SOME_ITERABLE = new SomeIterable();
+
+ private static class SomeIterable implements Iterable<Integer>, Serializable {
+ public Iterator<Integer> iterator() {
+ return SOME_COLLECTION.iterator();
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ private static final List<Integer> SOME_LIST
+ = Lists.newArrayList(1, 2, 3, 4);
+
+ private static final List<Integer> SOME_SEQUENTIAL_LIST
+ = Lists.newLinkedList(asList(1, 2, 3, 4));
+
+ private static final List<String> SOME_STRING_LIST
+ = asList("1", "2", "3", "4");
+
+ private static final Function<Number, String> SOME_FUNCTION
+ = new SomeFunction();
+
+ private static class SomeFunction
+ implements Function<Number, String>, Serializable {
+ public String apply(Number n) {
+ return String.valueOf(n);
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite();
+ suite.addTestSuite(ListsTest.class);
+
+ suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+ @Override protected List<String> create(String[] elements) {
+ String[] rest = new String[elements.length - 1];
+ System.arraycopy(elements, 1, rest, 0, elements.length - 1);
+ return Lists.asList(elements[0], rest);
+ }
+ })
+ .named("Lists.asList, 2 parameter")
+ .withFeatures(CollectionSize.SEVERAL, CollectionSize.ONE,
+ CollectionFeature.ALLOWS_NULL_VALUES)
+ .createTestSuite());
+
+ suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+ @Override protected List<String> create(String[] elements) {
+ String[] rest = new String[elements.length - 2];
+ System.arraycopy(elements, 2, rest, 0, elements.length - 2);
+ return Lists.asList(elements[0], elements[1], rest);
+ }
+ })
+ .named("Lists.asList, 3 parameter")
+ .withFeatures(CollectionSize.SEVERAL,
+ CollectionFeature.ALLOWS_NULL_VALUES)
+ .createTestSuite());
+
+ final Function<String, String> removeFirst
+ = new Function<String, String>() {
+ public String apply(String from) {
+ return (from.length() == 0) ? from : from.substring(1);
+ }
+ };
+
+ suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+ @Override protected List<String> create(String[] elements) {
+ List<String> fromList = Lists.newArrayList();
+ for (String element : elements) {
+ fromList.add("q" + checkNotNull(element));
+ }
+ return Lists.transform(fromList, removeFirst);
+ }
+ })
+ .named("Lists.transform, random access, no nulls")
+ .withFeatures(CollectionSize.ANY,
+ ListFeature.REMOVE_OPERATIONS)
+ .createTestSuite());
+
+ suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+ @Override protected List<String> create(String[] elements) {
+ List<String> fromList = Lists.newLinkedList();
+ for (String element : elements) {
+ fromList.add("q" + checkNotNull(element));
+ }
+ return Lists.transform(fromList, removeFirst);
+ }
+ })
+ .named("Lists.transform, sequential access, no nulls")
+ .withFeatures(CollectionSize.ANY,
+ ListFeature.REMOVE_OPERATIONS)
+ .createTestSuite());
+
+ suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+ @Override protected List<String> create(String[] elements) {
+ List<String> fromList = Lists.newArrayList(elements);
+ return Lists.transform(fromList, Functions.<String>identity());
+ }
+ })
+ .named("Lists.transform, random access, nulls")
+ .withFeatures(CollectionSize.ANY,
+ ListFeature.REMOVE_OPERATIONS,
+ CollectionFeature.ALLOWS_NULL_VALUES)
+ .createTestSuite());
+
+ suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+ @Override protected List<String> create(String[] elements) {
+ List<String> fromList =
+ Lists.newLinkedList(asList(elements));
+ return Lists.transform(fromList, Functions.<String>identity());
+ }
+ })
+ .named("Lists.transform, sequential access, nulls")
+ .withFeatures(CollectionSize.ANY,
+ ListFeature.REMOVE_OPERATIONS,
+ CollectionFeature.ALLOWS_NULL_VALUES)
+ .createTestSuite());
+
+ return suite;
+ }
+
+ public void testIllustrateVarargsWeirdness() {
+ String[] array = { "foo", "bar" };
+
+ List<String> list = ImmutableList.of(array);
+
+ // Fortunately, this does what the caller clearly intended
+ assertEquals(2, list.size());
+
+ // If the list-of-array is desired, a special method type parameter must be
+ // inserted or the code won't compile.
+ List<String[]> listOfArray = ImmutableList.<String[]>of(array);
+
+ // This also behaves as expected
+ assertEquals(1, listOfArray.size());
+
+ // It's pretty strange that the selection of overload can depend on the
+ // type parameter given. But what if raw types are used?
+ @SuppressWarnings("unchecked")
+ List whatIsThis = ImmutableList.of(array);
+
+ // In most cases I think this will be what the caller intended. If not...
+ // well, ya shoulda used the generics, bub.
+ assertEquals(2, whatIsThis.size());
+
+ // Unfortunately, the below will blow up at runtime
+ // But hey, can't say the compiler didn't warn ya
+ try {
+ ImmutableList.of((String[]) null);
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testNewArrayListEmpty() {
+ ArrayList<Integer> list = Lists.newArrayList();
+ assertEquals(Collections.emptyList(), list);
+ }
+
+ public void testNewArrayListWithCapacity() {
+ ArrayList<Integer> list = Lists.newArrayListWithCapacity(0);
+ assertEquals(Collections.emptyList(), list);
+
+ ArrayList<Integer> bigger = Lists.newArrayListWithCapacity(256);
+ assertEquals(Collections.emptyList(), bigger);
+ }
+
+ public void testNewArrayListWithCapacity_negative() {
+ try {
+ Lists.newArrayListWithCapacity(-1);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ public void testNewArrayListWithExpectedSize() {
+ ArrayList<Integer> list = Lists.newArrayListWithExpectedSize(0);
+ assertEquals(Collections.emptyList(), list);
+
+ ArrayList<Integer> bigger = Lists.newArrayListWithExpectedSize(256);
+ assertEquals(Collections.emptyList(), bigger);
+ }
+
+ public void testNewArrayListWithExpectedSize_negative() {
+ try {
+ Lists.newArrayListWithExpectedSize(-1);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ public void testNewArrayListVarArgs() {
+ ArrayList<Integer> list = Lists.newArrayList(0, 1, 1);
+ assertEquals(SOME_COLLECTION, list);
+ }
+
+ public void testComputeArrayListCapacity() {
+ assertEquals(5, Lists.computeArrayListCapacity(0));
+ assertEquals(13, Lists.computeArrayListCapacity(8));
+ assertEquals(89, Lists.computeArrayListCapacity(77));
+ assertEquals(22000005, Lists.computeArrayListCapacity(20000000));
+ assertEquals(Integer.MAX_VALUE,
+ Lists.computeArrayListCapacity(Integer.MAX_VALUE - 1000));
+ }
+
+ public void testNewArrayListFromCollection() {
+ ArrayList<Integer> list = Lists.newArrayList(SOME_COLLECTION);
+ assertEquals(SOME_COLLECTION, list);
+ }
+
+ public void testNewArrayListFromIterable() {
+ ArrayList<Integer> list = Lists.newArrayList(SOME_ITERABLE);
+ assertEquals(SOME_COLLECTION, list);
+ }
+
+ public void testNewArrayListFromIterator() {
+ ArrayList<Integer> list = Lists.newArrayList(SOME_COLLECTION.iterator());
+ assertEquals(SOME_COLLECTION, list);
+ }
+
+ public void testNewLinkedListEmpty() {
+ LinkedList<Integer> list = Lists.newLinkedList();
+ assertEquals(Collections.emptyList(), list);
+ }
+
+ public void testNewLinkedListFromCollection() {
+ LinkedList<Integer> list = Lists.newLinkedList(SOME_COLLECTION);
+ assertEquals(SOME_COLLECTION, list);
+ }
+
+ public void testNewLinkedListFromIterable() {
+ LinkedList<Integer> list = Lists.newLinkedList(SOME_ITERABLE);
+ assertEquals(SOME_COLLECTION, list);
+ }
+
+ public void testNullPointerExceptions() throws Exception {
+ NullPointerTester tester = new NullPointerTester();
+ tester.testAllPublicStaticMethods(Lists.class);
+ }
+
+ /**
+ * This is just here to illustrate how {@code Arrays#asList} differs from
+ * {@code Lists#newArrayList}.
+ */
+ public void testArraysAsList() {
+ List<String> ourWay = Lists.newArrayList("foo", "bar", "baz");
+ List<String> otherWay = asList("foo", "bar", "baz");
+
+ // They're logically equal
+ assertEquals(ourWay, otherWay);
+
+ // The result of Arrays.asList() is mutable
+ otherWay.set(0, "FOO");
+ assertEquals("FOO", otherWay.get(0));
+
+ // But it can't grow
+ try {
+ otherWay.add("nope");
+ fail("no exception thrown");
+ } catch (UnsupportedOperationException expected) {
+ }
+
+ // And it can't shrink
+ try {
+ otherWay.remove(2);
+ fail("no exception thrown");
+ } catch (UnsupportedOperationException expected) {
+ }
+ }
+
+ public void testAsList1() throws Exception {
+ List<String> list = Lists.asList("foo", new String[] { "bar", "baz" });
+ checkFooBarBazList(list);
+ SerializableTester.reserializeAndAssert(list);
+ assertTrue(list instanceof RandomAccess);
+
+ new IteratorTester<String>(5, UNMODIFIABLE,
+ asList("foo", "bar", "baz"),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<String> newTargetIterator() {
+ return Lists.asList("foo", new String[] {"bar", "baz"}).iterator();
+ }
+ }.test();
+ }
+
+ private void checkFooBarBazList(List<String> list) {
+ assertContentsInOrder(list, "foo", "bar", "baz");
+ assertEquals(3, list.size());
+ assertIndexIsOutOfBounds(list, -1);
+ assertEquals("foo", list.get(0));
+ assertEquals("bar", list.get(1));
+ assertEquals("baz", list.get(2));
+ assertIndexIsOutOfBounds(list, 3);
+ }
+
+ public void testAsList1Small() throws Exception {
+ List<String> list = Lists.asList("foo", new String[0]);
+ assertContentsInOrder(list, "foo");
+ assertEquals(1, list.size());
+ assertIndexIsOutOfBounds(list, -1);
+ assertEquals("foo", list.get(0));
+ assertIndexIsOutOfBounds(list, 1);
+ assertTrue(list instanceof RandomAccess);
+
+ new IteratorTester<String>(3, UNMODIFIABLE, singletonList("foo"),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<String> newTargetIterator() {
+ return Lists.asList("foo", new String[0]).iterator();
+ }
+ }.test();
+ }
+
+ public void testAsList2() throws Exception {
+ List<String> list = Lists.asList("foo", "bar", new String[] { "baz" });
+ checkFooBarBazList(list);
+ assertTrue(list instanceof RandomAccess);
+
+ new IteratorTester<String>(5, UNMODIFIABLE, asList("foo", "bar",
+ "baz"), IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<String> newTargetIterator() {
+ return Lists.asList("foo", "bar", new String[] {"baz"}).iterator();
+ }
+ }.test();
+ }
+
+ public void testAsList2Small() throws Exception {
+ List<String> list = Lists.asList("foo", "bar", new String[0]);
+ assertContentsInOrder(list, "foo", "bar");
+ assertEquals(2, list.size());
+ assertIndexIsOutOfBounds(list, -1);
+ assertEquals("foo", list.get(0));
+ assertEquals("bar", list.get(1));
+ assertIndexIsOutOfBounds(list, 2);
+ SerializableTester.reserializeAndAssert(list);
+ assertTrue(list instanceof RandomAccess);
+
+ new IteratorTester<String>(5, UNMODIFIABLE, asList("foo", "bar"),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<String> newTargetIterator() {
+ return Lists.asList("foo", "bar", new String[0]).iterator();
+ }
+ }.test();
+ }
+
+ private static void assertIndexIsOutOfBounds(List<String> list, int index) {
+ try {
+ list.get(index);
+ fail();
+ } catch (IndexOutOfBoundsException expected) {
+ }
+ }
+
+ public void testTransformEqualityRandomAccess() {
+ List<String> list = Lists.transform(SOME_LIST, SOME_FUNCTION);
+ assertEquals(SOME_STRING_LIST, list);
+ SerializableTester.reserializeAndAssert(list);
+ }
+
+ public void testTransformEqualitySequential() {
+ List<String> list = Lists.transform(SOME_SEQUENTIAL_LIST, SOME_FUNCTION);
+ assertEquals(SOME_STRING_LIST, list);
+ SerializableTester.reserializeAndAssert(list);
+ }
+
+ public void testTransformHashCodeRandomAccess() {
+ List<String> list = Lists.transform(SOME_LIST, SOME_FUNCTION);
+ assertEquals(SOME_STRING_LIST.hashCode(), list.hashCode());
+ }
+
+ public void testTransformHashCodeSequential() {
+ List<String> list = Lists.transform(SOME_SEQUENTIAL_LIST, SOME_FUNCTION);
+ assertEquals(SOME_STRING_LIST.hashCode(), list.hashCode());
+ }
+
+ public void testTransformModifiableRandomAccess() {
+ List<Integer> fromList = Lists.newArrayList(SOME_LIST);
+ List<String> list = Lists.transform(fromList, SOME_FUNCTION);
+ assertTransformModifiable(list);
+ }
+
+ public void testTransformModifiableSequential() {
+ List<Integer> fromList = Lists.newLinkedList(SOME_SEQUENTIAL_LIST);
+ List<String> list = Lists.transform(fromList, SOME_FUNCTION);
+ assertTransformModifiable(list);
+ }
+
+ private static void assertTransformModifiable(List<String> list) {
+ try {
+ list.add("5");
+ fail("transformed list is addable");
+ } catch (UnsupportedOperationException expected) {}
+ list.remove(0);
+ assertEquals(asList("2", "3", "4"), list);
+ list.remove("3");
+ assertEquals(asList("2", "4"), list);
+ try {
+ list.set(0, "5");
+ fail("transformed list is setable");
+ } catch (UnsupportedOperationException expected) {}
+ list.clear();
+ assertEquals(Collections.emptyList(), list);
+ }
+
+ public void testTransformViewRandomAccess() {
+ List<Integer> fromList = Lists.newArrayList(SOME_LIST);
+ List<String> toList = Lists.transform(fromList, SOME_FUNCTION);
+ assertTransformView(fromList, toList);
+ }
+
+ public void testTransformViewSequential() {
+ List<Integer> fromList = Lists.newLinkedList(SOME_SEQUENTIAL_LIST);
+ List<String> toList = Lists.transform(fromList, SOME_FUNCTION);
+ assertTransformView(fromList, toList);
+ }
+
+ private static void assertTransformView(List<Integer> fromList,
+ List<String> toList) {
+ /* fromList modifications reflected in toList */
+ fromList.set(0, 5);
+ assertEquals(asList("5", "2", "3", "4"), toList);
+ fromList.add(6);
+ assertEquals(asList("5", "2", "3", "4", "6"), toList);
+ fromList.remove(Integer.valueOf(2));
+ assertEquals(asList("5", "3", "4", "6"), toList);
+ fromList.remove(2);
+ assertEquals(asList("5", "3", "6"), toList);
+
+ /* toList modifications reflected in fromList */
+ toList.remove(2);
+ assertEquals(asList(5, 3), fromList);
+ toList.remove("5");
+ assertEquals(asList(3), fromList);
+ toList.clear();
+ assertEquals(Collections.emptyList(), fromList);
+ }
+
+ public void testTransformRandomAccess() {
+ List<String> list = Lists.transform(SOME_LIST, SOME_FUNCTION);
+ assertTrue(list instanceof RandomAccess);
+ }
+
+ public void testTransformSequential() {
+ List<String> list = Lists.transform(SOME_SEQUENTIAL_LIST, SOME_FUNCTION);
+ assertFalse(list instanceof RandomAccess);
+ }
+
+ public void testTransformListIteratorRandomAccess() {
+ List<Integer> fromList = Lists.newArrayList(SOME_LIST);
+ List<String> list = Lists.transform(fromList, SOME_FUNCTION);
+ assertTransformListIterator(list);
+ }
+
+ public void testTransformListIteratorSequential() {
+ List<Integer> fromList = Lists.newLinkedList(SOME_SEQUENTIAL_LIST);
+ List<String> list = Lists.transform(fromList, SOME_FUNCTION);
+ assertTransformListIterator(list);
+ }
+
+ private static void assertTransformListIterator(List<String> list) {
+ ListIterator<String> iterator = list.listIterator(1);
+ assertEquals(1, iterator.nextIndex());
+ assertEquals("2", iterator.next());
+ assertEquals("3", iterator.next());
+ assertEquals("4", iterator.next());
+ assertEquals(4, iterator.nextIndex());
+ try {
+ iterator.next();
+ fail("did not detect end of list");
+ } catch (NoSuchElementException expected) {}
+ assertEquals(3, iterator.previousIndex());
+ assertEquals("4", iterator.previous());
+ assertEquals("3", iterator.previous());
+ assertEquals("2", iterator.previous());
+ assertTrue(iterator.hasPrevious());
+ assertEquals("1", iterator.previous());
+ assertFalse(iterator.hasPrevious());
+ assertEquals(-1, iterator.previousIndex());
+ try {
+ iterator.previous();
+ fail("did not detect beginning of list");
+ } catch (NoSuchElementException expected) {}
+ iterator.remove();
+ assertEquals(asList("2", "3", "4"), list);
+ assertFalse(list.isEmpty());
+
+ // An UnsupportedOperationException or IllegalStateException may occur.
+ try {
+ iterator.add("1");
+ fail("transformed list iterator is addable");
+ } catch (UnsupportedOperationException expected) {
+ } catch (IllegalStateException expected) {}
+ try {
+ iterator.set("1");
+ fail("transformed list iterator is settable");
+ } catch (UnsupportedOperationException expected) {
+ } catch (IllegalStateException expected) {}
+ }
+
+ public void testTransformIteratorRandomAccess() {
+ List<Integer> fromList = Lists.newArrayList(SOME_LIST);
+ List<String> list = Lists.transform(fromList, SOME_FUNCTION);
+ assertTransformIterator(list);
+ }
+
+ public void testTransformIteratorSequential() {
+ List<Integer> fromList = Lists.newLinkedList(SOME_SEQUENTIAL_LIST);
+ List<String> list = Lists.transform(fromList, SOME_FUNCTION);
+ assertTransformIterator(list);
+ }
+
+ /**
+ * We use this class to avoid the need to suppress generics checks with
+ * easy mock.
+ */
+ private interface IntegerList extends List<Integer> {}
+
+ /**
+ * This test depends on the fact that {@code AbstractSequentialList.iterator}
+ * transforms the {@code iterator()} call into a call on {@code
+ * listIterator(int)}. This is fine because the behavior is clearly
+ * documented so it's not expected to change.
+ */
+ public void testTransformedSequentialIterationUsesBackingListIterationOnly() {
+ List<Integer> randomAccessList = Lists.newArrayList(SOME_SEQUENTIAL_LIST);
+ ListIterator<Integer> sampleListIterator =
+ SOME_SEQUENTIAL_LIST.listIterator();
+ List<Integer> listMock = EasyMock.createMock(IntegerList.class);
+ EasyMock.expect(listMock.listIterator(0)).andReturn(sampleListIterator);
+ EasyMock.replay(listMock);
+ List<String> transform = Lists.transform(listMock, SOME_FUNCTION);
+ assertTrue(Iterables.elementsEqual(
+ transform, Lists.transform(randomAccessList, SOME_FUNCTION)));
+ EasyMock.verify(listMock);
+ }
+
+ private static void assertTransformIterator(List<String> list) {
+ Iterator<String> iterator = list.iterator();
+ assertTrue(iterator.hasNext());
+ assertEquals("1", iterator.next());
+ assertTrue(iterator.hasNext());
+ assertEquals("2", iterator.next());
+ assertTrue(iterator.hasNext());
+ assertEquals("3", iterator.next());
+ assertTrue(iterator.hasNext());
+ assertEquals("4", iterator.next());
+ assertFalse(iterator.hasNext());
+ try {
+ iterator.next();
+ fail("did not detect end of list");
+ } catch (NoSuchElementException expected) {}
+ iterator.remove();
+ assertEquals(asList("1", "2", "3"), list);
+ assertFalse(iterator.hasNext());
+ }
+
+ public void testPartition_badSize() {
+ List<Integer> source = Collections.singletonList(1);
+ try {
+ Lists.partition(source, 0);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ public void testPartition_empty() {
+ List<Integer> source = Collections.emptyList();
+ List<List<Integer>> partitions = Lists.partition(source, 1);
+ assertTrue(partitions.isEmpty());
+ assertEquals(0, partitions.size());
+ }
+
+ public void testPartition_1_1() {
+ List<Integer> source = Collections.singletonList(1);
+ List<List<Integer>> partitions = Lists.partition(source, 1);
+ assertEquals(1, partitions.size());
+ assertEquals(Collections.singletonList(1), partitions.get(0));
+ }
+
+ public void testPartition_1_2() {
+ List<Integer> source = Collections.singletonList(1);
+ List<List<Integer>> partitions = Lists.partition(source, 2);
+ assertEquals(1, partitions.size());
+ assertEquals(Collections.singletonList(1), partitions.get(0));
+ }
+
+ public void testPartition_2_1() {
+ List<Integer> source = asList(1, 2);
+ List<List<Integer>> partitions = Lists.partition(source, 1);
+ assertEquals(2, partitions.size());
+ assertEquals(Collections.singletonList(1), partitions.get(0));
+ assertEquals(Collections.singletonList(2), partitions.get(1));
+ }
+
+ public void testPartition_3_2() {
+ List<Integer> source = asList(1, 2, 3);
+ List<List<Integer>> partitions = Lists.partition(source, 2);
+ assertEquals(2, partitions.size());
+ assertEquals(asList(1, 2), partitions.get(0));
+ assertEquals(asList(3), partitions.get(1));
+ }
+
+ public void testPartitionRandomAccessTrue() {
+ List<Integer> source = asList(1, 2, 3);
+ List<List<Integer>> partitions = Lists.partition(source, 2);
+ assertTrue(partitions instanceof RandomAccess);
+ assertTrue(partitions.get(0) instanceof RandomAccess);
+ assertTrue(partitions.get(1) instanceof RandomAccess);
+ }
+
+ public void testPartitionRandomAccessFalse() {
+ List<Integer> source = Lists.newLinkedList(asList(1, 2, 3));
+ List<List<Integer>> partitions = Lists.partition(source, 2);
+ assertFalse(partitions instanceof RandomAccess);
+ assertFalse(partitions.get(0) instanceof RandomAccess);
+ assertFalse(partitions.get(1) instanceof RandomAccess);
+ }
+
+ // TODO: use the ListTestSuiteBuilder
+
+ public void testPartition_view() {
+ List<Integer> list = asList(1, 2, 3);
+ List<List<Integer>> partitions = Lists.partition(list, 3);
+
+ // Changes before the partition is retrieved are reflected
+ list.set(0, 3);
+
+ Iterator<List<Integer>> iterator = partitions.iterator();
+
+ // Changes before the partition is retrieved are reflected
+ list.set(1, 4);
+
+ List<Integer> first = iterator.next();
+
+ // Changes after are too (unlike Iterables.partition)
+ list.set(2, 5);
+
+ assertEquals(asList(3, 4, 5), first);
+
+ // Changes to a sublist also write through to the original list
+ first.set(1, 6);
+ assertEquals(asList(3, 6, 5), list);
+ }
+}
diff --git a/test/com/google/common/collect/MapMakerTestSuite.java b/test/com/google/common/collect/MapMakerTestSuite.java
new file mode 100644
index 0000000..2999533
--- /dev/null
+++ b/test/com/google/common/collect/MapMakerTestSuite.java
@@ -0,0 +1,1219 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
+import com.google.common.collect.CustomConcurrentHashMap.Impl;
+import com.google.common.collect.testing.Helpers;
+import com.google.common.testutils.SerializableTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.io.Serializable;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import static java.util.concurrent.TimeUnit.NANOSECONDS;
+import static java.util.concurrent.TimeUnit.SECONDS;
+
+/**
+ * Unit tests for MapMaker. Also less directly serves as the test suite for
+ * CustomConcurrentHashMap.
+ */
+public class MapMakerTestSuite extends TestCase {
+
+ public static class MakerTest extends TestCase {
+ public void testSizingDefaults() {
+ Impl<?, ?, ?> map = makeCustomMap(new MapMaker());
+ assertEquals(16, map.segments.length); // concurrency level
+ assertEquals(1, map.segments[0].table.length()); // capacity / conc level
+ }
+
+ public void testInitialCapacity_small() {
+ MapMaker maker = new MapMaker().initialCapacity(17);
+ Impl<?, ?, ?> map = makeCustomMap(maker);
+
+ assertEquals(2, map.segments[0].table.length());
+ }
+
+ public void testInitialCapacity_smallest() {
+ MapMaker maker = new MapMaker().initialCapacity(0);
+ Impl<?, ?, ?> map = makeCustomMap(maker);
+
+ // 1 is as low as it goes, not 0. it feels dirty to know this/test this.
+ assertEquals(1, map.segments[0].table.length());
+ }
+
+ public void testInitialCapacity_large() {
+ new MapMaker().initialCapacity(Integer.MAX_VALUE);
+ // that the maker didn't blow up is enough;
+ // don't actually create this monster!
+ }
+
+ public void testInitialCapacity_negative() {
+ MapMaker maker = new MapMaker();
+ try {
+ maker.initialCapacity(-1);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ public void testInitialCapacity_setTwice() {
+ MapMaker maker = new MapMaker().initialCapacity(16);
+ try {
+ // even to the same value is not allowed
+ maker.initialCapacity(16);
+ fail();
+ } catch (IllegalStateException expected) {
+ }
+ }
+
+ public void testConcurrencyLevel_small() {
+ MapMaker maker = new MapMaker().concurrencyLevel(1);
+ Impl<?, ?, ?> map = makeCustomMap(maker);
+ assertEquals(1, map.segments.length);
+ }
+
+ public void testConcurrencyLevel_large() {
+ new MapMaker().concurrencyLevel(Integer.MAX_VALUE);
+ // don't actually build this beast
+ }
+
+ public void testConcurrencyLevel_zero() {
+ MapMaker maker = new MapMaker();
+ try {
+ maker.concurrencyLevel(0);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ public void testConcurrencyLevel_setTwice() {
+ MapMaker maker = new MapMaker().concurrencyLevel(16);
+ try {
+ // even to the same value is not allowed
+ maker.concurrencyLevel(16);
+ fail();
+ } catch (IllegalStateException expected) {
+ }
+ }
+
+ public void testKeyStrengthSetTwice() {
+ MapMaker maker1 = new MapMaker().weakKeys();
+ try {
+ maker1.weakKeys();
+ fail();
+ } catch (IllegalStateException expected) {
+ }
+
+ MapMaker maker2 = new MapMaker().softKeys();
+ try {
+ maker2.softKeys();
+ fail();
+ } catch (IllegalStateException expected) {
+ }
+
+ MapMaker maker3 = new MapMaker().weakKeys();
+ try {
+ maker3.softKeys();
+ fail();
+ } catch (IllegalStateException expected) {
+ }
+ }
+
+ public void testValueStrengthSetTwice() {
+ MapMaker maker1 = new MapMaker().weakValues();
+ try {
+ maker1.weakValues();
+ fail();
+ } catch (IllegalStateException expected) {
+ }
+
+ MapMaker maker2 = new MapMaker().softValues();
+ try {
+ maker2.softValues();
+ fail();
+ } catch (IllegalStateException expected) {
+ }
+
+ MapMaker maker3 = new MapMaker().weakValues();
+ try {
+ maker3.softValues();
+ fail();
+ } catch (IllegalStateException expected) {
+ }
+ }
+
+ public void testExpiration_small() {
+ new MapMaker().expiration(1, NANOSECONDS);
+ // well, it didn't blow up.
+ }
+
+ public void testExpiration_setTwice() {
+ MapMaker maker = new MapMaker().expiration(3600, SECONDS);
+ try {
+ // even to the same value is not allowed
+ maker.expiration(3600, SECONDS);
+ fail();
+ } catch (IllegalStateException expected) {
+ }
+ }
+
+ public void testReturnsPlainConcurrentHashMapWhenPossible() {
+ Map<?, ?> map = new MapMaker()
+ .concurrencyLevel(5)
+ .initialCapacity(5)
+ .makeMap();
+ assertTrue(map instanceof ConcurrentHashMap);
+ }
+
+ private static Impl<?, ?, ?> makeCustomMap(MapMaker maker) {
+ // Use makeComputingMap() to force it to return CCHM.Impl, not
+ // ConcurrentHashMap.
+ return (Impl<?, ?, ?>) maker.makeComputingMap(Functions.identity());
+ }
+ }
+
+ public static class RecursiveComputationTest extends TestCase {
+
+ Function<Integer, String> recursiveComputer
+ = new Function<Integer, String>() {
+ public String apply(Integer key) {
+ if (key > 0) {
+ return key + ", " + recursiveMap.get(key - 1);
+ } else {
+ return "0";
+ }
+ }
+ };
+
+ ConcurrentMap<Integer, String> recursiveMap = new MapMaker()
+ .weakKeys()
+ .weakValues()
+ .makeComputingMap(recursiveComputer);
+
+ public void testRecursiveComputation() {
+ assertEquals("3, 2, 1, 0", recursiveMap.get(3));
+ }
+ }
+
+ /**
+ * Tests for basic map functionality.
+ */
+ public static class ReferenceMapTest extends TestCase {
+
+ public void testValueCleanupWithWeakKey() {
+ ConcurrentMap<Object, Object> map =
+ new MapMaker().weakKeys().makeMap();
+ map.put(new Object(), new Object());
+ assertCleanup(map);
+ }
+
+ public void testValueCleanupWithSoftKey() {
+ ConcurrentMap<Object, Object> map =
+ new MapMaker().softKeys().makeMap();
+ map.put(new Object(), new Object());
+ assertCleanup(map);
+ }
+
+ public void testKeyCleanupWithWeakValue() {
+ ConcurrentMap<Object, Object> map =
+ new MapMaker().weakValues().makeMap();
+ map.put(new Object(), new Object());
+ assertCleanup(map);
+ }
+
+ public void testKeyCleanupWithSoftValue() {
+ ConcurrentMap<Object, Object> map =
+ new MapMaker().softValues().makeMap();
+ map.put(new Object(), new Object());
+ assertCleanup(map);
+ }
+
+ public void testInternedValueCleanupWithWeakKey() {
+ ConcurrentMap<Object, Object> map =
+ new MapMaker().weakKeys().makeMap();
+ map.put(new Integer(5), "foo");
+ assertCleanup(map);
+ }
+
+ public void testInternedValueCleanupWithSoftKey() {
+ ConcurrentMap<Object, Object> map =
+ new MapMaker().softKeys().makeMap();
+ map.put(new Integer(5), "foo");
+ assertCleanup(map);
+ }
+
+ public void testInternedKeyCleanupWithWeakValue() {
+ ConcurrentMap<Object, Object> map =
+ new MapMaker().weakValues().makeMap();
+ map.put(5, new String("foo"));
+ assertCleanup(map);
+ }
+
+ public void testInternedKeyCleanupWithSoftValue() {
+ ConcurrentMap<Object, Object> map =
+ new MapMaker().softValues().makeMap();
+ map.put(5, new String("foo"));
+ assertCleanup(map);
+ }
+
+ public void testReplace() {
+ ConcurrentMap<Object, Object> map =
+ new MapMaker().makeMap();
+ assertNull(map.replace("one", 1));
+ }
+
+ private static void assertCleanup(ConcurrentMap<?, ?> map) {
+ assertEquals(1, map.size());
+
+ // wait up to 5s
+ byte[] filler = new byte[1024];
+ for (int i = 0; i < 500; i++) {
+ System.gc();
+ if (map.isEmpty()) {
+ return;
+ }
+ try {
+ Thread.sleep(10);
+ } catch (InterruptedException e) { /* ignore */ }
+ try {
+ // Fill up heap so soft references get cleared.
+ filler = new byte[filler.length * 2];
+ } catch (OutOfMemoryError e) {}
+ }
+
+ fail();
+ }
+
+ public void testWeakKeyIdentityLookup() {
+ ConcurrentMap<Integer, String> map =
+ new MapMaker().weakKeys().makeMap();
+ Integer key1 = new Integer(12357);
+ Integer key2 = new Integer(12357);
+ map.put(key1, "a");
+ assertTrue(map.containsKey(key1));
+ assertFalse(map.containsKey(key2));
+ }
+
+ public void testSoftKeyIdentityLookup() {
+ ConcurrentMap<Integer, String> map =
+ new MapMaker().softKeys().makeMap();
+ Integer key1 = new Integer(12357);
+ Integer key2 = new Integer(12357);
+ map.put(key1, "a");
+ assertTrue(map.containsKey(key1));
+ assertFalse(map.containsKey(key2));
+ }
+
+ public void testWeakValueIdentityLookup() {
+ ConcurrentMap<String, Integer> map =
+ new MapMaker().weakValues().makeMap();
+ Integer value1 = new Integer(12357);
+ Integer value2 = new Integer(12357);
+ map.put("a", value1);
+ assertTrue(map.containsValue(value1));
+ assertFalse(map.containsValue(value2));
+ }
+
+ public void testSoftValueIdentityLookup() {
+ ConcurrentMap<String, Integer> map =
+ new MapMaker().softValues().makeMap();
+ Integer value1 = new Integer(12357);
+ Integer value2 = new Integer(12357);
+ map.put("a", value1);
+ assertTrue(map.containsValue(value1));
+ assertFalse(map.containsValue(value2));
+ }
+
+ public void testWeakKeyEntrySetRemove() {
+ ConcurrentMap<Integer, String> map =
+ new MapMaker().weakKeys().makeMap();
+ Integer key1 = new Integer(12357);
+ Integer key2 = new Integer(12357);
+ map.put(key1, "a");
+ assertFalse(map.entrySet().remove(Helpers.mapEntry(key2, "a")));
+ assertEquals(1, map.size());
+ assertTrue(map.entrySet().remove(Helpers.mapEntry(key1, "a")));
+ assertEquals(0, map.size());
+ }
+
+ public void testEntrySetIteratorRemove() {
+ ConcurrentMap<String, Integer> map =
+ new MapMaker().makeMap();
+ map.put("foo", 1);
+ map.put("bar", 2);
+ assertEquals(2, map.size());
+ Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
+ try {
+ iterator.remove();
+ fail();
+ } catch (IllegalStateException expected) {}
+ iterator.next();
+ iterator.remove();
+ assertEquals(1, map.size());
+ try {
+ iterator.remove();
+ fail();
+ } catch (IllegalStateException expected) {}
+ iterator.next();
+ iterator.remove();
+ assertEquals(0, map.size());
+ }
+
+ public void testSerialization() {
+ ConcurrentMap<String, Integer> map =
+ new MapMaker().makeMap();
+ map.put("one", 1);
+ SerializableTester.reserializeAndAssert(map);
+
+ map = new MapMaker().weakKeys().makeMap();
+ map.put("one", 1);
+ SerializableTester.reserialize(map);
+ }
+ }
+
+ /**
+ * Tests for computing functionality.
+ */
+ public static class ComputingTest extends TestCase {
+
+ public void testComputerThatReturnsNull() {
+ ConcurrentMap<Integer, String> map = new MapMaker()
+ .makeComputingMap(new Function<Integer, String>() {
+ public String apply(Integer key) {
+ return null;
+ }
+ });
+ try {
+ map.get(1);
+ fail();
+ } catch (NullPointerException e) { /* expected */ }
+ }
+
+ public void testRecomputeAfterReclamation()
+ throws InterruptedException {
+ ConcurrentMap<Integer, String> map = new MapMaker()
+ .weakValues()
+ .makeComputingMap(new Function<Integer, String>() {
+ @SuppressWarnings("RedundantStringConstructorCall")
+ public String apply(Integer key) {
+ return new String("one");
+ }
+ });
+
+ for (int i = 0; i < 10; i++) {
+ // The entry should get garbage collected and recomputed.
+ assertEquals("on iteration " + i, "one", map.get(1));
+ Thread.sleep(i);
+ System.gc();
+ }
+ }
+
+ public void testRuntimeException() {
+ final RuntimeException e = new RuntimeException();
+
+ ConcurrentMap<Object, Object> map = new MapMaker().makeComputingMap(
+ new Function<Object, Object>() {
+ public Object apply(Object from) {
+ throw e;
+ }
+ });
+
+ try {
+ map.get(new Object());
+ fail();
+ } catch (ComputationException ce) {
+ assertSame(e, ce.getCause());
+ }
+ }
+
+ public void testComputationExceptionWithCause() {
+ final Exception cause = new Exception();
+ final ComputationException e = new ComputationException(cause);
+
+ ConcurrentMap<Object, Object> map = new MapMaker().makeComputingMap(
+ new Function<Object, Object>() {
+ public Object apply(Object from) {
+ throw e;
+ }
+ });
+
+ try {
+ map.get(new Object());
+ fail();
+ } catch (ComputationException ce) {
+ assertSame(e, ce);
+ assertSame(cause, ce.getCause());
+ }
+ }
+
+ public void testComputationExceptionWithoutCause() {
+ final ComputationException e = new ComputationException(null);
+
+ ConcurrentMap<Object, Object> map = new MapMaker().makeComputingMap(
+ new Function<Object, Object>() {
+ public Object apply(Object from) {
+ throw e;
+ }
+ });
+
+ try {
+ map.get(new Object());
+ fail();
+ } catch (ComputationException ce) {
+ assertSame(e, ce);
+ assertNull(ce.getCause());
+ }
+ }
+
+ public void testSleepConcurrency() throws InterruptedException {
+ ConcurrentMap<String, Integer> cache = new MapMaker()
+ .weakKeys().weakValues().makeComputingMap(new SleepFunction());
+ assertConcurrency(cache, false);
+ }
+
+ public void testBusyConcurrency() throws InterruptedException {
+ ConcurrentMap<String, Integer> cache = new MapMaker()
+ .weakKeys().weakValues().makeComputingMap(new BusyFunction());
+ assertConcurrency(cache, false);
+ }
+
+ public void testFastConcurrency() throws InterruptedException {
+ ConcurrentMap<String, Integer> cache = new MapMaker()
+ .weakKeys().weakValues().makeComputingMap(new SomeFunction());
+ assertConcurrency(cache, false);
+ }
+
+ public void testSleepCanonical() throws InterruptedException {
+ ConcurrentMap<String, Integer> cache = new MapMaker()
+ .softValues().makeComputingMap(new SleepFunction());
+ assertConcurrency(cache, true);
+ }
+
+ public void testBusyCanonical() throws InterruptedException {
+ ConcurrentMap<String, Integer> cache = new MapMaker()
+ .softValues().makeComputingMap(new BusyFunction());
+ assertConcurrency(cache, true);
+ }
+
+ public void testFastCanonical() throws InterruptedException {
+ ConcurrentMap<String, Integer> cache = new MapMaker()
+ .softValues().makeComputingMap(new SomeFunction());
+ assertConcurrency(cache, true);
+ }
+
+ private static void assertConcurrency(
+ final ConcurrentMap<String, Integer> cache,
+ final boolean simulateAliasing) throws InterruptedException {
+ final int n = 20;
+ final CountDownLatch startSignal = new CountDownLatch(1);
+ final CountDownLatch doneSignal = new CountDownLatch(n);
+ for (int i = 0; i < n; i++) {
+ new Thread() {
+ @Override public void run() {
+ try {
+ startSignal.await();
+ for (int j = 0; j < n; j++) {
+ cache.get(simulateAliasing ? new String("foo") : "foo");
+ }
+ doneSignal.countDown();
+ } catch (InterruptedException ignored) {}
+ }
+ }.start();
+ }
+
+ startSignal.countDown();
+ doneSignal.await();
+ assertEquals(Integer.valueOf(1), cache.get("foo"));
+ assertEquals(Integer.valueOf(2), cache.get("bar"));
+ }
+
+ private static class SomeFunction implements Function<String, Integer> {
+ private int numApplies = 0;
+ public Integer apply(String s) {
+ return ++numApplies;
+ }
+ }
+
+ private static class SleepFunction implements Function<String, Integer> {
+ private int numApplies = 0;
+ public Integer apply(String s) {
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ return ++numApplies;
+ }
+ }
+
+ private static class BusyFunction implements Function<String, Integer> {
+ private int numApplies = 0;
+ public Integer apply(String s) {
+ for (int i = 0; i < 1000; i++) {
+ Math.sqrt(i);
+ }
+ return ++numApplies;
+ }
+ }
+ }
+
+ /**
+ * Tests combinations of key and value reference types.
+ */
+ public static class ReferenceCombinationTestSuite extends TestCase {
+
+ interface BuilderOption {
+ void applyTo(MapMaker maker);
+ }
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite();
+
+ BuilderOption[] keyOptions = {
+ new BuilderOption() {
+ public void applyTo(MapMaker maker) {
+ // strong keys
+ }
+ @Override public String toString() {
+ return "Strong";
+ }
+ },
+ new BuilderOption() {
+ public void applyTo(MapMaker maker) {
+ maker.weakKeys();
+ }
+ @Override public String toString() {
+ return "Weak";
+ }
+ },
+ new BuilderOption() {
+ public void applyTo(MapMaker maker) {
+ maker.softKeys();
+ }
+ @Override public String toString() {
+ return "Soft";
+ }
+ },
+ };
+
+ BuilderOption[] valueOptions = {
+ new BuilderOption() {
+ public void applyTo(MapMaker maker) {
+ // strong values
+ }
+ @Override public String toString() {
+ return "Strong";
+ }
+ },
+ new BuilderOption() {
+ public void applyTo(MapMaker maker) {
+ maker.weakValues();
+ }
+ @Override public String toString() {
+ return "Weak";
+ }
+ },
+ new BuilderOption() {
+ public void applyTo(MapMaker maker) {
+ maker.softValues();
+ }
+ @Override public String toString() {
+ return "Soft";
+ }
+ },
+ };
+
+ // create test cases for each key and value type.
+ for (Method method : MapTest.class.getMethods()) {
+ String name = method.getName();
+ if (name.startsWith("test")) {
+ for (BuilderOption keyOption : keyOptions) {
+ for (BuilderOption valueOption : valueOptions) {
+ suite.addTest(new MapTest(name, keyOption, valueOption));
+ }
+ }
+ }
+ }
+
+ return suite;
+ }
+
+ public static class MapTest extends TestCase {
+
+ final BuilderOption keyOption;
+ final BuilderOption valueOption;
+
+ public MapTest(String name,
+ BuilderOption keyOption,
+ BuilderOption valueOption) {
+ super(name);
+ this.keyOption = keyOption;
+ this.valueOption = valueOption;
+ }
+
+ @Override public String getName() {
+ return super.getName() + "For" + keyOption + valueOption;
+ }
+
+ MapMaker newBuilder() {
+ MapMaker maker = new MapMaker();
+ keyOption.applyTo(maker);
+ valueOption.applyTo(maker);
+ return maker;
+ }
+
+ <K, V> ConcurrentMap<K, V> newMap() {
+ MapMaker maker = new MapMaker();
+ keyOption.applyTo(maker);
+ valueOption.applyTo(maker);
+ return maker.makeMap();
+ }
+
+ public void testContainsKey() {
+ ConcurrentMap<Object, String> map = newMap();
+ Object k = "key";
+ map.put(k, "value");
+ assertTrue(map.containsKey(k));
+ }
+
+ public void testClear() {
+ ConcurrentMap<String, String> map = newMap();
+ String k = "key";
+ map.put(k, "value");
+ assertFalse(map.isEmpty());
+ map.clear();
+ assertTrue(map.isEmpty());
+ assertNull(map.get(k));
+ }
+
+ public void testKeySet() {
+ ConcurrentMap<String, String> map = newMap();
+ map.put("a", "foo");
+ map.put("b", "foo");
+ Set<String> expected = set("a", "b");
+ assertEquals(expected, map.keySet());
+ }
+
+ public void testValues() {
+ ConcurrentMap<String, String> map = newMap();
+ map.put("a", "1");
+ map.put("b", "2");
+ Set<String> expected = set("1", "2");
+ Set<String> actual = new HashSet<String>();
+ actual.addAll(map.values());
+ assertEquals(expected, actual);
+ }
+
+ public void testPutIfAbsent() {
+ ConcurrentMap<String, String> map = newMap();
+ map.putIfAbsent("a", "1");
+ assertEquals("1", map.get("a"));
+ map.putIfAbsent("a", "2");
+ assertEquals("1", map.get("a"));
+ }
+
+ public void testReplace() {
+ ConcurrentMap<String, String> map = newMap();
+ map.put("a", "1");
+ map.replace("a", "2", "2");
+ assertEquals("1", map.get("a"));
+ map.replace("a", "1", "2");
+ assertEquals("2", map.get("a"));
+ }
+
+ public void testContainsValue() {
+ ConcurrentMap<String, Object> map = newMap();
+ Object v = "value";
+ map.put("key", v);
+ assertTrue(map.containsValue(v));
+ }
+
+ public void testEntrySet() {
+ final ConcurrentMap<String, String> map = newMap();
+ map.put("a", "1");
+ map.put("b", "2");
+ @SuppressWarnings("unchecked")
+ Set<Map.Entry<String, String>> expected
+ = set(Helpers.mapEntry("a", "1"), Helpers.mapEntry("b", "2"));
+ assertEquals(expected, map.entrySet());
+ }
+
+ public void testPutAll() {
+ ConcurrentMap<Object, Object> map = newMap();
+ Object k = "key";
+ Object v = "value";
+ map.putAll(Collections.singletonMap(k, v));
+ assertSame(v, map.get(k));
+ }
+
+ public void testRemove() {
+ ConcurrentMap<Object, String> map = newMap();
+ Object k = "key";
+ map.put(k, "value");
+ map.remove(k);
+ assertFalse(map.containsKey(k));
+ }
+
+ public void testPutGet() {
+ final Object k = new Object();
+ final Object v = new Object();
+ ConcurrentMap<Object, Object> map = newMap();
+ map.put(k, v);
+ assertEquals(1, map.size());
+ assertSame(v, map.get(k));
+ assertEquals(1, map.size());
+ assertNull(map.get(new Object()));
+ }
+
+ public void testCompute() {
+ final Object k = new Object();
+ final Object v = new Object();
+ ConcurrentMap<?, ?> map = newBuilder().makeComputingMap(
+ new Function<Object, Object>() {
+ public Object apply(Object key) {
+ return key == k ? v : null;
+ }
+ });
+
+ assertEquals(0, map.size());
+ assertSame(v, map.get(k));
+ assertSame(v, map.get(k));
+ assertEquals(1, map.size());
+
+ try {
+ map.get(new Object());
+ fail();
+ } catch (NullPointerException e) { /* expected */ }
+ assertEquals(1, map.size());
+ }
+
+ public void testReferenceMapSerialization() {
+ Map<Key, Value> original = newMap();
+ original.put(Key.FOO, Value.FOO);
+ @SuppressWarnings("unchecked")
+ Map<Key, Value> map = SerializableTester.reserialize(original);
+ map.put(Key.BAR, Value.BAR);
+ assertSame(Value.FOO, map.get(Key.FOO));
+ assertSame(Value.BAR, map.get(Key.BAR));
+ assertNull(map.get(Key.TEE));
+ }
+
+ static class MockFunction implements Function<Object, Object>,
+ Serializable {
+ int count;
+ public Object apply(Object key) {
+ count++;
+ return Value.valueOf(key.toString());
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ public void testReferenceCacheSerialization() {
+ MockFunction f = new MockFunction();
+ ConcurrentMap<Object, Object> map = newBuilder().makeComputingMap(f);
+ assertSame(Value.FOO, map.get(Key.FOO));
+ assertSame(Value.BAR, map.get(Key.BAR));
+ map = SerializableTester.reserialize(map);
+ assertSame(Value.FOO, map.get(Key.FOO));
+ assertSame(Value.BAR, map.get(Key.BAR));
+ assertSame(Value.TEE, map.get(Key.TEE));
+ assertEquals(2, f.count);
+ }
+ }
+
+ /**
+ * Enums conveniently maintain instance identity across serialization.
+ */
+ enum Key {
+ FOO, BAR, TEE
+ }
+
+ enum Value {
+ FOO, BAR, TEE
+ }
+ }
+
+ public static class ExpiringReferenceMapTest extends TestCase {
+
+ private static final long EXPIRING_TIME = 10;
+ private static final int VALUE_PREFIX = 12345;
+ private static final String KEY_PREFIX = "key prefix:";
+
+ Timer oldTimer;
+ final List<TimerTask> tasks = new ArrayList<TimerTask>();
+
+ @Override protected void setUp() throws Exception {
+ oldTimer = ExpirationTimer.instance;
+ ExpirationTimer.instance = new Timer() {
+ @Override public void schedule(TimerTask task, long delay) {
+ tasks.add(task);
+ }
+ };
+ }
+
+ @Override protected void tearDown() throws Exception {
+ ExpirationTimer.instance = oldTimer;
+ }
+
+ private void runTasks() {
+ for (TimerTask task : tasks) {
+ task.run();
+ }
+ tasks.clear();
+ }
+
+ public void testExpiringPut() {
+ ConcurrentMap<String, Integer> map = new MapMaker()
+ .expiration(EXPIRING_TIME, TimeUnit.MILLISECONDS).makeMap();
+
+ for (int i = 0; i < 10; i++) {
+ map.put(KEY_PREFIX + i, VALUE_PREFIX + i);
+ assertEquals(Integer.valueOf(VALUE_PREFIX + i),
+ map.get(KEY_PREFIX + i));
+ }
+
+ runTasks();
+
+ assertEquals("Map must be empty by now", 0, map.size());
+ }
+
+ public void testExpiringPutIfAbsent() {
+ ConcurrentMap<String, Integer> map = new MapMaker()
+ .expiration(EXPIRING_TIME, TimeUnit.MILLISECONDS).makeMap();
+
+ for (int i = 0; i < 10; i++) {
+ map.putIfAbsent(KEY_PREFIX + i, VALUE_PREFIX + i);
+ assertEquals(Integer.valueOf(VALUE_PREFIX + i),
+ map.get(KEY_PREFIX + i));
+ }
+
+ runTasks();
+
+ assertEquals("Map must be empty by now", 0, map.size());
+ }
+
+ public void testExpiringGetForSoft() {
+ ConcurrentMap<String, Integer> map = new MapMaker()
+ .softValues().expiration(EXPIRING_TIME, TimeUnit.MILLISECONDS)
+ .makeMap();
+
+ runExpirationTest(map);
+ }
+
+ public void testExpiringGetForStrong() {
+ ConcurrentMap<String, Integer> map = new MapMaker()
+ .expiration(EXPIRING_TIME, TimeUnit.MILLISECONDS).makeMap();
+
+ runExpirationTest(map);
+ }
+
+ public void testRemovalSchedulerForStrong() {
+ ConcurrentMap<String, Integer> map = new MapMaker()
+ .expiration(EXPIRING_TIME, TimeUnit.MILLISECONDS).makeMap();
+
+ runRemovalScheduler(map, KEY_PREFIX, EXPIRING_TIME);
+ }
+
+ public void testRemovalSchedulerForSoft() {
+ ConcurrentMap<String, Integer> map = new MapMaker()
+ .softValues().expiration(EXPIRING_TIME, TimeUnit.MILLISECONDS)
+ .makeMap();
+
+ runRemovalScheduler(map, KEY_PREFIX, EXPIRING_TIME);
+ }
+
+ private void runExpirationTest(ConcurrentMap<String, Integer> map) {
+ for (int i = 0; i < 10; i++) {
+ map.put(KEY_PREFIX + i, VALUE_PREFIX + i);
+ assertEquals(Integer.valueOf(VALUE_PREFIX + i),
+ map.get(KEY_PREFIX + i));
+ }
+
+ for (int i = 0; i < 10; i++) {
+ assertEquals(Integer.valueOf(i + VALUE_PREFIX),
+ map.get(KEY_PREFIX + i));
+ }
+
+ runTasks();
+
+ for (int i = 0; i < 10; i++) {
+ assertEquals(null, map.get(KEY_PREFIX + i));
+ }
+ }
+
+ private void runRemovalScheduler(ConcurrentMap<String, Integer> map,
+ String keyPrefix, long ttl) {
+
+ int shift1 = 10 + VALUE_PREFIX;
+ // fill with initial data
+ for (int i = 0; i < 10; i++) {
+ map.put(keyPrefix + i, i + shift1);
+ assertEquals(Integer.valueOf(i + shift1), map.get(keyPrefix + i));
+ }
+
+ // wait, so that entries have just 10 ms to live
+ try {
+ Thread.sleep(ttl * 2 / 3);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+
+ int shift2 = shift1 + 10;
+ // fill with new data - has to live for 20 ms more
+ for (int i = 0; i < 10; i++) {
+ map.put(keyPrefix + i, i + shift2);
+ assertEquals("key: " + keyPrefix + i,
+ Integer.valueOf(i + shift2), map.get(keyPrefix + i));
+ }
+
+ // old timeouts must expire after this wait
+ try {
+ Thread.sleep(ttl * 2 / 3);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+
+ // check that new values are still there - they still have 10 ms to live
+ for (int i = 0; i < 10; i++) {
+ assertEquals(Integer.valueOf(i + shift2), map.get(keyPrefix + i));
+ }
+ }
+ }
+
+ public static class ExpiringComputingReferenceMapTest extends TestCase {
+
+ static final long VERY_LONG = 100000L;
+ static final String KEY_PREFIX = "THIS IS AN ARBITRARY KEY PREFIX";
+ static final int VALUE_SUFFIX = 77777;
+
+ Timer oldTimer;
+ final List<TimerTask> tasks = new ArrayList<TimerTask>();
+
+ @Override protected void setUp() throws Exception {
+ oldTimer = ExpirationTimer.instance;
+ ExpirationTimer.instance = new Timer() {
+ @Override public void schedule(TimerTask task, long delay) {
+ tasks.add(task);
+ }
+ };
+ }
+
+ @Override protected void tearDown() throws Exception {
+ ExpirationTimer.instance = oldTimer;
+ }
+
+ private void runTasks() {
+ for (TimerTask task : tasks) {
+ task.run();
+ }
+ tasks.clear();
+ }
+
+ public void testExpiringPut() {
+ ConcurrentMap<String, Integer> cache = new MapMaker()
+ .expiration(50, TimeUnit.MILLISECONDS)
+ .makeComputingMap(WATCHED_CREATOR);
+
+ for (int i = 0; i < 10; i++) {
+ cache.put(KEY_PREFIX + i, i + VALUE_SUFFIX);
+ assertEquals(Integer.valueOf(i + VALUE_SUFFIX),
+ cache.get(KEY_PREFIX + i));
+ }
+
+ for (int i = 0; i < 10; i++) {
+ WATCHED_CREATOR.reset();
+ assertEquals(Integer.valueOf(i + VALUE_SUFFIX),
+ cache.get(KEY_PREFIX + i));
+ assertFalse("Creator should not have been called @#" + i,
+ WATCHED_CREATOR.wasCalled());
+ }
+
+ runTasks();
+
+ assertEquals("Cache must be empty by now", 0, cache.size());
+ }
+
+ public void testExpiringPutIfAbsent() {
+ ConcurrentMap<String, Integer> cache = new MapMaker()
+ .expiration(50, TimeUnit.MILLISECONDS)
+ .makeComputingMap(WATCHED_CREATOR);
+
+ for (int i = 0; i < 10; i++) {
+ cache.putIfAbsent(KEY_PREFIX + i, i + VALUE_SUFFIX);
+ assertEquals(Integer.valueOf(i + VALUE_SUFFIX),
+ cache.get(KEY_PREFIX + i));
+ }
+
+ runTasks();
+
+ assertEquals("Cache must be empty by now", 0, cache.size());
+ }
+
+ public void testExpiringGetForSoft() {
+ ConcurrentMap<String, Integer> cache = new MapMaker()
+ .expiration(5, TimeUnit.MILLISECONDS)
+ .softValues().makeComputingMap(WATCHED_CREATOR);
+
+ runExpirationTest(cache);
+ }
+
+ public void testExpiringGetForStrong() {
+ ConcurrentMap<String, Integer> cache = new MapMaker()
+ .expiration(10, TimeUnit.MILLISECONDS)
+ .makeComputingMap(WATCHED_CREATOR);
+
+ runExpirationTest(cache);
+ }
+
+ private void runExpirationTest(ConcurrentMap<String, Integer> cache) {
+ for (int i = 0; i < 10; i++) {
+ assertEquals(Integer.valueOf(i + VALUE_SUFFIX),
+ cache.get(KEY_PREFIX + i));
+ }
+
+ for (int i = 0; i < 10; i++) {
+ WATCHED_CREATOR.reset();
+ assertEquals(Integer.valueOf(i + VALUE_SUFFIX),
+ cache.get(KEY_PREFIX + i));
+ assertFalse("Creator should NOT have been called @#" + i,
+ WATCHED_CREATOR.wasCalled());
+ }
+
+ runTasks();
+
+ for (int i = 0; i < 10; i++) {
+ WATCHED_CREATOR.reset();
+ assertEquals(Integer.valueOf(i + VALUE_SUFFIX),
+ cache.get(KEY_PREFIX + i));
+ assertTrue("Creator should have been called @#" + i,
+ WATCHED_CREATOR.wasCalled());
+ }
+ }
+
+ public void testRemovalSchedulerForStrong() {
+ String keyPrefix = "TRSTRONG_";
+ int ttl = 300;
+ ConcurrentMap<String, Integer> cache = new MapMaker()
+ .expiration(ttl, TimeUnit.MILLISECONDS)
+ .makeComputingMap(new WatchedCreatorFunction(keyPrefix));
+ runRemovalScheduler(cache, keyPrefix, ttl);
+ }
+
+ public void testRemovalSchedulerForSoft() {
+ String keyPrefix = "TRSOFT_";
+ int ttl = 300;
+ ConcurrentMap<String, Integer> cache = new MapMaker()
+ .expiration(ttl, TimeUnit.MILLISECONDS).softValues()
+ .makeComputingMap(new WatchedCreatorFunction(keyPrefix));
+ runRemovalScheduler(cache, keyPrefix, ttl);
+ }
+
+ private void runRemovalScheduler(ConcurrentMap<String, Integer> cache,
+ String keyPrefix, int ttl) {
+ int shift1 = 10 + VALUE_SUFFIX;
+ // fill with initial data
+ for (int i = 0; i < 10; i++) {
+ cache.put(keyPrefix + i, i + shift1);
+ assertEquals(Integer.valueOf(i + shift1), cache.get(keyPrefix + i));
+ }
+
+ // wait, so that entries have just 10 ms to live
+ try {
+ Thread.sleep(ttl * 2 / 3);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+
+ int shift2 = shift1 + 10;
+ // fill with new data - has to live for 20 ms more
+ for (int i = 0; i < 10; i++) {
+ cache.put(keyPrefix + i, i + shift2);
+ assertEquals("key: " + keyPrefix + i,
+ Integer.valueOf(i + shift2), cache.get(keyPrefix + i));
+ }
+
+ // old timeouts must expire after this wait
+ try {
+ Thread.sleep(ttl * 2 / 3);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+
+ // check that new values are still there - they still have 10 ms to live
+ for (int i = 0; i < 10; i++) {
+ assertEquals(Integer.valueOf(i + shift2), cache.get(keyPrefix + i));
+ }
+ }
+
+ private static class WatchedCreatorFunction
+ implements Function<String, Integer> {
+ boolean wasCalled = false; // must be set in apply()
+
+ public WatchedCreatorFunction() {
+ this(KEY_PREFIX);
+ }
+
+ public WatchedCreatorFunction(String prefix) {
+ setPrefix(prefix);
+ }
+
+ public void reset() {
+ wasCalled = false;
+ }
+
+ protected String prefix = KEY_PREFIX;
+
+ public void setPrefix(String prefix) {
+ this.prefix = prefix;
+ }
+
+ public boolean wasCalled() {
+ return wasCalled;
+ }
+
+ public Integer apply(String s) {
+ wasCalled = true;
+ return Integer.parseInt(s.substring(prefix.length())) + VALUE_SUFFIX;
+ }
+ }
+
+ static final WatchedCreatorFunction WATCHED_CREATOR =
+ new WatchedCreatorFunction();
+ }
+
+ static <E> Set<E> set(E... elements) {
+ return new HashSet<E>(Arrays.asList(elements));
+ }
+}
diff --git a/test/com/google/common/collect/MapsTest.java b/test/com/google/common/collect/MapsTest.java
new file mode 100644
index 0000000..6adbb7e
--- /dev/null
+++ b/test/com/google/common/collect/MapsTest.java
@@ -0,0 +1,946 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.base.Functions;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.collect.SetsTest.Derived;
+import com.google.common.collect.testing.MapTestSuiteBuilder;
+import com.google.common.collect.testing.TestStringMapGenerator;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.MapFeature;
+import static com.google.common.collect.testing.testers.CollectionIteratorTester.getIteratorUnknownOrderRemoveSupportedMethod;
+import com.google.common.testing.junit3.JUnitAsserts;
+import com.google.common.testutils.EqualsTester;
+import com.google.common.testutils.NullPointerTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.EnumMap;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.IdentityHashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Properties;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+/**
+ * Unit test for {@code Maps}.
+ *
+ * @author Kevin Bourrillion
+ * @author Mike Bostock
+ * @author Jared Levy
+ */
+public class MapsTest extends TestCase {
+
+ private static final Comparator<Integer> SOME_COMPARATOR =
+ Collections.reverseOrder();
+
+ public void testHashMap() {
+ HashMap<Integer, Integer> map = Maps.newHashMap();
+ assertEquals(Collections.emptyMap(), map);
+ }
+
+ public void testHashMapWithInitialMap() {
+ Map<String, Integer> original = new TreeMap<String, Integer>();
+ original.put("a", 1);
+ original.put("b", 2);
+ original.put("c", 3);
+ HashMap<String, Integer> map = Maps.newHashMap(original);
+ assertEquals(original, map);
+ }
+
+ public void testHashMapGeneralizesTypes() {
+ Map<String, Integer> original = new TreeMap<String, Integer>();
+ original.put("a", 1);
+ original.put("b", 2);
+ original.put("c", 3);
+ HashMap<Object, Object> map =
+ Maps.newHashMap((Map<? extends Object, ? extends Object>) original);
+ assertEquals(original, map);
+ }
+
+ public void testCapacityForNegativeSizeFails() {
+ try {
+ Maps.capacity(-1);
+ fail("Negative expected size must result in IllegalArgumentException");
+ } catch (IllegalArgumentException ex) {
+ }
+ }
+
+ public void testCapacityForNonNegativeSizeIsAtLeast16() {
+ int[] nonNegativeExpectedSizes = new int[] {0, 1, 15, 16, 32};
+ for (int expectedSize : nonNegativeExpectedSizes) {
+ int capacity = Maps.capacity(expectedSize);
+ assertTrue(capacity >= 16);
+ assertTrue(capacity >= expectedSize * 2);
+ }
+ }
+
+ public void testLinkedHashMap() {
+ LinkedHashMap<Integer, Integer> map = Maps.newLinkedHashMap();
+ assertEquals(Collections.emptyMap(), map);
+ }
+
+ @SuppressWarnings("serial")
+ public void testLinkedHashMapWithInitialMap() {
+ Map<String, String> map = new LinkedHashMap<String, String>() {{
+ put("Hello", "World");
+ put("first", "second");
+ put("polygene", "lubricants");
+ put("alpha", "betical");
+ }};
+
+ LinkedHashMap<String, String> copy = Maps.newLinkedHashMap(map);
+
+ Iterator<Entry<String, String>> iter = copy.entrySet().iterator();
+ assertTrue(iter.hasNext());
+ Entry<String, String> entry = iter.next();
+ assertEquals("Hello", entry.getKey());
+ assertEquals("World", entry.getValue());
+ assertTrue(iter.hasNext());
+
+ entry = iter.next();
+ assertEquals("first", entry.getKey());
+ assertEquals("second", entry.getValue());
+ assertTrue(iter.hasNext());
+
+ entry = iter.next();
+ assertEquals("polygene", entry.getKey());
+ assertEquals("lubricants", entry.getValue());
+ assertTrue(iter.hasNext());
+
+ entry = iter.next();
+ assertEquals("alpha", entry.getKey());
+ assertEquals("betical", entry.getValue());
+ assertFalse(iter.hasNext());
+ }
+
+ public void testLinkedHashMapGeneralizesTypes() {
+ Map<String, Integer> original = new LinkedHashMap<String, Integer>();
+ original.put("a", 1);
+ original.put("b", 2);
+ original.put("c", 3);
+ HashMap<Object, Object> map
+ = Maps.<Object, Object>newLinkedHashMap(original);
+ assertEquals(original, map);
+ }
+
+ public void testIdentityHashMap() {
+ IdentityHashMap<Integer, Integer> map = Maps.newIdentityHashMap();
+ assertEquals(Collections.emptyMap(), map);
+ }
+
+ public void testTreeMap() {
+ TreeMap<Integer, Integer> map = Maps.newTreeMap();
+ assertEquals(Collections.emptyMap(), map);
+ assertNull(map.comparator());
+ }
+
+ public void testTreeMapDerived() {
+ TreeMap<Derived, Integer> map = Maps.newTreeMap();
+ assertEquals(Collections.emptyMap(), map);
+ map.put(new Derived("foo"), 1);
+ map.put(new Derived("bar"), 2);
+ JUnitAsserts.assertContentsInOrder(map.keySet(),
+ new Derived("bar"), new Derived("foo"));
+ JUnitAsserts.assertContentsInOrder(map.values(), 2, 1);
+ assertNull(map.comparator());
+ }
+
+ public void testTreeMapNonGeneric() {
+ TreeMap<LegacyComparable, Integer> map = Maps.newTreeMap();
+ assertEquals(Collections.emptyMap(), map);
+ map.put(new LegacyComparable("foo"), 1);
+ map.put(new LegacyComparable("bar"), 2);
+ JUnitAsserts.assertContentsInOrder(map.keySet(),
+ new LegacyComparable("bar"), new LegacyComparable("foo"));
+ JUnitAsserts.assertContentsInOrder(map.values(), 2, 1);
+ assertNull(map.comparator());
+ }
+
+ public void testTreeMapWithComparator() {
+ TreeMap<Integer, Integer> map = Maps.newTreeMap(SOME_COMPARATOR);
+ assertEquals(Collections.emptyMap(), map);
+ assertSame(SOME_COMPARATOR, map.comparator());
+ }
+
+ public void testTreeMapWithInitialMap() {
+ SortedMap<Integer, Integer> map = Maps.newTreeMap();
+ map.put(5, 10);
+ map.put(3, 20);
+ map.put(1, 30);
+ TreeMap<Integer, Integer> copy = Maps.newTreeMap(map);
+ assertEquals(copy, map);
+ assertSame(copy.comparator(), map.comparator());
+ }
+
+ public enum SomeEnum { SOME_INSTANCE }
+
+ public void testEnumMap() {
+ EnumMap<SomeEnum, Integer> map = Maps.newEnumMap(SomeEnum.class);
+ assertEquals(Collections.emptyMap(), map);
+ map.put(SomeEnum.SOME_INSTANCE, 0);
+ assertEquals(Collections.singletonMap(SomeEnum.SOME_INSTANCE, 0), map);
+ }
+
+ public void testEnumMapNullClass() {
+ try {
+ Maps.<SomeEnum, Long>newEnumMap((Class<MapsTest.SomeEnum>) null);
+ fail("no exception thrown");
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ public void testEnumMapWithInitialEnumMap() {
+ EnumMap<SomeEnum, Integer> original = Maps.newEnumMap(SomeEnum.class);
+ original.put(SomeEnum.SOME_INSTANCE, 0);
+ EnumMap<SomeEnum, Integer> copy = Maps.newEnumMap(original);
+ assertEquals(original, copy);
+ }
+
+ public void testEnumMapWithInitialEmptyEnumMap() {
+ EnumMap<SomeEnum, Integer> original = Maps.newEnumMap(SomeEnum.class);
+ EnumMap<SomeEnum, Integer> copy = Maps.newEnumMap(original);
+ assertEquals(original, copy);
+ assertNotSame(original, copy);
+ }
+
+ public void testEnumMapWithInitialMap() {
+ HashMap<SomeEnum, Integer> original = Maps.newHashMap();
+ original.put(SomeEnum.SOME_INSTANCE, 0);
+ EnumMap<SomeEnum, Integer> copy = Maps.newEnumMap(original);
+ assertEquals(original, copy);
+ }
+
+ public void testEnumMapWithInitialEmptyMap() {
+ Map<SomeEnum, Integer> original = Maps.newHashMap();
+ try {
+ Maps.newEnumMap(original);
+ fail("Empty map must result in an IllegalArgumentException");
+ } catch (IllegalArgumentException expected) {}
+ }
+
+ public void testNullPointerExceptions() throws Exception {
+ NullPointerTester tester = new NullPointerTester();
+ tester.setDefault(BiMap.class, ImmutableBiMap.of());
+ tester.testAllPublicStaticMethods(Maps.class);
+ }
+
+ private static final Map<Integer,Integer> EMPTY
+ = Collections.emptyMap();
+ private static final Map<Integer,Integer> SINGLETON
+ = Collections.singletonMap(1, 2);
+
+ public void testMapDifferenceEmptyEmpty() {
+ MapDifference<Integer,Integer> diff = Maps.difference(EMPTY, EMPTY);
+ assertTrue(diff.areEqual());
+ assertEquals(EMPTY, diff.entriesOnlyOnLeft());
+ assertEquals(EMPTY, diff.entriesOnlyOnRight());
+ assertEquals(EMPTY, diff.entriesInCommon());
+ assertEquals(EMPTY, diff.entriesDiffering());
+ assertEquals("equal", diff.toString());
+ }
+
+ public void testMapDifferenceEmptySingleton() {
+ MapDifference<Integer,Integer> diff = Maps.difference(EMPTY, SINGLETON);
+ assertFalse(diff.areEqual());
+ assertEquals(EMPTY, diff.entriesOnlyOnLeft());
+ assertEquals(SINGLETON, diff.entriesOnlyOnRight());
+ assertEquals(EMPTY, diff.entriesInCommon());
+ assertEquals(EMPTY, diff.entriesDiffering());
+ assertEquals("not equal: only on right={1=2}", diff.toString());
+ }
+
+ public void testMapDifferenceSingletonEmpty() {
+ MapDifference<Integer,Integer> diff = Maps.difference(SINGLETON, EMPTY);
+ assertFalse(diff.areEqual());
+ assertEquals(SINGLETON, diff.entriesOnlyOnLeft());
+ assertEquals(EMPTY, diff.entriesOnlyOnRight());
+ assertEquals(EMPTY, diff.entriesInCommon());
+ assertEquals(EMPTY, diff.entriesDiffering());
+ assertEquals("not equal: only on left={1=2}", diff.toString());
+ }
+
+ public void testMapDifferenceTypical() {
+ Map<Integer, String> left = ImmutableMap.of(
+ 1, "a", 2, "b", 3, "c", 4, "d", 5, "e");
+ Map<Integer, String> right = ImmutableMap.of(
+ 1, "a", 3, "f", 5, "g", 6, "z");
+
+ MapDifference<Integer, String> diff1 = Maps.difference(left, right);
+ assertFalse(diff1.areEqual());
+ assertEquals(ImmutableMap.of(2, "b", 4, "d"), diff1.entriesOnlyOnLeft());
+ assertEquals(ImmutableMap.of(6, "z"), diff1.entriesOnlyOnRight());
+ assertEquals(ImmutableMap.of(1, "a"), diff1.entriesInCommon());
+ assertEquals(ImmutableMap.of(3,
+ new Maps.ValueDifferenceImpl<String>("c", "f"), 5,
+ new Maps.ValueDifferenceImpl<String>("e", "g")),
+ diff1.entriesDiffering());
+ assertEquals("not equal: only on left={2=b, 4=d}: only on right={6=z}: "
+ + "value differences={3=(c, f), 5=(e, g)}", diff1.toString());
+
+ MapDifference<Integer, String> diff2 = Maps.difference(right, left);
+ assertFalse(diff2.areEqual());
+ assertEquals(ImmutableMap.of(6, "z"), diff2.entriesOnlyOnLeft());
+ assertEquals(ImmutableMap.of(2, "b", 4, "d"), diff2.entriesOnlyOnRight());
+ assertEquals(ImmutableMap.of(1, "a"), diff2.entriesInCommon());
+ assertEquals(ImmutableMap.of(3,
+ new Maps.ValueDifferenceImpl<String>("f", "c"), 5,
+ new Maps.ValueDifferenceImpl<String>("g", "e")),
+ diff2.entriesDiffering());
+ assertEquals("not equal: only on left={6=z}: only on right={2=b, 4=d}: "
+ + "value differences={3=(f, c), 5=(g, e)}", diff2.toString());
+ }
+
+ public void testMapDifferenceEquals() {
+ Map<Integer, String> left = ImmutableMap.of(
+ 1, "a", 2, "b", 3, "c", 4, "d", 5, "e");
+ Map<Integer, String> right = ImmutableMap.of(
+ 1, "a", 3, "f", 5, "g", 6, "z");
+ Map<Integer, String> right2 = ImmutableMap.of(
+ 1, "a", 3, "h", 5, "g", 6, "z");
+ MapDifference<Integer, String> original = Maps.difference(left, right);
+ MapDifference<Integer, String> same = Maps.difference(left, right);
+ MapDifference<Integer, String> reverse = Maps.difference(right, left);
+ MapDifference<Integer, String> diff2 = Maps.difference(left, right2);
+
+ new EqualsTester(original)
+ .addEqualObject(same)
+ .addNotEqualObject(reverse, diff2)
+ .testEquals();
+ }
+
+ private static final BiMap<Integer, String> INT_TO_STRING_MAP =
+ new ImmutableBiMap.Builder<Integer, String>()
+ .put(1, "one")
+ .put(2, "two")
+ .put(3, "three")
+ .build();
+
+ public void testUniqueIndexCollection() {
+ ImmutableMap<Integer, String> outputMap =
+ Maps.uniqueIndex(INT_TO_STRING_MAP.values(),
+ Functions.forMap(INT_TO_STRING_MAP.inverse()));
+ assertEquals(INT_TO_STRING_MAP, outputMap);
+ }
+
+ public void testUniqueIndexIterable() {
+ ImmutableMap<Integer, String> outputMap =
+ Maps.uniqueIndex(new Iterable<String>() {
+ public Iterator<String> iterator() {
+ return INT_TO_STRING_MAP.values().iterator();
+ }
+ },
+ Functions.forMap(INT_TO_STRING_MAP.inverse()));
+ assertEquals(INT_TO_STRING_MAP, outputMap);
+ }
+
+ public void testUniqueIndexIterableWithCollection() {
+ ImmutableMap<Integer, String> outputMap =
+ Maps.uniqueIndex(INT_TO_STRING_MAP.values(),
+ Functions.forMap(INT_TO_STRING_MAP.inverse()));
+ assertEquals(INT_TO_STRING_MAP, outputMap);
+ }
+
+ /** Can't create the map if more than one value maps to the same key. */
+ public void testUniqueIndexDuplicates() {
+ try {
+ Maps.uniqueIndex(ImmutableSet.of("one", "uno"), Functions.constant(1));
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ /** Null values are not allowed. */
+ public void testUniqueIndexNullValue() {
+ List<String> listWithNull = Lists.newArrayList((String) null);
+ try {
+ Maps.uniqueIndex(listWithNull, Functions.constant(1));
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ /** Null keys aren't allowed either. */
+ public void testUniqueIndexNullKey() {
+ List<String> oneStringList = Lists.newArrayList("foo");
+ try {
+ Maps.uniqueIndex(oneStringList, Functions.constant(null));
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ @SuppressWarnings("deprecation") // StringBufferInputStream
+ public void testFromProperties() throws IOException {
+ Properties testProp = new Properties();
+
+ Map<String, String> result = Maps.fromProperties(testProp);
+ assertTrue(result.isEmpty());
+ testProp.setProperty("first", "true");
+
+ result = Maps.fromProperties(testProp);
+ assertEquals("true", result.get("first"));
+ assertEquals(1, result.size());
+ testProp.setProperty("second", "null");
+
+ result = Maps.fromProperties(testProp);
+ assertEquals("true", result.get("first"));
+ assertEquals("null", result.get("second"));
+ assertEquals(2, result.size());
+
+ // Now test values loaded from a stream.
+ String props = "test\n second = 2\n Third item : a short phrase ";
+
+ // TODO: change to StringReader in Java 1.6
+ testProp.load(new java.io.StringBufferInputStream(props));
+
+ result = Maps.fromProperties(testProp);
+ assertEquals(4, result.size());
+ assertEquals("true", result.get("first"));
+ assertEquals("", result.get("test"));
+ assertEquals("2", result.get("second"));
+ assertEquals("item : a short phrase ", result.get("Third"));
+ assertFalse(result.containsKey("not here"));
+
+ // Test loading system properties
+ result = Maps.fromProperties(System.getProperties());
+ assertTrue(result.containsKey("java.version"));
+
+ // Test that defaults work, too.
+ testProp = new Properties(System.getProperties());
+ String override = "test\njava.version : hidden";
+
+ // TODO: change to StringReader in Java 1.6
+ testProp.load(new java.io.StringBufferInputStream(override));
+
+ result = Maps.fromProperties(testProp);
+ assertTrue(result.size() > 2);
+ assertEquals("", result.get("test"));
+ assertEquals("hidden", result.get("java.version"));
+ assertNotSame(System.getProperty("java.version"),
+ result.get("java.version"));
+ }
+
+ @SuppressWarnings("serial") // never serialized
+ public void testFromPropertiesNullKey() {
+ Properties properties = new Properties() {
+ @Override public Enumeration<?> propertyNames() {
+ return Iterators.asEnumeration(
+ Arrays.asList(null, "first", "second").iterator());
+ }
+ };
+ properties.setProperty("first", "true");
+ properties.setProperty("second", "null");
+
+ try {
+ Maps.fromProperties(properties);
+ fail();
+ } catch (NullPointerException expected) {}
+ }
+
+ @SuppressWarnings("serial") // never serialized
+ public void testFromPropertiesNonStringKeys() {
+ Properties properties = new Properties() {
+ @Override public Enumeration<?> propertyNames() {
+ return Iterators.asEnumeration(
+ Arrays.<Object>asList(Integer.valueOf(123), "first").iterator());
+ }
+ };
+
+ try {
+ Maps.fromProperties(properties);
+ fail();
+ } catch (ClassCastException expected) {}
+ }
+
+ /**
+ * Constructs a "nefarious" map entry with the specified key and value,
+ * meaning an entry that is suitable for testing that map entries cannot be
+ * modified via a nefarious implementation of equals. This is used for testing
+ * unmodifiable collections of map entries; for example, it should not be
+ * possible to access the raw (modifiable) map entry via a nefarious equals
+ * method.
+ */
+ public static <K, V> Map.Entry<K, V> nefariousEntry(
+ final K key, final V value) {
+ return new AbstractMapEntry<K, V>() {
+ @Override public K getKey() {
+ return key;
+ }
+ @Override public V getValue() {
+ return value;
+ }
+ @Override public V setValue(@SuppressWarnings("hiding") V value) {
+ throw new UnsupportedOperationException();
+ }
+ @SuppressWarnings("unchecked")
+ @Override public boolean equals(Object o) {
+ if (o instanceof Map.Entry<?, ?>) {
+ Map.Entry<K, V> e = (Map.Entry<K, V>) o;
+ e.setValue(value); // muhahaha!
+ }
+ return super.equals(o);
+ }
+ };
+ }
+
+ public void testUnmodifiableBiMap() {
+ BiMap<Integer, String> mod = HashBiMap.create();
+ mod.put(1, "one");
+ mod.put(2, "two");
+ mod.put(3, "three");
+
+ BiMap<Number, String> unmod = Maps.<Number, String>unmodifiableBiMap(mod);
+
+ /* No aliasing on inverse operations. */
+ assertSame(unmod.inverse(), unmod.inverse());
+ assertSame(unmod, unmod.inverse().inverse());
+
+ /* Unmodifiable is a view. */
+ mod.put(4, "four");
+ assertEquals(true, unmod.get(4).equals("four"));
+ assertEquals(true, unmod.inverse().get("four").equals(4));
+
+ /* UnsupportedOperationException on direct modifications. */
+ try {
+ unmod.put(4, "four");
+ fail("UnsupportedOperationException expected");
+ } catch (UnsupportedOperationException expected) {}
+ try {
+ unmod.forcePut(4, "four");
+ fail("UnsupportedOperationException expected");
+ } catch (UnsupportedOperationException expected) {}
+ try {
+ unmod.putAll(Collections.singletonMap(4, "four"));
+ fail("UnsupportedOperationException expected");
+ } catch (UnsupportedOperationException expected) {}
+
+ /* UnsupportedOperationException on indirect modifications. */
+ BiMap<String, Number> inverse = unmod.inverse();
+ try {
+ inverse.put("four", 4);
+ fail("UnsupportedOperationException expected");
+ } catch (UnsupportedOperationException expected) {}
+ try {
+ inverse.forcePut("four", 4);
+ fail("UnsupportedOperationException expected");
+ } catch (UnsupportedOperationException expected) {}
+ try {
+ inverse.putAll(Collections.singletonMap("four", 4));
+ fail("UnsupportedOperationException expected");
+ } catch (UnsupportedOperationException expected) {}
+ Set<String> values = unmod.values();
+ try {
+ values.remove("four");
+ fail("UnsupportedOperationException expected");
+ } catch (UnsupportedOperationException expected) {}
+ Set<Map.Entry<Number, String>> entries = unmod.entrySet();
+ Map.Entry<Number, String> entry = entries.iterator().next();
+ try {
+ entry.setValue("four");
+ fail("UnsupportedOperationException expected");
+ } catch (UnsupportedOperationException expected) {}
+ @SuppressWarnings("unchecked")
+ Map.Entry<Integer, String> entry2
+ = (Map.Entry<Integer, String>) entries.toArray()[0];
+ try {
+ entry2.setValue("four");
+ fail("UnsupportedOperationException expected");
+ } catch (UnsupportedOperationException expected) {}
+ }
+
+ public void testBiMapEntrySetIteratorRemove() {
+ BiMap<Integer, String> map = HashBiMap.create();
+ map.put(1, "one");
+ Set<Map.Entry<Integer, String>> entries = map.entrySet();
+ Iterator<Map.Entry<Integer, String>> iterator = entries.iterator();
+ Map.Entry<Integer, String> entry = iterator.next();
+ entry.setValue("two"); // changes the iterator's current entry value
+ assertEquals("two", map.get(1));
+ iterator.remove(); // removes the updated entry
+ assertTrue(map.isEmpty());
+ }
+
+ public void testImmutableEntry() {
+ Map.Entry<String, Integer> e = Maps.immutableEntry("foo", 1);
+ assertEquals("foo", e.getKey());
+ assertEquals(1, (int) e.getValue());
+ try {
+ e.setValue(2);
+ fail("UnsupportedOperationException expected");
+ } catch (UnsupportedOperationException expected) {}
+ assertEquals("foo=1", e.toString());
+ assertEquals(101575, e.hashCode());
+ }
+
+ public void testImmutableEntryNull() {
+ Map.Entry<String, Integer> e
+ = Maps.immutableEntry((String) null, (Integer) null);
+ assertNull(e.getKey());
+ assertNull(e.getValue());
+ try {
+ e.setValue(null);
+ fail("UnsupportedOperationException expected");
+ } catch (UnsupportedOperationException expected) {}
+ assertEquals("null=null", e.toString());
+ assertEquals(0, e.hashCode());
+ }
+
+ /** See {@link SynchronizedBiMapTest} for more tests. */
+ public void testSynchronizedBiMap() {
+ BiMap<String, Integer> bimap = HashBiMap.create();
+ bimap.put("one", 1);
+ BiMap<String, Integer> sync = Maps.synchronizedBiMap(bimap);
+ bimap.put("two", 2);
+ sync.put("three", 3);
+ assertEquals(ImmutableSet.of(1, 2, 3), bimap.inverse().keySet());
+ assertEquals(ImmutableSet.of(1, 2, 3), sync.inverse().keySet());
+ }
+
+ private static final Predicate<String> NOT_LENGTH_3
+ = new Predicate<String>() {
+ public boolean apply(String input) {
+ return input == null || input.length() != 3;
+ }
+ };
+
+ private static final Predicate<Integer> EVEN
+ = new Predicate<Integer>() {
+ public boolean apply(Integer input) {
+ return input == null || input % 2 == 0;
+ }
+ };
+
+ private static final Predicate<Entry<String, Integer>> CORRECT_LENGTH
+ = new Predicate<Entry<String, Integer>>() {
+ public boolean apply(Entry<String, Integer> input) {
+ return input.getKey().length() == input.getValue();
+ }
+ };
+
+ public void testFilteredKeysIllegalPut() {
+ Map<String, Integer> unfiltered = Maps.newHashMap();
+ Map<String, Integer> filtered = Maps.filterKeys(unfiltered, NOT_LENGTH_3);
+ filtered.put("a", 1);
+ filtered.put("b", 2);
+ assertEquals(ImmutableMap.of("a", 1, "b", 2), filtered);
+
+ try {
+ filtered.put("yyy", 3);
+ fail();
+ } catch (IllegalArgumentException expected) {}
+
+ try {
+ filtered.putAll(ImmutableMap.of("c", 3, "zzz", 4, "b", 5));
+ fail();
+ } catch (IllegalArgumentException expected) {}
+
+ assertEquals(ImmutableMap.of("a", 1, "b", 2), filtered);
+ }
+
+ public void testFilteredKeysChangeFiltered() {
+ Map<String, Integer> unfiltered = Maps.newHashMap();
+ Map<String, Integer> filtered = Maps.filterKeys(unfiltered, NOT_LENGTH_3);
+ unfiltered.put("two", 2);
+ unfiltered.put("three", 3);
+ unfiltered.put("four", 4);
+ assertEquals(ImmutableMap.of("two", 2, "three", 3, "four", 4), unfiltered);
+ assertEquals(ImmutableMap.of("three", 3, "four", 4), filtered);
+
+ unfiltered.remove("three");
+ assertEquals(ImmutableMap.of("two", 2, "four", 4), unfiltered);
+ assertEquals(ImmutableMap.of("four", 4), filtered);
+
+ unfiltered.clear();
+ assertEquals(ImmutableMap.of(), unfiltered);
+ assertEquals(ImmutableMap.of(), filtered);
+ }
+
+ public void testFilteredKeysChangeUnfiltered() {
+ Map<String, Integer> unfiltered = Maps.newHashMap();
+ Map<String, Integer> filtered = Maps.filterKeys(unfiltered, NOT_LENGTH_3);
+ unfiltered.put("two", 2);
+ unfiltered.put("three", 3);
+ unfiltered.put("four", 4);
+ assertEquals(ImmutableMap.of("two", 2, "three", 3, "four", 4), unfiltered);
+ assertEquals(ImmutableMap.of("three", 3, "four", 4), filtered);
+
+ filtered.remove("three");
+ assertEquals(ImmutableMap.of("two", 2, "four", 4), unfiltered);
+ assertEquals(ImmutableMap.of("four", 4), filtered);
+
+ filtered.clear();
+ assertEquals(ImmutableMap.of("two", 2), unfiltered);
+ assertEquals(ImmutableMap.of(), filtered);
+ }
+
+ public void testFilteredValuesIllegalPut() {
+ Map<String, Integer> unfiltered = Maps.newHashMap();
+ Map<String, Integer> filtered = Maps.filterValues(unfiltered, EVEN);
+ filtered.put("a", 2);
+ unfiltered.put("b", 4);
+ unfiltered.put("c", 5);
+ assertEquals(ImmutableMap.of("a", 2, "b", 4), filtered);
+
+ try {
+ filtered.put("yyy", 3);
+ fail();
+ } catch (IllegalArgumentException expected) {}
+
+ try {
+ filtered.putAll(ImmutableMap.of("c", 4, "zzz", 5, "b", 6));
+ fail();
+ } catch (IllegalArgumentException expected) {}
+
+ assertEquals(ImmutableMap.of("a", 2, "b", 4), filtered);
+ }
+
+ public void testFilteredValuesIllegalSetValue() {
+ Map<String, Integer> unfiltered = Maps.newHashMap();
+ Map<String, Integer> filtered = Maps.filterValues(unfiltered, EVEN);
+ filtered.put("a", 2);
+ filtered.put("b", 4);
+ assertEquals(ImmutableMap.of("a", 2, "b", 4), filtered);
+
+ Entry<String, Integer> entry = filtered.entrySet().iterator().next();
+ try {
+ entry.setValue(5);
+ fail();
+ } catch (IllegalArgumentException expected) {}
+
+ assertEquals(ImmutableMap.of("a", 2, "b", 4), filtered);
+ }
+
+ public void testFilteredValuesClear() {
+ Map<String, Integer> unfiltered = Maps.newHashMap();
+ unfiltered.put("one", 1);
+ unfiltered.put("two", 2);
+ unfiltered.put("three", 3);
+ unfiltered.put("four", 4);
+ Map<String, Integer> filtered = Maps.filterValues(unfiltered, EVEN);
+ assertEquals(ImmutableMap.of("one", 1, "two", 2, "three", 3, "four", 4),
+ unfiltered);
+ assertEquals(ImmutableMap.of("two", 2, "four", 4), filtered);
+
+ filtered.clear();
+ assertEquals(ImmutableMap.of("one", 1, "three", 3), unfiltered);
+ assertTrue(filtered.isEmpty());
+ }
+
+ public void testFilteredEntriesIllegalPut() {
+ Map<String, Integer> unfiltered = Maps.newHashMap();
+ unfiltered.put("cat", 3);
+ unfiltered.put("dog", 2);
+ unfiltered.put("horse", 5);
+ Map<String, Integer> filtered
+ = Maps.filterEntries(unfiltered, CORRECT_LENGTH);
+ assertEquals(ImmutableMap.of("cat", 3, "horse", 5), filtered);
+
+ filtered.put("chicken", 7);
+ assertEquals(ImmutableMap.of("cat", 3, "horse", 5, "chicken", 7), filtered);
+
+ try {
+ filtered.put("cow", 7);
+ fail();
+ } catch (IllegalArgumentException expected) {}
+ assertEquals(ImmutableMap.of("cat", 3, "horse", 5, "chicken", 7), filtered);
+
+ try {
+ filtered.putAll(ImmutableMap.of("sheep", 5, "cow", 7));
+ fail();
+ } catch (IllegalArgumentException expected) {}
+ assertEquals(ImmutableMap.of("cat", 3, "horse", 5, "chicken", 7), filtered);
+ }
+
+ public void testFilteredEntriesObjectPredicate() {
+ Map<String, Integer> unfiltered = Maps.newHashMap();
+ unfiltered.put("cat", 3);
+ unfiltered.put("dog", 2);
+ unfiltered.put("horse", 5);
+ Predicate<Object> predicate = Predicates.alwaysFalse();
+ Map<String, Integer> filtered
+ = Maps.filterEntries(unfiltered, predicate);
+ assertTrue(filtered.isEmpty());
+ }
+
+ public void testFilteredEntriesWildCardEntryPredicate() {
+ Map<String, Integer> unfiltered = Maps.newHashMap();
+ unfiltered.put("cat", 3);
+ unfiltered.put("dog", 2);
+ unfiltered.put("horse", 5);
+ Predicate<Entry<?, ?>> predicate = new Predicate<Entry<?, ?>>() {
+ public boolean apply(Entry<?, ?> input) {
+ return "cat".equals(input.getKey())
+ || Integer.valueOf(2) == input.getValue();
+ }
+ };
+ Map<String, Integer> filtered
+ = Maps.filterEntries(unfiltered, predicate);
+ assertEquals(ImmutableMap.of("cat", 3, "dog", 2), filtered);
+ }
+
+ // TestStringMapGenerator uses entries of the form "one=January" and so forth.
+ // To test the filtered collections, we'll create a map containing the entries
+ // they ask for, plus some bogus numeric entries. Then our predicates will
+ // simply filter numeric entries back out.
+
+ private static ImmutableMap<String, String> ENTRIES_TO_FILTER_OUT =
+ new ImmutableMap.Builder<String, String>()
+ .put("0", "0")
+ .put("1", "1")
+ .put("2", "2")
+ .build();
+
+ public static class FilteredMapTests extends TestCase {
+ public static Test suite() {
+ TestSuite suite = new TestSuite();
+
+ suite.addTest(MapTestSuiteBuilder.using(
+ new TestStringMapGenerator() {
+ @Override protected Map<String, String> create(
+ Entry<String, String>[] entries) {
+ Map<String, String> map = Maps.newHashMap();
+ for (Entry<String, String> entry : entries) {
+ map.put(entry.getKey(), entry.getValue());
+ }
+ map.putAll(ENTRIES_TO_FILTER_OUT);
+ return Maps.filterKeys(map, new Predicate<String>() {
+ public boolean apply(String input) {
+ return input == null
+ || (input.charAt(0) >= 'a' && input.charAt(0) <= 'z');
+ }
+ });
+ }
+ })
+ .named("Maps.filterKeys")
+ .withFeatures(
+ CollectionSize.ANY,
+ MapFeature.ALLOWS_NULL_KEYS,
+ MapFeature.ALLOWS_NULL_VALUES,
+ MapFeature.GENERAL_PURPOSE)
+ .suppressing(getIteratorUnknownOrderRemoveSupportedMethod())
+ .createTestSuite());
+
+ suite.addTest(MapTestSuiteBuilder.using(
+ new TestStringMapGenerator() {
+ @Override protected Map<String, String> create(
+ Entry<String, String>[] entries) {
+ Map<String, String> map = Maps.newHashMap();
+ for (Entry<String, String> entry : entries) {
+ map.put(entry.getKey(), entry.getValue());
+ }
+ map.putAll(ENTRIES_TO_FILTER_OUT);
+ return Maps.filterValues(map, new Predicate<String>() {
+ public boolean apply(String input) {
+ return input == null
+ || (input.charAt(0) >= 'A' && input.charAt(0) <= 'Z');
+ }
+ });
+ }
+ })
+ .named("Maps.filterValues")
+ .withFeatures(
+ CollectionSize.ANY,
+ MapFeature.ALLOWS_NULL_KEYS,
+ MapFeature.ALLOWS_NULL_VALUES,
+ MapFeature.GENERAL_PURPOSE)
+ .suppressing(getIteratorUnknownOrderRemoveSupportedMethod())
+ .createTestSuite());
+
+ suite.addTest(MapTestSuiteBuilder.using(
+ new TestStringMapGenerator() {
+ @Override protected Map<String, String> create(
+ Entry<String, String>[] entries) {
+ Map<String, String> map = Maps.newHashMap();
+ for (Entry<String, String> entry : entries) {
+ map.put(entry.getKey(), entry.getValue());
+ }
+ map.putAll(ENTRIES_TO_FILTER_OUT);
+ return Maps.filterEntries(map,
+ new Predicate<Entry<String, String>>() {
+ public boolean apply(Entry<String, String> entry) {
+ String input = entry.getKey();
+ return input == null
+ || (input.charAt(0) >= 'a' && input.charAt(0) <= 'z');
+ }
+ });
+ }
+ })
+ .named("Maps.filterEntries")
+ .withFeatures(
+ CollectionSize.ANY,
+ MapFeature.ALLOWS_NULL_KEYS,
+ MapFeature.ALLOWS_NULL_VALUES,
+ MapFeature.GENERAL_PURPOSE)
+ .suppressing(getIteratorUnknownOrderRemoveSupportedMethod())
+ .createTestSuite());
+
+ suite.addTest(MapTestSuiteBuilder.using(
+ new TestStringMapGenerator() {
+ @Override protected Map<String, String> create(
+ Entry<String, String>[] entries) {
+ Map<String, String> map = Maps.newHashMap();
+ for (Entry<String, String> entry : entries) {
+ map.put(entry.getKey(), entry.getValue());
+ }
+ map.putAll(ENTRIES_TO_FILTER_OUT);
+ map.put("", "weird");
+ Map<String, String> withoutEmptyKey = Maps.filterKeys(map,
+ new Predicate<String>() {
+ public boolean apply(String input) {
+ return input == null || input.length() != 0;
+ }
+ });
+ return Maps.filterKeys(withoutEmptyKey, new Predicate<String>() {
+ public boolean apply(String input) {
+ return input == null
+ || (input.charAt(0) >= 'a' && input.charAt(0) <= 'z');
+ }
+ });
+ // note: these filters were deliberately chosen so that an
+ // element somehow getting around the first filter would cause
+ // an exception in the second
+ }
+ })
+ .named("Maps.filterKeys, chained")
+ .withFeatures(
+ CollectionSize.ANY,
+ MapFeature.ALLOWS_NULL_KEYS,
+ MapFeature.ALLOWS_NULL_VALUES,
+ MapFeature.GENERAL_PURPOSE)
+ .suppressing(getIteratorUnknownOrderRemoveSupportedMethod())
+ .createTestSuite());
+
+ return suite;
+ }
+ }
+}
diff --git a/test/com/google/common/collect/MapsTransformValuesTest.java b/test/com/google/common/collect/MapsTransformValuesTest.java
new file mode 100644
index 0000000..3494f29
--- /dev/null
+++ b/test/com/google/common/collect/MapsTransformValuesTest.java
@@ -0,0 +1,269 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
+import com.google.common.collect.testing.MapInterfaceTest;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * Tests for {@link Maps#transformValues}.
+ *
+ * @author Isaac Shum
+ */
+public class MapsTransformValuesTest extends MapInterfaceTest<String, String> {
+ public MapsTransformValuesTest() {
+ super(true, true, false /*supportsPut*/, true, true);
+ }
+
+ @Override protected Map<String, String> makeEmptyMap() {
+ return Maps.transformValues(
+ Maps.<String, String>newHashMap(), Functions.<String>identity());
+ }
+
+ @Override protected Map<String, String> makePopulatedMap() {
+ Map<String, Integer> underlying = Maps.newHashMap();
+ underlying.put("a", 1);
+ underlying.put("b", 2);
+ underlying.put("c", 3);
+ return Maps.transformValues(underlying, Functions.toStringFunction());
+ }
+
+ @Override protected String getKeyNotInPopulatedMap()
+ throws UnsupportedOperationException {
+ return "z";
+ }
+
+ @Override protected String getValueNotInPopulatedMap()
+ throws UnsupportedOperationException {
+ return "26";
+ }
+
+ /** Helper assertion comparing two maps */
+ private void assertMapsEqual(Map<?, ?> expected, Map<?, ?> map) {
+ assertEquals(expected, map);
+ assertEquals(expected.hashCode(), map.hashCode());
+ assertEquals(expected.entrySet(), map.entrySet());
+
+ // Assert that expectedValues > mapValues and that
+ // mapValues > expectedValues; i.e. that expectedValues == mapValues.
+ Collection<?> expectedValues = expected.values();
+ Collection<?> mapValues = map.values();
+ assertEquals(expectedValues.size(), mapValues.size());
+ assertTrue(expectedValues.containsAll(mapValues));
+ assertTrue(mapValues.containsAll(expectedValues));
+ }
+
+ public void testTransformEmptyMapEquality() {
+ Map<String, String> map = Maps.transformValues(
+ ImmutableMap.<String, Integer>of(), Functions.toStringFunction());
+ assertMapsEqual(Maps.newHashMap(), map);
+ }
+
+ public void testTransformSingletonMapEquality() {
+ Map<String, String> map = Maps.transformValues(
+ ImmutableMap.of("a", 1), Functions.toStringFunction());
+ Map<String, String> expected = ImmutableMap.of("a", "1");
+ assertMapsEqual(expected, map);
+ assertEquals(expected.get("a"), map.get("a"));
+ }
+
+ public void testTransformIdentityFunctionEquality() {
+ Map<String, Integer> underlying = ImmutableMap.of("a", 1);
+ Map<String, Integer> map = Maps.transformValues(
+ underlying, Functions.<Integer>identity());
+ assertMapsEqual(underlying, map);
+ }
+
+ public void testTransformPutEntryIsUnsupported() {
+ Map<String, String> map = Maps.transformValues(
+ ImmutableMap.of("a", 1), Functions.toStringFunction());
+ try {
+ map.put("b", "2");
+ fail();
+ } catch (UnsupportedOperationException expected) {
+ }
+
+ try {
+ map.putAll(ImmutableMap.of("b", "2"));
+ fail();
+ } catch (UnsupportedOperationException expected) {
+ }
+
+ try {
+ map.entrySet().iterator().next().setValue("one");
+ fail();
+ } catch (UnsupportedOperationException expected) {
+ }
+ }
+
+ public void testTransformRemoveEntry() {
+ Map<String, Integer> underlying = Maps.newHashMap();
+ underlying.put("a", 1);
+ Map<String, String> map
+ = Maps.transformValues(underlying, Functions.toStringFunction());
+ assertEquals("1", map.remove("a"));
+ assertNull(map.remove("b"));
+ }
+
+ public void testTransformEqualityOfMapsWithNullValues() {
+ Map<String, String> underlying = Maps.newHashMap();
+ underlying.put("a", null);
+ underlying.put("b", "");
+
+ Map<String, Boolean> map = Maps.transformValues(underlying,
+ new Function<String, Boolean>() {
+ public Boolean apply(@Nullable String from) {
+ return from == null;
+ }
+ }
+ );
+ Map<String, Boolean> expected = ImmutableMap.of("a", true, "b", false);
+ assertMapsEqual(expected, map);
+ assertEquals(expected.get("a"), map.get("a"));
+ assertEquals(expected.containsKey("a"), map.containsKey("a"));
+ assertEquals(expected.get("b"), map.get("b"));
+ assertEquals(expected.containsKey("b"), map.containsKey("b"));
+ assertEquals(expected.get("c"), map.get("c"));
+ assertEquals(expected.containsKey("c"), map.containsKey("c"));
+ }
+
+ public void testTransformReflectsUnderlyingMap() {
+ Map<String, Integer> underlying = Maps.newHashMap();
+ underlying.put("a", 1);
+ underlying.put("b", 2);
+ underlying.put("c", 3);
+ Map<String, String> map
+ = Maps.transformValues(underlying, Functions.toStringFunction());
+ assertEquals(underlying.size(), map.size());
+
+ underlying.put("d", 4);
+ assertEquals(underlying.size(), map.size());
+ assertEquals("4", map.get("d"));
+
+ underlying.remove("c");
+ assertEquals(underlying.size(), map.size());
+ assertFalse(map.containsKey("c"));
+
+ underlying.clear();
+ assertEquals(underlying.size(), map.size());
+ }
+
+ public void testTransformChangesAreReflectedInUnderlyingMap() {
+ Map<String, Integer> underlying = Maps.newLinkedHashMap();
+ underlying.put("a", 1);
+ underlying.put("b", 2);
+ underlying.put("c", 3);
+ underlying.put("d", 4);
+ underlying.put("e", 5);
+ underlying.put("f", 6);
+ underlying.put("g", 7);
+ Map<String, String> map
+ = Maps.transformValues(underlying, Functions.toStringFunction());
+
+ map.remove("a");
+ assertFalse(underlying.containsKey("a"));
+
+ Set<String> keys = map.keySet();
+ keys.remove("b");
+ assertFalse(underlying.containsKey("b"));
+
+ Iterator<String> keyIterator = keys.iterator();
+ keyIterator.next();
+ keyIterator.remove();
+ assertFalse(underlying.containsKey("c"));
+
+ Collection<String> values = map.values();
+ values.remove("4");
+ assertFalse(underlying.containsKey("d"));
+
+ Iterator<String> valueIterator = values.iterator();
+ valueIterator.next();
+ valueIterator.remove();
+ assertFalse(underlying.containsKey("e"));
+
+ Set<Map.Entry<String,String>> entries = map.entrySet();
+ Map.Entry<String, String> firstEntry = entries.iterator().next();
+ entries.remove(firstEntry);
+ assertFalse(underlying.containsKey("f"));
+
+ Iterator<Map.Entry<String, String>> entryIterator = entries.iterator();
+ entryIterator.next();
+ entryIterator.remove();
+ assertFalse(underlying.containsKey("g"));
+
+ assertTrue(underlying.isEmpty());
+ assertTrue(map.isEmpty());
+ assertTrue(keys.isEmpty());
+ assertTrue(values.isEmpty());
+ assertTrue(entries.isEmpty());
+ }
+
+ public void testTransformEquals() {
+ Map<String, Integer> underlying = ImmutableMap.of("a", 0, "b", 1, "c", 2);
+ Map<String, Integer> expected
+ = Maps.transformValues(underlying, Functions.<Integer>identity());
+
+ assertMapsEqual(expected, expected);
+
+ Map<String, Integer> equalToUnderlying = Maps.newTreeMap();
+ equalToUnderlying.putAll(underlying);
+ Map<String, Integer> map = Maps.transformValues(
+ equalToUnderlying, Functions.<Integer>identity());
+ assertMapsEqual(expected, map);
+
+ map = Maps.transformValues(ImmutableMap.of("a", 1, "b", 2, "c", 3),
+ new Function<Integer, Integer>() {
+ public Integer apply(Integer from) {
+ return from - 1;
+ }
+ }
+ );
+ assertMapsEqual(expected, map);
+ }
+
+ public void testTransformEntrySetContains() {
+ Map<String, Boolean> underlying = Maps.newHashMap();
+ underlying.put("a", null);
+ underlying.put("b", true);
+ underlying.put(null, true);
+
+ Map<String, Boolean> map = Maps.transformValues(
+ underlying, new Function<Boolean, Boolean>() {
+ public Boolean apply(@Nullable Boolean from) {
+ return (from == null) ? true : null;
+ }
+ }
+ );
+
+ Set<Map.Entry<String, Boolean>> entries = map.entrySet();
+ assertTrue(entries.contains(Maps.immutableEntry("a", true)));
+ assertTrue(entries.contains(Maps.immutableEntry("b", (Boolean) null)));
+ assertTrue(entries.contains(
+ Maps.immutableEntry((String) null, (Boolean) null)));
+
+ assertFalse(entries.contains(Maps.immutableEntry("c", (Boolean) null)));
+ assertFalse(entries.contains(Maps.immutableEntry((String) null, true)));
+ }
+}
diff --git a/test/com/google/common/collect/MultimapCollectionTest.java b/test/com/google/common/collect/MultimapCollectionTest.java
new file mode 100644
index 0000000..74bb194
--- /dev/null
+++ b/test/com/google/common/collect/MultimapCollectionTest.java
@@ -0,0 +1,724 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.base.Supplier;
+import static com.google.common.collect.Maps.newHashMap;
+import com.google.common.collect.testing.CollectionTestSuiteBuilder;
+import com.google.common.collect.testing.ListTestSuiteBuilder;
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.SetTestSuiteBuilder;
+import com.google.common.collect.testing.TestCollectionGenerator;
+import com.google.common.collect.testing.TestStringCollectionGenerator;
+import com.google.common.collect.testing.TestStringListGenerator;
+import com.google.common.collect.testing.TestStringSetGenerator;
+import com.google.common.collect.testing.TestStringSortedSetGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionFeature.REMOVE_OPERATIONS;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.Feature;
+import com.google.common.collect.testing.features.ListFeature;
+import static com.google.common.collect.testing.google.AbstractMultisetSetCountTester.getSetCountDuplicateInitializingMethods;
+import static com.google.common.collect.testing.google.MultisetReadsTester.getReadsDuplicateInitializingMethods;
+import com.google.common.collect.testing.google.MultisetTestSuiteBuilder;
+import com.google.common.collect.testing.google.TestStringMultisetGenerator;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import static java.lang.reflect.Proxy.newProxyInstance;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+/**
+ * Run collection tests on {@link Multimap} implementations.
+ *
+ * @author Jared Levy
+ */
+public class MultimapCollectionTest extends TestCase {
+
+ private static final Feature<?>[] COLLECTION_FEATURES = {
+ CollectionSize.ANY,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionFeature.GENERAL_PURPOSE
+ };
+
+ private static final Feature<?>[] COLLECTION_FEATURES_ORDER = {
+ CollectionSize.ANY,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionFeature.KNOWN_ORDER,
+ CollectionFeature.GENERAL_PURPOSE
+ };
+
+ private static final Feature<?>[] LIST_FEATURES = {
+ CollectionSize.ANY,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ ListFeature.GENERAL_PURPOSE
+ };
+
+ private static final Feature<?>[] COLLECTION_FEATURES_REMOVE = {
+ CollectionSize.ANY,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionFeature.REMOVE_OPERATIONS
+ };
+
+ private static final Feature<?>[] COLLECTION_FEATURES_REMOVE_ORDER = {
+ CollectionSize.ANY,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionFeature.KNOWN_ORDER,
+ CollectionFeature.REMOVE_OPERATIONS
+ };
+
+ private static final Feature<?>[] FOR_MAP_FEATURES_ONE = {
+ CollectionSize.ONE,
+ ALLOWS_NULL_VALUES,
+ REMOVE_OPERATIONS,
+ };
+
+ private static final Feature<?>[] FOR_MAP_FEATURES_ANY = {
+ CollectionSize.ANY,
+ ALLOWS_NULL_VALUES,
+ REMOVE_OPERATIONS,
+ };
+
+ private static final Supplier<TreeSet<String>> STRING_TREESET_FACTORY
+ = new Supplier<TreeSet<String>>() {
+ public TreeSet<String> get() {
+ return new TreeSet<String>(Ordering.natural().nullsLast());
+ }
+ };
+
+ private static final Supplier<TreeSet<Integer>> INTEGER_TREESET_FACTORY
+ = new Supplier<TreeSet<Integer>>() {
+ public TreeSet<Integer> get() {
+ return new TreeSet<Integer>(Ordering.natural().nullsLast());
+ }
+ };
+
+ private static void populateMultimapForGet(
+ Multimap<Integer, String> multimap, String[] elements) {
+ multimap.put(2, "foo");
+ for (String element : elements) {
+ multimap.put(3, element);
+ }
+ }
+
+ private static void populateMultimapForKeySet(
+ Multimap<String, Integer> multimap, String[] elements) {
+ for (String element : elements) {
+ multimap.put(element, 2);
+ multimap.put(element, 3);
+ }
+ }
+
+ private static void populateMultimapForValues(
+ Multimap<Integer, String> multimap, String[] elements) {
+ for (int i = 0; i < elements.length; i++) {
+ multimap.put(i % 2, elements[i]);
+ }
+ }
+
+ private static void populateMultimapForKeys(
+ Multimap<String, Integer> multimap, String[] elements) {
+ for (int i = 0; i < elements.length; i++) {
+ multimap.put(elements[i], i);
+ }
+ }
+
+ /**
+ * Implements {@code Multimap.put()} -- and no other methods -- for a {@code
+ * Map} by ignoring all but the latest value for each key. This class exists
+ * only so that we can use
+ * {@link MultimapCollectionTest#populateMultimapForGet(Multimap, String[])}
+ * and similar methods to populate a map to be passed to
+ * {@link Multimaps#forMap(Map)}. All tests should run against the result of
+ * {@link #build()}.
+ */
+ private static final class PopulatableMapAsMultimap<K, V>
+ extends ForwardingMultimap<K, V> {
+ final Map<K, V> map;
+ final SetMultimap<K, V> unusableDelegate;
+
+ static <K, V> PopulatableMapAsMultimap<K, V> create() {
+ return new PopulatableMapAsMultimap<K, V>();
+ }
+
+ @SuppressWarnings("unchecked") // all methods throw immediately
+ PopulatableMapAsMultimap() {
+ this.map = newHashMap();
+ this.unusableDelegate = (SetMultimap<K, V>) newProxyInstance(
+ SetMultimap.class.getClassLoader(),
+ new Class<?>[] {SetMultimap.class},
+ new InvocationHandler() {
+ public Object invoke(Object proxy, Method method, Object[] args)
+ throws Throwable {
+ throw new UnsupportedOperationException();
+ }
+ });
+ }
+
+ @Override protected Multimap<K, V> delegate() {
+ return unusableDelegate;
+ }
+
+ @Override public boolean put(K key, V value) {
+ map.put(key, value);
+ return true;
+ }
+
+ SetMultimap<K, V> build() {
+ return Multimaps.forMap(map);
+ }
+ }
+
+ private static abstract class TestEntriesGenerator
+ implements TestCollectionGenerator<Entry<String, Integer>> {
+ public SampleElements<Entry<String, Integer>> samples() {
+ return new SampleElements<Entry<String, Integer>>(
+ Maps.immutableEntry("bar", 1),
+ Maps.immutableEntry("bar", 2),
+ Maps.immutableEntry("foo", 3),
+ Maps.immutableEntry("bar", 3),
+ Maps.immutableEntry("cat", 2));
+ }
+
+ public Collection<Entry<String, Integer>> create(Object... elements) {
+ Multimap<String, Integer> multimap = createMultimap();
+ for (Object element : elements) {
+ @SuppressWarnings("unchecked")
+ Entry<String, Integer> entry = (Entry<String, Integer>) element;
+ multimap.put(entry.getKey(), entry.getValue());
+ }
+ return multimap.entries();
+ }
+
+ abstract Multimap<String, Integer> createMultimap();
+
+ @SuppressWarnings("unchecked")
+ public Entry<String, Integer>[] createArray(int length) {
+ return (Entry<String, Integer>[]) new Entry<?, ?>[length];
+ }
+
+ public List<Entry<String, Integer>> order(
+ List<Entry<String, Integer>> insertionOrder) {
+ return insertionOrder;
+ }
+ }
+
+ private static abstract class TestEntrySetGenerator
+ extends TestEntriesGenerator {
+ @Override abstract SetMultimap<String, Integer> createMultimap();
+
+ @Override public Set<Entry<String, Integer>> create(Object... elements) {
+ return (Set<Entry<String, Integer>>) super.create(elements);
+ }
+ }
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite();
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ SetMultimap<Integer, String> multimap = HashMultimap.create();
+ populateMultimapForGet(multimap, elements);
+ return multimap.get(3);
+ }
+ })
+ .named("HashMultimap.get")
+ .withFeatures(COLLECTION_FEATURES)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ SetMultimap<Integer, String> multimap
+ = LinkedHashMultimap.create();
+ populateMultimapForGet(multimap, elements);
+ return multimap.get(3);
+ }
+ })
+ .named("LinkedHashMultimap.get")
+ .withFeatures(COLLECTION_FEATURES_ORDER)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(
+ new TestStringSortedSetGenerator() {
+ @Override protected SortedSet<String> create(String[] elements) {
+ SortedSetMultimap<Integer, String> multimap =
+ TreeMultimap.create(Ordering.natural().nullsFirst(),
+ Ordering.natural().nullsLast());
+ populateMultimapForGet(multimap, elements);
+ return multimap.get(3);
+ }
+ })
+ .named("TreeMultimap.get")
+ .withFeatures(COLLECTION_FEATURES_ORDER)
+ .createTestSuite());
+
+ suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+ @Override protected List<String> create(String[] elements) {
+ ListMultimap<Integer, String> multimap
+ = ArrayListMultimap.create();
+ populateMultimapForGet(multimap, elements);
+ return multimap.get(3);
+ }
+ })
+ .named("ArrayListMultimap.get")
+ .withFeatures(LIST_FEATURES)
+ .createTestSuite());
+
+ suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+ @Override protected List<String> create(String[] elements) {
+ ListMultimap<Integer, String> multimap
+ = Multimaps.synchronizedListMultimap(
+ ArrayListMultimap.<Integer, String>create());
+ populateMultimapForGet(multimap, elements);
+ return multimap.get(3);
+ }
+ })
+ .named("synchronized ArrayListMultimap.get")
+ .withFeatures(LIST_FEATURES)
+ .createTestSuite());
+
+ suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+ @Override protected List<String> create(String[] elements) {
+ ListMultimap<Integer, String> multimap
+ = LinkedListMultimap.create();
+ populateMultimapForGet(multimap, elements);
+ return multimap.get(3);
+ }
+ })
+ .named("LinkedListMultimap.get")
+ .withFeatures(LIST_FEATURES)
+ .createTestSuite());
+
+ suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+ @Override protected List<String> create(String[] elements) {
+ ImmutableListMultimap.Builder<Integer, String> builder
+ = ImmutableListMultimap.builder();
+ ListMultimap<Integer, String> multimap
+ = builder.put(2, "foo")
+ .putAll(3, elements)
+ .build();
+ return multimap.get(3);
+ }
+ })
+ .named("ImmutableListMultimap.get")
+ .withFeatures(CollectionSize.ANY)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(
+ new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ PopulatableMapAsMultimap<Integer, String> multimap
+ = PopulatableMapAsMultimap.create();
+ populateMultimapForGet(multimap, elements);
+ return multimap.build().get(3);
+ }
+ })
+ .named("Multimaps.forMap.get")
+ .withFeatures(FOR_MAP_FEATURES_ONE)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ Multimap<String, Integer> multimap = HashMultimap.create();
+ populateMultimapForKeySet(multimap, elements);
+ return multimap.keySet();
+ }
+ })
+ .named("HashMultimap.keySet")
+ .withFeatures(COLLECTION_FEATURES_REMOVE)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ Multimap<String, Integer> multimap
+ = LinkedHashMultimap.create();
+ populateMultimapForKeySet(multimap, elements);
+ return multimap.keySet();
+ }
+ })
+ .named("LinkedHashMultimap.keySet")
+ .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(
+ new TestStringSortedSetGenerator() {
+ @Override protected SortedSet<String> create(String[] elements) {
+ TreeMultimap<String, Integer> multimap =
+ TreeMultimap.create(Ordering.natural().nullsFirst(),
+ Ordering.natural().nullsLast());
+ populateMultimapForKeySet(multimap, elements);
+ return multimap.keySet();
+ }
+ })
+ .named("TreeMultimap.keySet")
+ .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ Multimap<String, Integer> multimap
+ = ArrayListMultimap.create();
+ populateMultimapForKeySet(multimap, elements);
+ return multimap.keySet();
+ }
+ })
+ .named("ArrayListMultimap.keySet")
+ .withFeatures(COLLECTION_FEATURES_REMOVE)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ Multimap<String, Integer> multimap
+ = LinkedListMultimap.create();
+ populateMultimapForKeySet(multimap, elements);
+ return multimap.keySet();
+ }
+ })
+ .named("LinkedListMultimap.keySet")
+ .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ ImmutableListMultimap.Builder<String, Integer> builder
+ = ImmutableListMultimap.builder();
+ for (String element : elements) {
+ builder.put(element, 2);
+ builder.put(element, 3);
+ }
+ Multimap<String, Integer> multimap = builder.build();
+ return multimap.keySet();
+ }
+ })
+ .named("ImmutableListMultimap.keySet")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(
+ new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ PopulatableMapAsMultimap<String, Integer> multimap
+ = PopulatableMapAsMultimap.create();
+ populateMultimapForKeySet(multimap, elements);
+ return multimap.build().keySet();
+ }
+ })
+ .named("Multimaps.forMap.keySet")
+ .withFeatures(FOR_MAP_FEATURES_ANY)
+ .createTestSuite());
+
+ suite.addTest(CollectionTestSuiteBuilder.using(
+ new TestStringCollectionGenerator() {
+ @Override public Collection<String> create(String[] elements) {
+ Multimap<Integer, String> multimap = HashMultimap.create();
+ populateMultimapForValues(multimap, elements);
+ return multimap.values();
+ }
+ })
+ .named("HashMultimap.values")
+ .withFeatures(COLLECTION_FEATURES_REMOVE)
+ .createTestSuite());
+
+ suite.addTest(CollectionTestSuiteBuilder.using(
+ new TestStringCollectionGenerator() {
+ @Override public Collection<String> create(String[] elements) {
+ Multimap<Integer, String> multimap
+ = LinkedHashMultimap.create();
+ populateMultimapForValues(multimap, elements);
+ return multimap.values();
+ }
+ })
+ .named("LinkedHashMultimap.values")
+ .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER)
+ .createTestSuite());
+
+ suite.addTest(CollectionTestSuiteBuilder.using(
+ new TestStringCollectionGenerator() {
+ @Override public Collection<String> create(String[] elements) {
+ Multimap<Integer, String> multimap
+ = TreeMultimap.create(Ordering.natural().nullsFirst(),
+ Ordering.natural().nullsLast());
+ populateMultimapForValues(multimap, elements);
+ return multimap.values();
+ }
+ })
+ .named("TreeMultimap.values")
+ .withFeatures(COLLECTION_FEATURES_REMOVE)
+ .createTestSuite());
+
+ suite.addTest(CollectionTestSuiteBuilder.using(
+ new TestStringCollectionGenerator() {
+ @Override public Collection<String> create(String[] elements) {
+ Multimap<Integer, String> multimap
+ = ArrayListMultimap.create();
+ populateMultimapForValues(multimap, elements);
+ return multimap.values();
+ }
+ })
+ .named("ArrayListMultimap.values")
+ .withFeatures(COLLECTION_FEATURES_REMOVE)
+ .createTestSuite());
+
+ suite.addTest(CollectionTestSuiteBuilder.using(
+ new TestStringCollectionGenerator() {
+ @Override public Collection<String> create(String[] elements) {
+ Multimap<Integer, String> multimap
+ = LinkedListMultimap.create();
+ populateMultimapForValues(multimap, elements);
+ return multimap.values();
+ }
+ })
+ .named("LinkedListMultimap.values")
+ .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER)
+ .createTestSuite());
+
+ suite.addTest(CollectionTestSuiteBuilder.using(
+ new TestStringCollectionGenerator() {
+ @Override public Collection<String> create(String[] elements) {
+ ImmutableListMultimap.Builder<Integer, String> builder
+ = ImmutableListMultimap.builder();
+ for (int i = 0; i < elements.length; i++) {
+ builder.put(i % 2, elements[i]);
+ }
+ return builder.build().values();
+ }
+ })
+ .named("ImmutableListMultimap.values")
+ .withFeatures(CollectionSize.ANY)
+ .createTestSuite());
+
+ // TODO: use collection testers on Multimaps.forMap.values
+
+ suite.addTest(MultisetTestSuiteBuilder.using(
+ new TestStringMultisetGenerator() {
+ @Override protected Multiset<String> create(String[] elements) {
+ Multimap<String, Integer> multimap = HashMultimap.create();
+ populateMultimapForKeys(multimap, elements);
+ return multimap.keys();
+ }
+ })
+ .named("HashMultimap.keys")
+ .withFeatures(COLLECTION_FEATURES_REMOVE)
+ .createTestSuite());
+
+ suite.addTest(MultisetTestSuiteBuilder.using(
+ new TestStringMultisetGenerator() {
+ @Override protected Multiset<String> create(String[] elements) {
+ Multimap<String, Integer> multimap
+ = LinkedHashMultimap.create();
+ populateMultimapForKeys(multimap, elements);
+ return multimap.keys();
+ }
+ })
+ .named("LinkedHashMultimap.keys")
+ .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER)
+ .createTestSuite());
+
+ suite.addTest(MultisetTestSuiteBuilder.using(
+ new TestStringMultisetGenerator() {
+ @Override protected Multiset<String> create(String[] elements) {
+ Multimap<String, Integer> multimap
+ = TreeMultimap.create(Ordering.natural().nullsFirst(),
+ Ordering.natural().nullsLast());
+ populateMultimapForKeys(multimap, elements);
+ return multimap.keys();
+ }
+
+ @Override public List<String> order(List<String> insertionOrder) {
+ Collections.sort(insertionOrder, Ordering.natural().nullsFirst());
+ return insertionOrder;
+ }
+ })
+ .named("TreeMultimap.keys")
+ .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER)
+ .createTestSuite());
+
+ suite.addTest(MultisetTestSuiteBuilder.using(
+ new TestStringMultisetGenerator() {
+ @Override protected Multiset<String> create(String[] elements) {
+ Multimap<String, Integer> multimap
+ = ArrayListMultimap.create();
+ populateMultimapForKeys(multimap, elements);
+ return multimap.keys();
+ }
+ })
+ .named("ArrayListMultimap.keys")
+ .withFeatures(COLLECTION_FEATURES_REMOVE)
+ .createTestSuite());
+
+ suite.addTest(MultisetTestSuiteBuilder.using(
+ new TestStringMultisetGenerator() {
+ @Override protected Multiset<String> create(String[] elements) {
+ Multimap<String, Integer> multimap
+ = Multimaps.synchronizedListMultimap(
+ ArrayListMultimap.<String, Integer>create());
+ populateMultimapForKeys(multimap, elements);
+ return multimap.keys();
+ }
+ })
+ .named("synchronized ArrayListMultimap.keys")
+ .withFeatures(COLLECTION_FEATURES_REMOVE)
+ .createTestSuite());
+
+ suite.addTest(MultisetTestSuiteBuilder.using(
+ new TestStringMultisetGenerator() {
+ @Override protected Multiset<String> create(String[] elements) {
+ Multimap<String, Integer> multimap
+ = LinkedListMultimap.create();
+ populateMultimapForKeys(multimap, elements);
+ return multimap.keys();
+ }
+ })
+ .named("LinkedListMultimap.keys")
+ .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER)
+ .createTestSuite());
+
+ suite.addTest(MultisetTestSuiteBuilder.using(
+ new TestStringMultisetGenerator() {
+ @Override protected Multiset<String> create(String[] elements) {
+ ImmutableListMultimap.Builder<String, Integer> builder
+ = ImmutableListMultimap.builder();
+ for (int i = 0; i < elements.length; i++) {
+ builder.put(elements[i], i);
+ }
+ Multimap<String, Integer> multimap = builder.build();
+ return multimap.keys();
+ }
+ })
+ .named("ImmutableListMultimap.keys")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .createTestSuite());
+
+ suite.addTest(MultisetTestSuiteBuilder.using(
+ new TestStringMultisetGenerator() {
+ @Override protected Multiset<String> create(String[] elements) {
+ PopulatableMapAsMultimap<String, Integer> multimap
+ = PopulatableMapAsMultimap.create();
+ populateMultimapForKeys(multimap, elements);
+ return multimap.build().keys();
+ }
+ })
+ .named("Multimaps.forMap.keys")
+ .withFeatures(FOR_MAP_FEATURES_ANY)
+ .suppressing(getReadsDuplicateInitializingMethods())
+ .suppressing(getSetCountDuplicateInitializingMethods())
+ .createTestSuite());
+
+ suite.addTest(CollectionTestSuiteBuilder.using(
+ new TestEntrySetGenerator() {
+ @Override SetMultimap<String, Integer> createMultimap() {
+ return HashMultimap.create();
+ }
+ })
+ .named("HashMultimap.entries")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.REMOVE_OPERATIONS)
+ .createTestSuite());
+
+ suite.addTest(CollectionTestSuiteBuilder.using(
+ new TestEntrySetGenerator() {
+ @Override SetMultimap<String, Integer> createMultimap() {
+ return LinkedHashMultimap.create();
+ }
+ })
+ .named("LinkedHashMultimap.entries")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.REMOVE_OPERATIONS,
+ CollectionFeature.KNOWN_ORDER)
+ .createTestSuite());
+
+ suite.addTest(CollectionTestSuiteBuilder.using(
+ new TestEntrySetGenerator() {
+ @Override SetMultimap<String, Integer> createMultimap() {
+ return TreeMultimap.create(Ordering.natural().nullsFirst(),
+ Ordering.natural().nullsLast());
+ }
+ })
+ .named("TreeMultimap.entries")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.REMOVE_OPERATIONS,
+ CollectionFeature.KNOWN_ORDER)
+ .createTestSuite());
+
+ suite.addTest(CollectionTestSuiteBuilder.using(
+ new TestEntriesGenerator() {
+ @Override Multimap<String, Integer> createMultimap() {
+ return ArrayListMultimap.create();
+ }
+ })
+ .named("ArrayListMultimap.entries")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.REMOVE_OPERATIONS)
+ .createTestSuite());
+
+ suite.addTest(CollectionTestSuiteBuilder.using(
+ new TestEntriesGenerator() {
+ @Override Multimap<String, Integer> createMultimap() {
+ return Multimaps.synchronizedListMultimap(
+ ArrayListMultimap.<String, Integer>create());
+ }
+ })
+ .named("synchronized ArrayListMultimap.entries")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.REMOVE_OPERATIONS)
+ .createTestSuite());
+
+ suite.addTest(CollectionTestSuiteBuilder.using(
+ new TestEntriesGenerator() {
+ @Override Multimap<String, Integer> createMultimap() {
+ return LinkedListMultimap.create();
+ }
+ })
+ .named("LinkedListMultimap.entries")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.REMOVE_OPERATIONS,
+ CollectionFeature.KNOWN_ORDER)
+ .createTestSuite());
+
+ suite.addTest(CollectionTestSuiteBuilder.using(
+ new TestEntriesGenerator() {
+ @Override Multimap<String, Integer> createMultimap() {
+ return ImmutableListMultimap.of();
+ }
+
+ @Override public Collection<Entry<String, Integer>> create(
+ Object... elements) {
+ ImmutableListMultimap.Builder<String, Integer> builder
+ = ImmutableListMultimap.builder();
+ for (Object element : elements) {
+ @SuppressWarnings("unchecked")
+ Entry<String, Integer> entry = (Entry<String, Integer>) element;
+ builder.put(entry.getKey(), entry.getValue());
+ }
+ return builder.build().entries();
+ }
+ })
+ .named("ImmutableListMultimap.entries")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .createTestSuite());
+
+ // TODO: use collection testers on Multimaps.forMap.entries
+
+ return suite;
+ }
+}
diff --git a/test/com/google/common/collect/MultimapsTest.java b/test/com/google/common/collect/MultimapsTest.java
new file mode 100644
index 0000000..63b896a
--- /dev/null
+++ b/test/com/google/common/collect/MultimapsTest.java
@@ -0,0 +1,555 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.base.Functions;
+import com.google.common.base.Supplier;
+import static com.google.common.collect.Sets.newHashSet;
+import static com.google.common.collect.testing.Helpers.assertContentsAnyOrder;
+import static com.google.common.collect.testing.IteratorFeature.MODIFIABLE;
+import com.google.common.collect.testing.IteratorTester;
+import com.google.common.collect.testing.google.UnmodifiableCollectionTests;
+import com.google.common.testutils.SerializableTester;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import static java.util.Arrays.asList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Queue;
+import java.util.RandomAccess;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.SortedSet;
+import java.util.TreeSet;
+import java.util.concurrent.ArrayBlockingQueue;
+
+import javax.annotation.Nullable;
+
+/**
+ * Unit test for {@code Multimaps}.
+ *
+ * @author Jared Levy
+ */
+public class MultimapsTest extends AbstractMultimapTest {
+ private static final Comparator<Integer> INT_COMPARATOR =
+ Ordering.<Integer>natural().reverse().nullsFirst();
+
+ @Override protected Multimap<String, Integer> create() {
+ return Multimaps.synchronizedSetMultimap(
+ HashMultimap.<String, Integer>create());
+ }
+
+ public void testUnmodifiableArrayListMultimap() {
+ checkUnmodifiableMultimap(
+ ArrayListMultimap.<String, Integer>create(), true);
+ }
+
+ public void testUnmodifiableArrayListMultimapRandomAccess() {
+ ListMultimap<String, Integer> delegate = ArrayListMultimap.create();
+ delegate.put("foo", 1);
+ delegate.put("foo", 3);
+ ListMultimap<String, Integer> multimap
+ = Multimaps.unmodifiableListMultimap(delegate);
+ assertTrue(multimap.get("foo") instanceof RandomAccess);
+ assertTrue(multimap.get("bar") instanceof RandomAccess);
+ }
+
+ public void testUnmodifiableLinkedListMultimapRandomAccess() {
+ ListMultimap<String, Integer> delegate = LinkedListMultimap.create();
+ delegate.put("foo", 1);
+ delegate.put("foo", 3);
+ ListMultimap<String, Integer> multimap
+ = Multimaps.unmodifiableListMultimap(delegate);
+ assertFalse(multimap.get("foo") instanceof RandomAccess);
+ assertFalse(multimap.get("bar") instanceof RandomAccess);
+ }
+
+ public void testUnmodifiableHashMultimap() {
+ checkUnmodifiableMultimap(HashMultimap.<String, Integer>create(), false);
+ }
+
+ public void testUnmodifiableTreeMultimap() {
+ checkUnmodifiableMultimap(
+ TreeMultimap.<String, Integer>create(), false, "null", 42);
+ }
+
+ public void testUnmodifiableSynchronizedArrayListMultimap() {
+ checkUnmodifiableMultimap(Multimaps.synchronizedListMultimap(
+ ArrayListMultimap.<String, Integer>create()), true);
+ }
+
+ public void testUnmodifiableSynchronizedHashMultimap() {
+ checkUnmodifiableMultimap(Multimaps.synchronizedSetMultimap(
+ HashMultimap.<String, Integer>create()), false);
+ }
+
+ public void testUnmodifiableSynchronizedTreeMultimap() {
+ TreeMultimap<String, Integer> delegate
+ = TreeMultimap.create(Ordering.<String>natural(), INT_COMPARATOR);
+ SortedSetMultimap<String, Integer> multimap
+ = Multimaps.synchronizedSortedSetMultimap(delegate);
+ checkUnmodifiableMultimap(multimap, false, "null", 42);
+ assertSame(INT_COMPARATOR, multimap.valueComparator());
+ }
+
+ public void testUnmodifiableMultimapIsView() {
+ Multimap<String, Integer> mod = HashMultimap.create();
+ Multimap<String, Integer> unmod = Multimaps.unmodifiableMultimap(mod);
+ assertEquals(mod, unmod);
+ mod.put("foo", 1);
+ assertTrue(unmod.containsEntry("foo", 1));
+ assertEquals(mod, unmod);
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testUnmodifiableMultimapEntries() {
+ Multimap<String, Integer> mod = HashMultimap.create();
+ Multimap<String, Integer> unmod = Multimaps.unmodifiableMultimap(mod);
+ mod.put("foo", 1);
+ Entry<String, Integer> entry = unmod.entries().iterator().next();
+ try {
+ entry.setValue(2);
+ fail("UnsupportedOperationException expected");
+ } catch (UnsupportedOperationException expected) {}
+ entry = (Entry<String, Integer>) unmod.entries().toArray()[0];
+ try {
+ entry.setValue(2);
+ fail("UnsupportedOperationException expected");
+ } catch (UnsupportedOperationException expected) {}
+ Entry<String, Integer>[] array
+ = (Entry<String, Integer>[]) new Entry<?, ?>[2];
+ assertSame(array, unmod.entries().toArray(array));
+ try {
+ array[0].setValue(2);
+ fail("UnsupportedOperationException expected");
+ } catch (UnsupportedOperationException expected) {}
+ assertFalse(unmod.entries().contains(MapsTest.nefariousEntry("pwnd", 2)));
+ assertFalse(unmod.keys().contains("pwnd"));
+ }
+
+ /**
+ * The supplied multimap will be mutated and an unmodifiable instance used
+ * in its stead. The multimap must support null keys and values.
+ */
+ private static void checkUnmodifiableMultimap(
+ Multimap<String, Integer> multimap, boolean permitsDuplicates) {
+ checkUnmodifiableMultimap(multimap, permitsDuplicates, null, null);
+ }
+
+ /**
+ * The supplied multimap will be mutated and an unmodifiable instance used
+ * in its stead. If the multimap does not support null keys or values,
+ * alternatives may be specified for tests involving nulls.
+ */
+ private static void checkUnmodifiableMultimap(
+ Multimap<String, Integer> multimap, boolean permitsDuplicates,
+ @Nullable String nullKey, @Nullable Integer nullValue) {
+ multimap.clear();
+ multimap.put("foo", 1);
+ multimap.put("foo", 2);
+ multimap.put("foo", 3);
+ multimap.put("bar", 5);
+ multimap.put("bar", -1);
+ multimap.put(nullKey, nullValue);
+ multimap.put("foo", nullValue);
+ multimap.put(nullKey, 5);
+ multimap.put("foo", 2);
+
+ if (permitsDuplicates) {
+ assertEquals(9, multimap.size());
+ } else {
+ assertEquals(8, multimap.size());
+ }
+
+ Multimap<String, Integer> unmodifiable;
+ if (multimap instanceof SortedSetMultimap) {
+ unmodifiable = Multimaps.unmodifiableSortedSetMultimap(
+ (SortedSetMultimap<String, Integer>) multimap);
+ } else if (multimap instanceof SetMultimap) {
+ unmodifiable = Multimaps.unmodifiableSetMultimap(
+ (SetMultimap<String, Integer>) multimap);
+ } else if (multimap instanceof ListMultimap) {
+ unmodifiable = Multimaps.unmodifiableListMultimap(
+ (ListMultimap<String, Integer>) multimap);
+ } else {
+ unmodifiable = Multimaps.unmodifiableMultimap(multimap);
+ }
+
+ UnmodifiableCollectionTests.assertMultimapIsUnmodifiable(
+ unmodifiable, "test", 123);
+
+ assertUnmodifiableIterableInTandem(
+ unmodifiable.keys(), multimap.keys());
+
+ assertUnmodifiableIterableInTandem(
+ unmodifiable.keySet(), multimap.keySet());
+
+ assertUnmodifiableIterableInTandem(
+ unmodifiable.entries(), multimap.entries());
+
+ assertUnmodifiableIterableInTandem(
+ unmodifiable.asMap().entrySet(), multimap.asMap().entrySet());
+
+ assertEquals(multimap.toString(), unmodifiable.toString());
+ assertEquals(multimap.hashCode(), unmodifiable.hashCode());
+ assertEquals(multimap, unmodifiable);
+
+ assertContentsAnyOrder(unmodifiable.asMap().get("bar"), 5, -1);
+ assertNull(unmodifiable.asMap().get("missing"));
+
+ assertFalse(unmodifiable.entries() instanceof Serializable);
+ assertFalse(unmodifiable.asMap().values() instanceof Serializable);
+
+ SerializableTester.reserializeAndAssert(unmodifiable);
+ }
+
+ private static <T> void assertUnmodifiableIterableInTandem(
+ Iterable<T> unmodifiable, Iterable<T> modifiable) {
+ UnmodifiableCollectionTests.assertIteratorIsUnmodifiable(
+ unmodifiable.iterator());
+ UnmodifiableCollectionTests.assertIteratorsInOrder(
+ unmodifiable.iterator(), modifiable.iterator());
+ }
+
+ public void testInvertFrom() {
+ ImmutableMultimap<Integer, String> empty = ImmutableMultimap.of();
+
+ // typical usage example - sad that ArrayListMultimap.create() won't work
+ Multimap<String, Integer> multimap = Multimaps.invertFrom(empty,
+ ArrayListMultimap.<String, Integer>create());
+ assertTrue(multimap.isEmpty());
+
+ ImmutableMultimap<Integer, String> single
+ = new ImmutableMultimap.Builder<Integer, String>()
+ .put(1, "one")
+ .put(2, "two")
+ .build();
+
+ // copy into existing multimap
+ assertSame(multimap, Multimaps.invertFrom(single, multimap));
+
+ ImmutableMultimap<String, Integer> expected
+ = new ImmutableMultimap.Builder<String, Integer>()
+ .put("one", 1)
+ .put("two", 2)
+ .build();
+
+ assertEquals(expected, multimap);
+ }
+
+ public void testForMap() {
+ Map<String, Integer> map = Maps.newHashMap();
+ map.put("foo", 1);
+ map.put("bar", 2);
+ Multimap<String, Integer> multimap = HashMultimap.create();
+ multimap.put("foo", 1);
+ multimap.put("bar", 2);
+ Multimap<String, Integer> multimapView = Multimaps.forMap(map);
+ assertTrue(multimap.equals(multimapView));
+ assertTrue(multimapView.equals(multimap));
+ assertTrue(multimapView.equals(multimapView));
+ assertFalse(multimapView.equals(map));
+ Multimap<String, Integer> multimap2 = HashMultimap.create();
+ multimap2.put("foo", 1);
+ assertFalse(multimapView.equals(multimap2));
+ multimap2.put("bar", 1);
+ assertFalse(multimapView.equals(multimap2));
+ ListMultimap<String, Integer> listMultimap
+ = new ImmutableListMultimap.Builder<String, Integer>()
+ .put("foo", 1).put("bar", 2).build();
+ assertFalse("SetMultimap equals ListMultimap",
+ multimapView.equals(listMultimap));
+ assertEquals(multimap.toString(), multimapView.toString());
+ assertEquals(multimap.hashCode(), multimapView.hashCode());
+ assertEquals(multimap.size(), multimapView.size());
+ assertTrue(multimapView.containsKey("foo"));
+ assertTrue(multimapView.containsValue(1));
+ assertTrue(multimapView.containsEntry("bar", 2));
+ assertEquals(Collections.singleton(1), multimapView.get("foo"));
+ assertEquals(Collections.singleton(2), multimapView.get("bar"));
+ SerializableTester.reserializeAndAssert(multimapView);
+ try {
+ multimapView.put("baz", 3);
+ fail("UnsupportedOperationException expected");
+ } catch (UnsupportedOperationException expected) {}
+ try {
+ multimapView.putAll("baz", Collections.singleton(3));
+ fail("UnsupportedOperationException expected");
+ } catch (UnsupportedOperationException expected) {}
+ try {
+ multimapView.putAll(multimap);
+ fail("UnsupportedOperationException expected");
+ } catch (UnsupportedOperationException expected) {}
+ try {
+ multimapView.replaceValues("foo", Collections.<Integer>emptySet());
+ fail("UnsupportedOperationException expected");
+ } catch (UnsupportedOperationException expected) {}
+ multimapView.remove("bar", 2);
+ assertFalse(multimapView.containsKey("bar"));
+ assertFalse(map.containsKey("bar"));
+ assertEquals(map.keySet(), multimapView.keySet());
+ assertEquals(map.keySet(), multimapView.keys().elementSet());
+ assertContentsAnyOrder(multimapView.keys(), "foo");
+ assertContentsAnyOrder(multimapView.values(), 1);
+ assertContentsAnyOrder(multimapView.entries(),
+ Maps.immutableEntry("foo", 1));
+ assertContentsAnyOrder(multimapView.asMap().entrySet(),
+ Maps.immutableEntry("foo", Collections.singleton(1)));
+ multimapView.clear();
+ assertFalse(multimapView.containsKey("foo"));
+ assertFalse(map.containsKey("foo"));
+ assertTrue(map.isEmpty());
+ assertTrue(multimapView.isEmpty());
+ multimap.clear();
+ assertEquals(multimap.toString(), multimapView.toString());
+ assertEquals(multimap.hashCode(), multimapView.hashCode());
+ assertEquals(multimap.size(), multimapView.size());
+ assertEquals(multimapView, ArrayListMultimap.create());
+ }
+
+ public void testForMapRemoveAll() {
+ Map<String, Integer> map = Maps.newHashMap();
+ map.put("foo", 1);
+ map.put("bar", 2);
+ map.put("cow", 3);
+ Multimap<String, Integer> multimap = Multimaps.forMap(map);
+ assertEquals(3, multimap.size());
+ assertEquals(Collections.emptySet(), multimap.removeAll("dog"));
+ assertEquals(3, multimap.size());
+ assertTrue(multimap.containsKey("bar"));
+ assertEquals(Collections.singleton(2), multimap.removeAll("bar"));
+ assertEquals(2, multimap.size());
+ assertFalse(multimap.containsKey("bar"));
+ }
+
+ public void testForMapAsMap() {
+ Map<String, Integer> map = Maps.newHashMap();
+ map.put("foo", 1);
+ map.put("bar", 2);
+ Map<String, Collection<Integer>> asMap = Multimaps.forMap(map).asMap();
+ assertEquals(Collections.singleton(1), asMap.get("foo"));
+ assertNull(asMap.get("cow"));
+ assertTrue(asMap.containsKey("foo"));
+ assertFalse(asMap.containsKey("cow"));
+
+ Set<Entry<String, Collection<Integer>>> entries = asMap.entrySet();
+ assertFalse(entries.contains(4.5));
+ assertFalse(entries.remove(4.5));
+ assertFalse(entries.contains(Maps.immutableEntry("foo",
+ Collections.singletonList(1))));
+ assertFalse(entries.remove(Maps.immutableEntry("foo",
+ Collections.singletonList(1))));
+ assertFalse(entries.contains(Maps.immutableEntry("foo",
+ Sets.newLinkedHashSet(asList(1, 2)))));
+ assertFalse(entries.remove(Maps.immutableEntry("foo",
+ Sets.newLinkedHashSet(asList(1, 2)))));
+ assertFalse(entries.contains(Maps.immutableEntry("foo",
+ Collections.singleton(2))));
+ assertFalse(entries.remove(Maps.immutableEntry("foo",
+ Collections.singleton(2))));
+ assertTrue(map.containsKey("foo"));
+ assertTrue(entries.contains(Maps.immutableEntry("foo",
+ Collections.singleton(1))));
+ assertTrue(entries.remove(Maps.immutableEntry("foo",
+ Collections.singleton(1))));
+ assertFalse(map.containsKey("foo"));
+ }
+
+ public void testForMapGetIteration() throws Exception {
+ IteratorTester<Integer> tester =
+ new IteratorTester<Integer>(4, MODIFIABLE, newHashSet(1),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ private Multimap<String, Integer> multimap;
+
+ @Override protected Iterator<Integer> newTargetIterator() {
+ Map<String, Integer> map = Maps.newHashMap();
+ map.put("foo", 1);
+ map.put("bar", 2);
+ multimap = Multimaps.forMap(map);
+ return multimap.get("foo").iterator();
+ }
+
+ @Override protected void verify(List<Integer> elements) {
+ assertEquals(newHashSet(elements), multimap.get("foo"));
+ }
+ };
+
+ tester.ignoreSunJavaBug6529795();
+ tester.test();
+ }
+
+ private enum Color {BLUE, RED, YELLOW, GREEN}
+
+ private static abstract class CountingSupplier<E>
+ implements Supplier<E>, Serializable {
+ int count;
+
+ abstract E getImpl();
+
+ public E get() {
+ count++;
+ return getImpl();
+ }
+ }
+
+ private static class QueueSupplier extends CountingSupplier<Queue<Integer>> {
+ @Override public Queue<Integer> getImpl() {
+ return new ArrayBlockingQueue<Integer>(10);
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ public void testNewMultimap() {
+ // The ubiquitous EnumArrayBlockingQueueMultimap
+ CountingSupplier<Queue<Integer>> factory = new QueueSupplier();
+
+ Map<Color, Collection<Integer>> map = Maps.newEnumMap(Color.class);
+ Multimap<Color, Integer> multimap = Multimaps.newMultimap(map, factory);
+ assertEquals(0, factory.count);
+ multimap.putAll(Color.BLUE, asList(3, 1, 4));
+ assertEquals(1, factory.count);
+ multimap.putAll(Color.RED, asList(2, 7, 1, 8));
+ assertEquals(2, factory.count);
+ assertEquals("[3, 1, 4]", multimap.get(Color.BLUE).toString());
+ /*
+ * reserializeAndAssert fails since ArrayBlockingQueue doesn't override
+ * equals()
+ */
+ SerializableTester.reserialize(multimap);
+
+ Multimap<Color, Integer> ummodifiable =
+ Multimaps.unmodifiableMultimap(multimap);
+ assertEquals("[3, 1, 4]", ummodifiable.get(Color.BLUE).toString());
+
+ Collection<Integer> collection = multimap.get(Color.BLUE);
+ assertEquals(collection, collection);
+
+ assertFalse(multimap.keySet() instanceof SortedSet);
+ assertFalse(multimap.asMap() instanceof SortedMap);
+ }
+
+ private static class ListSupplier extends
+ CountingSupplier<LinkedList<Integer>> {
+ @Override public LinkedList<Integer> getImpl() {
+ return new LinkedList<Integer>();
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ public void testNewListMultimap() {
+ CountingSupplier<LinkedList<Integer>> factory = new ListSupplier();
+ Map<Color, Collection<Integer>> map = Maps.newTreeMap();
+ ListMultimap<Color, Integer> multimap =
+ Multimaps.newListMultimap(map, factory);
+ assertEquals(0, factory.count);
+ multimap.putAll(Color.BLUE, asList(3, 1, 4, 1));
+ assertEquals(1, factory.count);
+ multimap.putAll(Color.RED, asList(2, 7, 1, 8));
+ assertEquals(2, factory.count);
+ assertEquals("{BLUE=[3, 1, 4, 1], RED=[2, 7, 1, 8]}", multimap.toString());
+ assertFalse(multimap.get(Color.BLUE) instanceof RandomAccess);
+ SerializableTester.reserializeAndAssert(multimap);
+
+ assertTrue(multimap.keySet() instanceof SortedSet);
+ assertTrue(multimap.asMap() instanceof SortedMap);
+ }
+
+ private static class SetSupplier extends CountingSupplier<HashSet<Integer>> {
+ @Override public HashSet<Integer> getImpl() {
+ return new HashSet<Integer>(4);
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ public void testNewSetMultimap() {
+ CountingSupplier<HashSet<Integer>> factory = new SetSupplier();
+ Map<Color, Collection<Integer>> map = Maps.newHashMap();
+ SetMultimap<Color, Integer> multimap =
+ Multimaps.newSetMultimap(map, factory);
+ assertEquals(0, factory.count);
+ multimap.putAll(Color.BLUE, asList(3, 1, 4));
+ assertEquals(1, factory.count);
+ multimap.putAll(Color.RED, asList(2, 7, 1, 8));
+ assertEquals(2, factory.count);
+ assertEquals(Sets.newHashSet(4, 3, 1), multimap.get(Color.BLUE));
+ SerializableTester.reserializeAndAssert(multimap);
+ }
+
+ private static class SortedSetSupplier extends
+ CountingSupplier<TreeSet<Integer>> {
+ @Override public TreeSet<Integer> getImpl() {
+ return Sets.newTreeSet(INT_COMPARATOR);
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ public void testNewSortedSetMultimap() {
+ CountingSupplier<TreeSet<Integer>> factory = new SortedSetSupplier();
+ Map<Color, Collection<Integer>> map = Maps.newEnumMap(Color.class);
+ SortedSetMultimap<Color, Integer> multimap =
+ Multimaps.newSortedSetMultimap(map, factory);
+ // newSortedSetMultimap calls the factory once to determine the comparator.
+ assertEquals(1, factory.count);
+ multimap.putAll(Color.BLUE, asList(3, 1, 4));
+ assertEquals(2, factory.count);
+ multimap.putAll(Color.RED, asList(2, 7, 1, 8));
+ assertEquals(3, factory.count);
+ assertEquals("[4, 3, 1]", multimap.get(Color.BLUE).toString());
+ SerializableTester.reserializeAndAssert(multimap);
+ assertEquals(INT_COMPARATOR, multimap.valueComparator());
+ }
+
+ public void testIndex() {
+ final Multimap<String, Object> stringToObject =
+ new ImmutableMultimap.Builder<String, Object>()
+ .put("1", 1)
+ .put("1", 1L)
+ .put("1", "1")
+ .put("2", 2)
+ .put("2", 2L)
+ .build();
+
+ ImmutableMultimap<String, Object> outputMap =
+ Multimaps.index(stringToObject.values(),
+ Functions.toStringFunction());
+ assertEquals(stringToObject, outputMap);
+ }
+
+ public void testIndex_nullValue() {
+ List<Integer> values = Arrays.asList(1, null);
+ try {
+ Multimaps.index(values, Functions.identity());
+ fail();
+ } catch (NullPointerException e) {}
+ }
+
+ public void testIndex_nullKey() {
+ List<Integer> values = Arrays.asList(1, 2);
+ try {
+ Multimaps.index(values, Functions.constant(null));
+ fail();
+ } catch (NullPointerException e) {}
+ }
+}
diff --git a/test/com/google/common/collect/MultisetCollectionTest.java b/test/com/google/common/collect/MultisetCollectionTest.java
new file mode 100644
index 0000000..a2d5688
--- /dev/null
+++ b/test/com/google/common/collect/MultisetCollectionTest.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.testing.AnEnum;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.google.AbstractMultisetSetCountTester.getSetCountDuplicateInitializingMethods;
+import static com.google.common.collect.testing.google.MultisetReadsTester.getReadsDuplicateInitializingMethods;
+import com.google.common.collect.testing.google.MultisetTestSuiteBuilder;
+import com.google.common.collect.testing.google.TestEnumMultisetGenerator;
+import com.google.common.collect.testing.google.TestStringMultisetGenerator;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import static java.util.Arrays.asList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Collection tests for {@link Multiset} implementations.
+ *
+ * @author Jared Levy
+ */
+public class MultisetCollectionTest extends TestCase {
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite();
+
+ suite.addTest(MultisetTestSuiteBuilder.using(hashMultisetGenerator())
+ .withFeatures(CollectionSize.ANY,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionFeature.GENERAL_PURPOSE)
+ .named("HashMultiset")
+ .createTestSuite());
+
+ suite.addTest(MultisetTestSuiteBuilder.using(
+ unmodifiableMultisetGenerator())
+ .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+ .named("UnmodifiableTreeMultiset")
+ .createTestSuite());
+
+ suite.addTest(MultisetTestSuiteBuilder.using(forSetGenerator())
+ .withFeatures(CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionFeature.REMOVE_OPERATIONS)
+ .suppressing(getReadsDuplicateInitializingMethods())
+ .suppressing(getSetCountDuplicateInitializingMethods())
+ .named("ForSetMultiset")
+ .createTestSuite());
+
+ suite.addTest(MultisetTestSuiteBuilder.using(
+ concurrentMultisetGenerator())
+ .withFeatures(CollectionSize.ANY,
+ CollectionFeature.GENERAL_PURPOSE)
+ .named("ConcurrentHashMultiset")
+ .createTestSuite());
+
+ suite.addTest(MultisetTestSuiteBuilder.using(enumMultisetGenerator())
+ .withFeatures(CollectionSize.ANY,
+ CollectionFeature.KNOWN_ORDER,
+ CollectionFeature.GENERAL_PURPOSE)
+ .named("EnumMultiset")
+ .createTestSuite());
+
+ return suite;
+ }
+
+ private static TestStringMultisetGenerator hashMultisetGenerator() {
+ return new TestStringMultisetGenerator() {
+ @Override protected Multiset<String> create(String[] elements) {
+ return HashMultiset.create(asList(elements));
+ }
+ };
+ }
+
+ private static TestStringMultisetGenerator unmodifiableMultisetGenerator() {
+ return new TestStringMultisetGenerator() {
+ @Override protected Multiset<String> create(String[] elements) {
+ return Multisets.unmodifiableMultiset(
+ TreeMultiset.create(asList(elements)));
+ }
+ @Override public List<String> order(List<String> insertionOrder) {
+ Collections.sort(insertionOrder);
+ return insertionOrder;
+ }
+ };
+ }
+
+ private static TestStringMultisetGenerator forSetGenerator() {
+ return new TestStringMultisetGenerator() {
+ @Override protected Multiset<String> create(String[] elements) {
+ return Multisets.forSet(Sets.newHashSet(elements));
+ }
+ };
+ }
+
+ private static TestStringMultisetGenerator concurrentMultisetGenerator() {
+ return new TestStringMultisetGenerator() {
+ @Override protected Multiset<String> create(String[] elements) {
+ return ConcurrentHashMultiset.create(asList(elements));
+ }
+ };
+ }
+
+ private static TestEnumMultisetGenerator enumMultisetGenerator() {
+ return new TestEnumMultisetGenerator() {
+ @Override protected Multiset<AnEnum> create(AnEnum[] elements) {
+ return (elements.length == 0)
+ ? EnumMultiset.create(AnEnum.class)
+ : EnumMultiset.create(asList(elements));
+ }
+ };
+ }
+}
+
diff --git a/test/com/google/common/collect/MultisetsImmutableEntryTest.java b/test/com/google/common/collect/MultisetsImmutableEntryTest.java
new file mode 100644
index 0000000..1daad1a
--- /dev/null
+++ b/test/com/google/common/collect/MultisetsImmutableEntryTest.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.Multiset.Entry;
+
+import junit.framework.TestCase;
+
+import java.util.Collections;
+
+/**
+ * Tests for {@link Multisets#immutableEntry}.
+ *
+ * @author Mike Bostock
+ */
+public class MultisetsImmutableEntryTest extends TestCase {
+ private static final String NE = null;
+
+ private static <E> Entry<E> entry(final E element, final int count) {
+ return Multisets.immutableEntry(element, count);
+ }
+
+ private static <E> Entry<E> control(E element, int count) {
+ return HashMultiset.create(Collections.nCopies(count, element))
+ .entrySet().iterator().next();
+ }
+
+ public void testToString() {
+ assertEquals("foo", entry("foo", 1).toString());
+ assertEquals("bar x 2", entry("bar", 2).toString());
+ }
+
+ public void testToStringNull() {
+ assertEquals("null", entry(NE, 1).toString());
+ assertEquals("null x 2", entry(NE, 2).toString());
+ }
+
+ public void testEquals() {
+ assertEquals(control("foo", 1), entry("foo", 1));
+ assertEquals(control("bar", 2), entry("bar", 2));
+ assertFalse(control("foo", 1).equals(entry("foo", 2)));
+ assertFalse(entry("foo", 1).equals(control("bar", 1)));
+ assertFalse(entry("foo", 1).equals(new Object()));
+ assertFalse(entry("foo", 1).equals(null));
+ }
+
+ public void testEqualsNull() {
+ assertEquals(control(NE, 1), entry(NE, 1));
+ assertFalse(control(NE, 1).equals(entry(NE, 2)));
+ assertFalse(entry(NE, 1).equals(control("bar", 1)));
+ assertFalse(entry(NE, 1).equals(new Object()));
+ assertFalse(entry(NE, 1).equals(null));
+ }
+
+ public void testHashCode() {
+ assertEquals(control("foo", 1).hashCode(), entry("foo", 1).hashCode());
+ assertEquals(control("bar", 2).hashCode(), entry("bar", 2).hashCode());
+ }
+
+ public void testHashCodeNull() {
+ assertEquals(control(NE, 1).hashCode(), entry(NE, 1).hashCode());
+ }
+
+ public void testNegativeCount() {
+ try {
+ entry("foo", -1);
+ fail();
+ } catch (IllegalArgumentException expected) {}
+ }
+}
diff --git a/test/com/google/common/collect/MultisetsTest.java b/test/com/google/common/collect/MultisetsTest.java
new file mode 100644
index 0000000..9527094
--- /dev/null
+++ b/test/com/google/common/collect/MultisetsTest.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.SetsTest.Derived;
+import static com.google.common.collect.testing.Helpers.assertContentsAnyOrder;
+import com.google.common.testing.junit3.JUnitAsserts;
+import static com.google.common.testutils.SerializableTester.reserializeAndAssert;
+
+import junit.framework.TestCase;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Tests for {@link Multisets}.
+ *
+ * @author Mike Bostock
+ * @author Jared Levy
+ */
+public class MultisetsTest extends TestCase {
+
+ /* See MultisetsImmutableEntryTest for immutableEntry() tests. */
+
+ public void testForSet() {
+ Set<String> set = new HashSet<String>();
+ set.add("foo");
+ set.add("bar");
+ set.add(null);
+ Multiset<String> multiset = HashMultiset.create();
+ multiset.addAll(set);
+ Multiset<String> multisetView = Multisets.forSet(set);
+ assertTrue(multiset.equals(multisetView));
+ assertTrue(multisetView.equals(multiset));
+ assertEquals(multiset.toString(), multisetView.toString());
+ assertEquals(multiset.hashCode(), multisetView.hashCode());
+ assertEquals(multiset.size(), multisetView.size());
+ assertTrue(multisetView.contains("foo"));
+ assertEquals(set, multisetView.elementSet());
+ assertEquals(multisetView.elementSet(), set);
+ assertEquals(multiset.elementSet(), multisetView.elementSet());
+ assertEquals(multisetView.elementSet(), multiset.elementSet());
+ reserializeAndAssert(multisetView);
+ try {
+ multisetView.add("baz");
+ fail("UnsupportedOperationException expected");
+ } catch (UnsupportedOperationException expected) {}
+ try {
+ multisetView.addAll(Collections.singleton("baz"));
+ fail("UnsupportedOperationException expected");
+ } catch (UnsupportedOperationException expected) {}
+ try {
+ multisetView.elementSet().add("baz");
+ fail("UnsupportedOperationException expected");
+ } catch (UnsupportedOperationException expected) {}
+ try {
+ multisetView.elementSet().addAll(Collections.singleton("baz"));
+ fail("UnsupportedOperationException expected");
+ } catch (UnsupportedOperationException expected) {}
+ multisetView.remove("bar");
+ assertFalse(multisetView.contains("bar"));
+ assertFalse(set.contains("bar"));
+ assertEquals(set, multisetView.elementSet());
+ assertContentsAnyOrder(multisetView.elementSet(), "foo", null);
+ assertContentsAnyOrder(multisetView.entrySet(),
+ Multisets.immutableEntry("foo", 1), Multisets.immutableEntry(null, 1));
+ multisetView.clear();
+ assertFalse(multisetView.contains("foo"));
+ assertFalse(set.contains("foo"));
+ assertTrue(set.isEmpty());
+ assertTrue(multisetView.isEmpty());
+ multiset.clear();
+ assertEquals(multiset.toString(), multisetView.toString());
+ assertEquals(multiset.hashCode(), multisetView.hashCode());
+ assertEquals(multiset.size(), multisetView.size());
+ }
+
+ public void testNewTreeMultisetDerived() {
+ TreeMultiset<Derived> set = TreeMultiset.create();
+ assertTrue(set.isEmpty());
+ set.add(new Derived("foo"), 2);
+ set.add(new Derived("bar"), 3);
+ JUnitAsserts.assertContentsInOrder(set,
+ new Derived("bar"), new Derived("bar"), new Derived("bar"),
+ new Derived("foo"), new Derived("foo"));
+ }
+
+ public void testNewTreeMultisetNonGeneric() {
+ TreeMultiset<LegacyComparable> set = TreeMultiset.create();
+ assertTrue(set.isEmpty());
+ set.add(new LegacyComparable("foo"), 2);
+ set.add(new LegacyComparable("bar"), 3);
+ JUnitAsserts.assertContentsInOrder(set, new LegacyComparable("bar"),
+ new LegacyComparable("bar"), new LegacyComparable("bar"),
+ new LegacyComparable("foo"), new LegacyComparable("foo"));
+ }
+
+ public void testNewTreeMultisetComparator() {
+ TreeMultiset<String> multiset
+ = TreeMultiset.create(Collections.reverseOrder());
+ multiset.add("bar", 3);
+ multiset.add("foo", 2);
+ JUnitAsserts.assertContentsInOrder(
+ multiset, "foo", "foo", "bar", "bar", "bar");
+ }
+}
diff --git a/test/com/google/common/collect/MutableClassToInstanceMapTest.java b/test/com/google/common/collect/MutableClassToInstanceMapTest.java
new file mode 100644
index 0000000..7fe6565
--- /dev/null
+++ b/test/com/google/common/collect/MutableClassToInstanceMapTest.java
@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.ImmutableClassToInstanceMapTest.TestClassToInstanceMapGenerator;
+import com.google.common.collect.testing.MapTestSuiteBuilder;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.MapFeature;
+import com.google.common.collect.testing.testers.MapPutTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.lang.reflect.Method;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * Unit test of {@link MutableClassToInstanceMap}.
+ *
+ * @author Kevin Bourrillion
+ */
+public class MutableClassToInstanceMapTest extends TestCase {
+ public static Test suite() {
+ TestSuite suite = new TestSuite();
+ suite.addTestSuite(MutableClassToInstanceMapTest.class);
+
+ // Suppress this one because the tester framework doesn't understand that
+ // *some* remappings will be allowed and others not.
+ Method remapTest = null;
+ try {
+ remapTest = MapPutTester.class.getMethod(
+ "testPut_replaceNullValueWithNonNullSupported");
+ } catch (NoSuchMethodException e) {
+ throw new AssertionError();
+ }
+
+ suite.addTest(MapTestSuiteBuilder
+ .using(new TestClassToInstanceMapGenerator() {
+ // Other tests will verify what real, warning-free usage looks like
+ // but here we have to do some serious fudging
+ @SuppressWarnings("unchecked")
+ public Map<Class, Number> create(Object... elements) {
+ MutableClassToInstanceMap<Number> map
+ = MutableClassToInstanceMap.create();
+ for (Object object : elements) {
+ Entry<Class, Number> entry = (Entry<Class, Number>) object;
+ map.putInstance(entry.getKey(), entry.getValue());
+ }
+ return (Map) map;
+ }
+ })
+ .named("MutableClassToInstanceMap")
+ .withFeatures(
+ MapFeature.GENERAL_PURPOSE,
+ MapFeature.RESTRICTS_KEYS,
+ MapFeature.ALLOWS_NULL_VALUES,
+ CollectionSize.ANY)
+ .suppressing(remapTest)
+ .createTestSuite());
+
+ return suite;
+ }
+
+ private ClassToInstanceMap<Number> map;
+
+ @Override protected void setUp() throws Exception {
+ map = MutableClassToInstanceMap.create();
+ }
+
+ public void testConstraint() {
+
+ /**
+ * We'll give ourselves a pass on testing all the possible ways of
+ * breaking the constraint, because we know that newClassMap() is
+ * implemented using ConstrainedMap which is itself well-tested.
+ * A purist would object to this, but what can I say, we're dirty
+ * cheaters.
+ */
+
+ map.put(Integer.class, new Integer(5));
+ try {
+ map.put(Double.class, new Long(42));
+ fail();
+ } catch (ClassCastException expected) {
+ }
+ // Won't compile: map.put(String.class, "x");
+ }
+
+ public void testPutAndGetInstance() {
+ assertNull(map.putInstance(Integer.class, new Integer(5)));
+
+ Integer oldValue = map.putInstance(Integer.class, new Integer(7));
+ assertEquals(5, (int) oldValue);
+
+ Integer newValue = map.getInstance(Integer.class);
+ assertEquals(7, (int) newValue);
+
+ // Won't compile: map.putInstance(Double.class, new Long(42));
+ }
+
+ public void testNull() {
+ try {
+ map.put(null, new Integer(1));
+ fail();
+ } catch (NullPointerException expected) {
+ }
+ map.putInstance(Integer.class, null);
+ assertNull(map.get(Integer.class));
+ assertNull(map.getInstance(Integer.class));
+
+ map.put(Long.class, null);
+ assertNull(map.get(Long.class));
+ assertNull(map.getInstance(Long.class));
+ }
+
+ public void testPrimitiveAndWrapper() {
+ assertNull(map.getInstance(int.class));
+ assertNull(map.getInstance(Integer.class));
+
+ assertNull(map.putInstance(int.class, 0));
+ assertNull(map.putInstance(Integer.class, 1));
+ assertEquals(2, map.size());
+
+ assertEquals(0, (int) map.getInstance(int.class));
+ assertEquals(1, (int) map.getInstance(Integer.class));
+
+ assertEquals(0, (int) map.putInstance(int.class, null));
+ assertEquals(1, (int) map.putInstance(Integer.class, null));
+
+ assertNull(map.getInstance(int.class));
+ assertNull(map.getInstance(Integer.class));
+ assertEquals(2, map.size());
+ }
+}
diff --git a/test/com/google/common/collect/ObjectArraysTest.java b/test/com/google/common/collect/ObjectArraysTest.java
new file mode 100644
index 0000000..3087639
--- /dev/null
+++ b/test/com/google/common/collect/ObjectArraysTest.java
@@ -0,0 +1,187 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.testing.junit3.JUnitAsserts.assertContentsInOrder;
+import com.google.common.testutils.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Unit test for {@code ObjectArrays}.
+ *
+ * @author Kevin Bourrillion
+ */
+public class ObjectArraysTest extends TestCase {
+
+ public void testNullPointerExceptions() throws Exception {
+ NullPointerTester tester = new NullPointerTester();
+ tester.testAllPublicStaticMethods(ObjectArrays.class);
+ }
+
+ public void testNewArray_fromClass_Empty() {
+ String[] empty = ObjectArrays.newArray(String.class, 0);
+ assertEquals(String[].class, empty.getClass());
+ assertEquals(0, empty.length);
+ }
+
+ public void testNewArray_fromClass_Nonempty() {
+ String[] array = ObjectArrays.newArray(String.class, 2);
+ assertEquals(String[].class, array.getClass());
+ assertEquals(2, array.length);
+ assertNull(array[0]);
+ }
+
+ public void testNewArray_fromClass_OfArray() {
+ String[][] array = ObjectArrays.newArray(String[].class, 1);
+ assertEquals(String[][].class, array.getClass());
+ assertEquals(1, array.length);
+ assertNull(array[0]);
+ }
+
+ public void testNewArray_fromArray_Empty() {
+ String[] in = new String[0];
+ String[] empty = ObjectArrays.newArray(in, 0);
+ assertEquals(0, empty.length);
+ }
+
+ public void testNewArray_fromArray_Nonempty() {
+ String[] array = ObjectArrays.newArray(new String[0], 2);
+ assertEquals(String[].class, array.getClass());
+ assertEquals(2, array.length);
+ assertNull(array[0]);
+ }
+
+ public void testNewArray_fromArray_OfArray() {
+ String[][] array = ObjectArrays.newArray(new String[0][0], 1);
+ assertEquals(String[][].class, array.getClass());
+ assertEquals(1, array.length);
+ assertNull(array[0]);
+ }
+
+ public void testConcatEmptyEmpty() {
+ String[] result
+ = ObjectArrays.concat(new String[0], new String[0], String.class);
+ assertEquals(String[].class, result.getClass());
+ assertEquals(0, result.length);
+ }
+
+ public void testConcatEmptyNonempty() {
+ String[] result = ObjectArrays.concat(
+ new String[0], new String[] { "a", "b" }, String.class);
+ assertEquals(String[].class, result.getClass());
+ assertContentsInOrder(Arrays.asList(result), "a", "b");
+ }
+
+ public void testConcatNonemptyEmpty() {
+ String[] result = ObjectArrays.concat(
+ new String[] { "a", "b" }, new String[0], String.class);
+ assertEquals(String[].class, result.getClass());
+ assertContentsInOrder(Arrays.asList(result), "a", "b");
+ }
+
+ public void testConcatBasic() {
+ String[] result = ObjectArrays.concat(
+ new String[] { "a", "b" }, new String[] { "c", "d" }, String.class);
+ assertEquals(String[].class, result.getClass());
+ assertContentsInOrder(Arrays.asList(result), "a", "b", "c", "d");
+ }
+
+ public void testConcatWithMoreGeneralType() {
+ Serializable[] result
+ = ObjectArrays.concat(new String[0], new String[0], Serializable.class);
+ assertEquals(Serializable[].class, result.getClass());
+ }
+
+ public void testToArrayImpl1() {
+ doTestToArrayImpl1(Lists.<Integer>newArrayList());
+ doTestToArrayImpl1(Lists.newArrayList(1));
+ doTestToArrayImpl1(Lists.newArrayList(1, null, 3));
+ }
+
+ private void doTestToArrayImpl1(List<Integer> list) {
+ Object[] reference = list.toArray();
+ Object[] target = ObjectArrays.toArrayImpl(list);
+ assertEquals(reference.getClass(), target.getClass());
+ assertTrue(Arrays.equals(reference, target));
+ }
+
+ public void testToArrayImpl2() {
+ doTestToArrayImpl2(Lists.<Integer>newArrayList(), new Integer[0], false);
+ doTestToArrayImpl2(Lists.<Integer>newArrayList(), new Integer[1], true);
+
+ doTestToArrayImpl2(Lists.newArrayList(1), new Integer[0], false);
+ doTestToArrayImpl2(Lists.newArrayList(1), new Integer[1], true);
+ doTestToArrayImpl2(Lists.newArrayList(1), new Integer[] { 2, 3 }, true);
+
+ doTestToArrayImpl2(Lists.newArrayList(1, null, 3), new Integer[0], false);
+ doTestToArrayImpl2(Lists.newArrayList(1, null, 3), new Integer[2], false);
+ doTestToArrayImpl2(Lists.newArrayList(1, null, 3), new Integer[3], true);
+ }
+
+ private void doTestToArrayImpl2(List<Integer> list, Integer[] array1,
+ boolean expectModify) {
+ Integer[] starting = array1.clone();
+ Integer[] array2 = array1.clone();
+ Object[] reference = list.toArray(array1);
+
+ Object[] target = ObjectArrays.toArrayImpl(list, array2);
+
+ assertEquals(reference.getClass(), target.getClass());
+ assertTrue(Arrays.equals(reference, target));
+ assertTrue(Arrays.equals(reference, target));
+
+ Object[] expectedArray1 = expectModify ? reference : starting;
+ Object[] expectedArray2 = expectModify ? target : starting;
+ assertTrue(Arrays.equals(expectedArray1, array1));
+ assertTrue(Arrays.equals(expectedArray2, array2));
+ }
+
+ public void testPrependZeroElements() {
+ String[] result = ObjectArrays.concat("foo", new String[] {});
+ assertContentsInOrder(Arrays.asList(result), "foo");
+ }
+
+ public void testPrependOneElement() {
+ String[] result = ObjectArrays.concat("foo", new String[]{ "bar" });
+ assertContentsInOrder(Arrays.asList(result), "foo", "bar");
+ }
+
+ public void testPrependTwoElements() {
+ String[] result = ObjectArrays.concat("foo", new String[]{ "bar", "baz" });
+ assertContentsInOrder(Arrays.asList(result), "foo", "bar", "baz");
+ }
+
+ public void testAppendZeroElements() {
+ String[] result = ObjectArrays.concat(new String[] {}, "foo");
+ assertContentsInOrder(Arrays.asList(result), "foo");
+ }
+
+ public void testAppendOneElement() {
+ String[] result = ObjectArrays.concat(new String[]{ "foo" }, "bar");
+ assertContentsInOrder(Arrays.asList(result), "foo", "bar");
+ }
+
+ public void testAppendTwoElements() {
+ String[] result = ObjectArrays.concat(new String[]{ "foo", "bar" }, "baz");
+ assertContentsInOrder(Arrays.asList(result), "foo", "bar", "baz");
+ }
+}
diff --git a/test/com/google/common/collect/OrderingTest.java b/test/com/google/common/collect/OrderingTest.java
new file mode 100644
index 0000000..6fd113e
--- /dev/null
+++ b/test/com/google/common/collect/OrderingTest.java
@@ -0,0 +1,618 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
+import com.google.common.collect.Ordering.IncomparableValueException;
+import com.google.common.collect.testing.Helpers;
+import static com.google.common.testing.junit3.JUnitAsserts.assertContentsInOrder;
+import com.google.common.testutils.EqualsTester;
+import com.google.common.testutils.NullPointerTester;
+import static com.google.common.testutils.SerializableTester.reserialize;
+import static com.google.common.testutils.SerializableTester.reserializeAndAssert;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+import static java.util.Arrays.asList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Random;
+
+import javax.annotation.Nullable;
+
+/**
+ * Unit tests for {@code Ordering}.
+ *
+ * @author Jesse Wilson
+ */
+public class OrderingTest extends TestCase {
+
+ private final Ordering<Number> numberOrdering = new NumberOrdering();
+
+ public void testNatural() {
+ Ordering<Integer> comparator = Ordering.natural();
+ Helpers.testComparator(comparator,
+ Integer.MIN_VALUE, -1, 0, 1, Integer.MAX_VALUE);
+ try {
+ comparator.compare(1, null);
+ fail();
+ } catch (NullPointerException expected) {}
+ try {
+ comparator.compare(null, 2);
+ fail();
+ } catch (NullPointerException expected) {}
+ try {
+ comparator.compare(null, null);
+ fail();
+ } catch (NullPointerException expected) {}
+ assertSame(comparator, reserialize(comparator));
+ assertEquals("Ordering.natural()", comparator.toString());
+ }
+
+ public void testFrom() {
+ Ordering<String> caseInsensitiveOrdering
+ = Ordering.from(String.CASE_INSENSITIVE_ORDER);
+ assertEquals(0, caseInsensitiveOrdering.compare("A", "a"));
+ assertTrue(caseInsensitiveOrdering.compare("a", "B") < 0);
+ assertTrue(caseInsensitiveOrdering.compare("B", "a") > 0);
+
+ @SuppressWarnings("deprecation") // test of deprecated method
+ Ordering<String> orderingFromOrdering =
+ Ordering.from(Ordering.<String>natural());
+ new EqualsTester(caseInsensitiveOrdering)
+ .addEqualObject(Ordering.from(String.CASE_INSENSITIVE_ORDER))
+ .addNotEqualObject(orderingFromOrdering)
+ .addNotEqualObject(Ordering.natural())
+ .testEquals();
+ }
+
+ public void testExplicit_none() {
+ Comparator<Integer> c
+ = Ordering.explicit(Collections.<Integer>emptyList());
+ try {
+ c.compare(0, 0);
+ fail();
+ } catch (IncomparableValueException expected) {
+ assertEquals(0, expected.value);
+ }
+ reserializeAndAssert(c);
+ }
+
+ public void testExplicit_one() {
+ Comparator<Integer> c = Ordering.explicit(0);
+ assertEquals(0, c.compare(0, 0));
+ try {
+ c.compare(0, 1);
+ fail();
+ } catch (IncomparableValueException expected) {
+ assertEquals(1, expected.value);
+ }
+ reserializeAndAssert(c);
+ assertEquals("Ordering.explicit([0])", c.toString());
+ }
+
+ public void testExplicit_two() {
+ Comparator<Integer> c = Ordering.explicit(42, 5);
+ assertEquals(0, c.compare(5, 5));
+ assertTrue(c.compare(5, 42) > 0);
+ assertTrue(c.compare(42, 5) < 0);
+ try {
+ c.compare(5, 666);
+ fail();
+ } catch (IncomparableValueException expected) {
+ assertEquals(666, expected.value);
+ }
+ new EqualsTester(c)
+ .addEqualObject(Ordering.explicit(42, 5))
+ .addNotEqualObject(Ordering.explicit(5, 42))
+ .addNotEqualObject(Ordering.explicit(42))
+ .testEquals();
+ reserializeAndAssert(c);
+ }
+
+ public void testExplicit_sortingExample() {
+ Comparator<Integer> c
+ = Ordering.explicit(2, 8, 6, 1, 7, 5, 3, 4, 0, 9);
+ List<Integer> list = Arrays.asList(0, 3, 5, 6, 7, 8, 9);
+ Collections.sort(list, c);
+ assertContentsInOrder(list, 8, 6, 7, 5, 3, 0, 9);
+ reserializeAndAssert(c);
+ }
+
+ public void testExplicit_withDuplicates() {
+ try {
+ Ordering.explicit(1, 2, 3, 4, 2);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ public void testUsingToString() {
+ Ordering<Object> ordering = Ordering.usingToString();
+ Helpers.testComparator(ordering, 1, 12, 124, 2);
+ assertEquals("Ordering.usingToString()", ordering.toString());
+ assertSame(ordering, reserialize(ordering));
+ }
+
+ // use an enum to get easy serializability
+ private enum CharAtFunction implements Function<String, Character> {
+ AT0(0),
+ AT1(1),
+ AT2(2),
+ AT3(3),
+ AT4(4),
+ AT5(5),
+ ;
+
+ final int index;
+ CharAtFunction(int index) {
+ this.index = index;
+ }
+ public Character apply(String string) {
+ return string.charAt(index);
+ }
+ }
+
+ private static Ordering<String> byCharAt(int index) {
+ return Ordering.natural().onResultOf(CharAtFunction.values()[index]);
+ }
+
+ public void testCompound_static() {
+ Comparator<String> comparator = Ordering.compound(
+ Iterables.unmodifiableIterable(ImmutableList.of(
+ byCharAt(0), byCharAt(1), byCharAt(2),
+ byCharAt(3), byCharAt(4), byCharAt(5))));
+ Helpers.testComparator(comparator, ImmutableList.of(
+ "applesauce",
+ "apricot",
+ "artichoke",
+ "banality",
+ "banana",
+ "banquet",
+ "tangelo",
+ "tangerine"));
+ reserializeAndAssert(comparator);
+ }
+
+ public void testCompound_instance() {
+ Comparator<String> comparator = byCharAt(1).compound(byCharAt(0));
+ Helpers.testComparator(comparator, ImmutableList.of(
+ "red",
+ "yellow",
+ "violet",
+ "blue",
+ "indigo",
+ "green",
+ "orange"));
+ }
+
+ public void testCompound_instance_generics() {
+ Ordering<Object> objects = Ordering.explicit((Object) 1);
+ Ordering<Number> numbers = Ordering.explicit((Number) 1);
+ Ordering<Integer> integers = Ordering.explicit(1);
+
+ // Like by like equals like
+ Ordering<Number> a = numbers.compound(numbers);
+
+ // The compound takes the more specific type of the two, regardless of order
+
+ Ordering<Number> b = numbers.compound(objects);
+ Ordering<Number> c = objects.compound(numbers);
+
+ Ordering<Integer> d = numbers.compound(integers);
+ Ordering<Integer> e = integers.compound(numbers);
+
+ // This works with three levels too (IDEA falsely reports errors as noted
+ // below. Both javac and eclipse handle these cases correctly.)
+
+ Ordering<Number> f = numbers.compound(objects).compound(objects); //bad IDEA
+ Ordering<Number> g = objects.compound(numbers).compound(objects);
+ Ordering<Number> h = objects.compound(objects).compound(numbers);
+
+ Ordering<Number> i = numbers.compound(objects.compound(objects));
+ Ordering<Number> j = objects.compound(numbers.compound(objects)); //bad IDEA
+ Ordering<Number> k = objects.compound(objects.compound(numbers));
+
+ // You can also arbitrarily assign a more restricted type - not an intended
+ // feature, exactly, but unavoidable (I think) and harmless
+ Ordering<Integer> l = objects.compound(numbers);
+
+ // This correctly doesn't work:
+ // Ordering<Object> m = numbers.compound(objects);
+
+ // Sadly, the following works in javac 1.6, but at least it fails for
+ // eclipse, and is *correctly* highlighted red in IDEA.
+ // Ordering<Object> n = objects.compound(numbers);
+ }
+
+ public void testReverse() {
+ Ordering<Number> reverseOrder = numberOrdering.reverse();
+ Helpers.testComparator(reverseOrder,
+ Integer.MAX_VALUE, 1, 0, -1, Integer.MIN_VALUE);
+
+ new EqualsTester(reverseOrder)
+ .addEqualObject(numberOrdering.reverse())
+ .addNotEqualObject(Ordering.natural().reverse())
+ .addNotEqualObject(Collections.reverseOrder())
+ .testEquals();
+ }
+
+ public void testReverseOfReverseSameAsForward() {
+ // Not guaranteed by spec, but it works, and saves us from testing
+ // exhaustively
+ assertSame(numberOrdering, numberOrdering.reverse().reverse());
+ }
+
+ private enum StringLengthFunction implements Function<String, Integer> {
+ StringLength;
+
+ public Integer apply(String string) {
+ return string.length();
+ }
+ }
+
+ private static final Ordering<Integer> DECREASING_INTEGER
+ = Ordering.natural().reverse();
+
+ public void testOnResultOf_natural() {
+ Comparator<String> comparator
+ = Ordering.natural().onResultOf(StringLengthFunction.StringLength);
+ assertTrue(comparator.compare("to", "be") == 0);
+ assertTrue(comparator.compare("or", "not") < 0);
+ assertTrue(comparator.compare("that", "to") > 0);
+
+ new EqualsTester(comparator)
+ .addEqualObject(
+ Ordering.natural().onResultOf(StringLengthFunction.StringLength))
+ .addNotEqualObject(DECREASING_INTEGER)
+ .testEquals();
+ reserializeAndAssert(comparator);
+ assertEquals("Ordering.natural().onResultOf(StringLength)",
+ comparator.toString());
+ }
+
+ public void testOnResultOf_chained() {
+ Comparator<String> comparator = DECREASING_INTEGER.onResultOf(
+ StringLengthFunction.StringLength);
+ assertTrue(comparator.compare("to", "be") == 0);
+ assertTrue(comparator.compare("not", "or") < 0);
+ assertTrue(comparator.compare("to", "that") > 0);
+
+ new EqualsTester(comparator)
+ .addEqualObject(
+ DECREASING_INTEGER.onResultOf(StringLengthFunction.StringLength))
+ .addNotEqualObject(
+ DECREASING_INTEGER.onResultOf(Functions.constant(1)))
+ .addNotEqualObject(Ordering.natural())
+ .testEquals();
+ reserializeAndAssert(comparator);
+ assertEquals("Ordering.natural().reverse().onResultOf(StringLength)",
+ comparator.toString());
+ }
+
+ public void testNullsFirst() {
+ Ordering<Integer> ordering = Ordering.natural().nullsFirst();
+ Helpers.testComparator(ordering, null, Integer.MIN_VALUE, 0, 1);
+ }
+
+ public void testNullsLast() {
+ Ordering<Integer> ordering = Ordering.natural().nullsLast();
+ Helpers.testComparator(ordering, 0, 1, Integer.MAX_VALUE, null);
+ }
+
+ public void testBinarySearch() {
+ List<Integer> ints = Lists.newArrayList(0, 2, 3, 5, 7, 9);
+ assertEquals(4, numberOrdering.binarySearch(ints, 7));
+ }
+
+ public void testSortedCopy() {
+ List<Integer> unsortedInts = Lists.newArrayList(5, 3, 0, 9);
+ List<Integer> sortedInts = numberOrdering.sortedCopy(unsortedInts);
+ assertEquals(Lists.newArrayList(0, 3, 5, 9), sortedInts);
+ assertEquals(Lists.newArrayList(5, 3, 0, 9), unsortedInts);
+ }
+
+ public void testIsOrdered() {
+ assertFalse(numberOrdering.isOrdered(asList(5, 3, 0, 9)));
+ assertFalse(numberOrdering.isOrdered(asList(0, 5, 3, 9)));
+ assertTrue(numberOrdering.isOrdered(asList(0, 3, 5, 9)));
+ assertTrue(numberOrdering.isOrdered(asList(0, 0, 3, 3)));
+ assertTrue(numberOrdering.isOrdered(asList(0, 3)));
+ assertTrue(numberOrdering.isOrdered(Collections.singleton(1)));
+ assertTrue(numberOrdering.isOrdered(Collections.<Integer>emptyList()));
+ }
+
+ public void testIsStrictlyOrdered() {
+ assertFalse(numberOrdering.isStrictlyOrdered(asList(5, 3, 0, 9)));
+ assertFalse(numberOrdering.isStrictlyOrdered(asList(0, 5, 3, 9)));
+ assertTrue(numberOrdering.isStrictlyOrdered(asList(0, 3, 5, 9)));
+ assertFalse(numberOrdering.isStrictlyOrdered(asList(0, 0, 3, 3)));
+ assertTrue(numberOrdering.isStrictlyOrdered(asList(0, 3)));
+ assertTrue(numberOrdering.isStrictlyOrdered(Collections.singleton(1)));
+ assertTrue(numberOrdering.isStrictlyOrdered(
+ Collections.<Integer>emptyList()));
+ }
+
+ public void testIterableMinAndMax() {
+ List<Integer> ints = Lists.newArrayList(5, 3, 0, 9);
+ assertEquals(9, (int) numberOrdering.max(ints));
+ assertEquals(0, (int) numberOrdering.min(ints));
+
+ // when the values are the same, the first argument should be returned
+ Integer a = new Integer(4);
+ Integer b = new Integer(4);
+ ints = Lists.newArrayList(a, b, b);
+ assertSame(a, numberOrdering.max(ints));
+ assertSame(a, numberOrdering.min(ints));
+ }
+
+ public void testVarargsMinAndMax() {
+ // try the min and max values in all positions, since some values are proper
+ // parameters and others are from the varargs array
+ assertEquals(9, (int) numberOrdering.max(9, 3, 0, 5, 8));
+ assertEquals(9, (int) numberOrdering.max(5, 9, 0, 3, 8));
+ assertEquals(9, (int) numberOrdering.max(5, 3, 9, 0, 8));
+ assertEquals(9, (int) numberOrdering.max(5, 3, 0, 9, 8));
+ assertEquals(9, (int) numberOrdering.max(5, 3, 0, 8, 9));
+ assertEquals(0, (int) numberOrdering.min(0, 3, 5, 9, 8));
+ assertEquals(0, (int) numberOrdering.min(5, 0, 3, 9, 8));
+ assertEquals(0, (int) numberOrdering.min(5, 3, 0, 9, 8));
+ assertEquals(0, (int) numberOrdering.min(5, 3, 9, 0, 8));
+ assertEquals(0, (int) numberOrdering.min(5, 3, 0, 9, 0));
+
+ // when the values are the same, the first argument should be returned
+ Integer a = new Integer(4);
+ Integer b = new Integer(4);
+ assertSame(a, numberOrdering.max(a, b, b));
+ assertSame(a, numberOrdering.min(a, b, b));
+ }
+
+ public void testParameterMinAndMax() {
+ assertEquals(5, (int) numberOrdering.max(3, 5));
+ assertEquals(5, (int) numberOrdering.max(5, 3));
+ assertEquals(3, (int) numberOrdering.min(3, 5));
+ assertEquals(3, (int) numberOrdering.min(5, 3));
+
+ // when the values are the same, the first argument should be returned
+ Integer a = new Integer(4);
+ Integer b = new Integer(4);
+ assertSame(a, numberOrdering.max(a, b));
+ assertSame(a, numberOrdering.min(a, b));
+ }
+
+ private static class NumberOrdering extends Ordering<Number> {
+ public int compare(Number a, Number b) {
+ return ((Double) a.doubleValue()).compareTo(b.doubleValue());
+ }
+ @Override public int hashCode() {
+ return NumberOrdering.class.hashCode();
+ }
+ @Override public boolean equals(Object other) {
+ return other instanceof NumberOrdering;
+ }
+ private static final long serialVersionUID = 0;
+ }
+
+ /*
+ * Now we have monster tests that create hundreds of Orderings using different
+ * combinations of methods, then checks compare(), binarySearch() and so
+ * forth on each one.
+ */
+
+ // should periodically try increasing this, but it makes the test run long
+ private static final int RECURSE_DEPTH = 2;
+
+ public void testCombinationsExhaustively_startingFromNatural() {
+ testExhaustively(Ordering.<String>natural(), Arrays.asList("a", "b"));
+ }
+
+ public void testCombinationsExhaustively_startingFromExplicit() {
+ testExhaustively(Ordering.explicit("a", "b", "c", "d"),
+ Arrays.asList("b", "d"));
+ }
+
+ public void testCombinationsExhaustively_startingFromUsingToString() {
+ testExhaustively(Ordering.usingToString(), Arrays.asList(1, 12, 2));
+ }
+
+ private static <T> void testExhaustively(
+ Ordering<? super T> ordering, List<T> list) {
+ // shoot me, but I didn't want to deal with wildcards through the whole test
+ @SuppressWarnings("unchecked")
+ Scenario<T> starter = new Scenario<T>((Ordering) ordering, list);
+ verifyScenario(starter, 0);
+ }
+
+ private static <T> void verifyScenario(Scenario<T> scenario, int level) {
+ scenario.testCompareTo();
+ scenario.testIsOrdered();
+ scenario.testMinAndMax();
+ scenario.testBinarySearch();
+
+ if (level < RECURSE_DEPTH) {
+ for (OrderingMutation alteration : OrderingMutation.values()) {
+ verifyScenario(alteration.mutate(scenario), level + 1);
+ }
+ }
+ }
+
+ /**
+ * An aggregation of an ordering with a list (of size > 1) that should prove
+ * to be in strictly increasing order according to that ordering.
+ */
+ private static class Scenario<T> {
+ final Ordering<T> ordering;
+ final List<T> strictlyOrderedList;
+
+ Scenario(Ordering<T> ordering, List<T> strictlyOrderedList) {
+ this.ordering = ordering;
+ this.strictlyOrderedList = strictlyOrderedList;
+ }
+
+ void testCompareTo() {
+ Helpers.testComparator(ordering, strictlyOrderedList);
+ }
+
+ void testIsOrdered() {
+ assertTrue(ordering.isOrdered(strictlyOrderedList));
+ assertTrue(ordering.isStrictlyOrdered(strictlyOrderedList));
+ }
+
+ void testMinAndMax() {
+ List<T> shuffledList = Lists.newArrayList(strictlyOrderedList);
+ Collections.shuffle(shuffledList, new Random(5));
+
+ assertEquals(strictlyOrderedList.get(0), ordering.min(shuffledList));
+ assertEquals(strictlyOrderedList.get(strictlyOrderedList.size() - 1),
+ ordering.max(shuffledList));
+ }
+
+ void testBinarySearch() {
+ for (int i = 0; i < strictlyOrderedList.size(); i++) {
+ assertEquals(i, ordering.binarySearch(
+ strictlyOrderedList, strictlyOrderedList.get(i)));
+ }
+ List<T> newList = Lists.newArrayList(strictlyOrderedList);
+ T valueNotInList = newList.remove(1);
+ assertEquals(-2, ordering.binarySearch(newList, valueNotInList));
+ }
+ }
+
+ /**
+ * A means for changing an Ordering into another Ordering. Each instance is
+ * responsible for creating the alternate Ordering, and providing a List that
+ * is known to be ordered, based on an input List known to be ordered
+ * according to the input Ordering.
+ */
+ private enum OrderingMutation {
+ REVERSE {
+ <T> Scenario<?> mutate(Scenario<T> scenario) {
+ List<T> newList = Lists.newArrayList(scenario.strictlyOrderedList);
+ Collections.reverse(newList);
+ return new Scenario<T>(scenario.ordering.reverse(), newList);
+ }
+ },
+ NULLS_FIRST {
+ <T> Scenario<?> mutate(Scenario<T> scenario) {
+ @SuppressWarnings("unchecked")
+ List<T> newList = Lists.newArrayList((T) null);
+ for (T t : scenario.strictlyOrderedList) {
+ if (t != null) {
+ newList.add(t);
+ }
+ }
+ return new Scenario<T>(scenario.ordering.nullsFirst(), newList);
+ }
+ },
+ NULLS_LAST {
+ <T> Scenario<?> mutate(Scenario<T> scenario) {
+ List<T> newList = Lists.newArrayList();
+ for (T t : scenario.strictlyOrderedList) {
+ if (t != null) {
+ newList.add(t);
+ }
+ }
+ newList.add(null);
+ return new Scenario<T>(scenario.ordering.nullsLast(), newList);
+ }
+ },
+ ON_RESULT_OF {
+ <T> Scenario<?> mutate(final Scenario<T> scenario) {
+ Ordering<Integer> ordering = scenario.ordering.onResultOf(
+ new Function<Integer, T>() {
+ public T apply(@Nullable Integer from) {
+ return scenario.strictlyOrderedList.get(from);
+ }
+ });
+ List<Integer> list = Lists.newArrayList();
+ for (int i = 0; i < scenario.strictlyOrderedList.size(); i++) {
+ list.add(i);
+ }
+ return new Scenario<Integer>(ordering, list);
+ }
+ },
+ COMPOUND_THIS_WITH_NATURAL {
+ <T> Scenario<?> mutate(Scenario<T> scenario) {
+ List<Composite<T>> composites = Lists.newArrayList();
+ for (T t : scenario.strictlyOrderedList) {
+ composites.add(new Composite<T>(t, 1));
+ composites.add(new Composite<T>(t, 2));
+ }
+ Ordering<Composite<T>> ordering =
+ scenario.ordering.onResultOf(Composite.<T>getValueFunction())
+ .compound(Ordering.natural());
+ return new Scenario<Composite<T>>(ordering, composites);
+ }
+ },
+ COMPOUND_NATURAL_WITH_THIS {
+ <T> Scenario<?> mutate(Scenario<T> scenario) {
+ List<Composite<T>> composites = Lists.newArrayList();
+ for (T t : scenario.strictlyOrderedList) {
+ composites.add(new Composite<T>(t, 1));
+ }
+ for (T t : scenario.strictlyOrderedList) {
+ composites.add(new Composite<T>(t, 2));
+ }
+ Ordering<Composite<T>> ordering = Ordering.natural().compound(
+ scenario.ordering.onResultOf(Composite.<T>getValueFunction()));
+ return new Scenario<Composite<T>>(ordering, composites);
+ }
+ },
+ ;
+
+ abstract <T> Scenario<?> mutate(Scenario<T> scenario);
+ }
+
+ /**
+ * A dummy object we create so that we can have something meaningful to have
+ * a compound ordering over.
+ */
+ private static class Composite<T> implements Comparable<Composite<T>> {
+ final T value;
+ final int rank;
+
+ Composite(T value, int rank) {
+ this.value = value;
+ this.rank = rank;
+ }
+
+ // natural order is by rank only; the test will compound() this with the
+ // order of 't'.
+ public int compareTo(Composite<T> that) {
+ return rank < that.rank ? -1 : rank > that.rank ? 1 : 0;
+ }
+
+ static <T> Function<Composite<T>, T> getValueFunction() {
+ return new Function<Composite<T>, T>() {
+ public T apply(Composite<T> from) {
+ return from.value;
+ }
+ };
+ }
+ }
+
+ public void testNullPointerExceptions() throws Exception {
+ NullPointerTester tester = new NullPointerTester();
+ tester.testAllPublicStaticMethods(Ordering.class);
+
+ // any Ordering<Object> instance should be good enough
+ tester.testAllPublicInstanceMethods(Ordering.usingToString());
+ }
+}
diff --git a/test/com/google/common/collect/PeekingIteratorTest.java b/test/com/google/common/collect/PeekingIteratorTest.java
new file mode 100644
index 0000000..954f3d1
--- /dev/null
+++ b/test/com/google/common/collect/PeekingIteratorTest.java
@@ -0,0 +1,242 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.Iterators.peekingIterator;
+import static com.google.common.collect.testing.IteratorFeature.MODIFIABLE;
+import static com.google.common.collect.testing.IteratorFeature.UNMODIFIABLE;
+import com.google.common.collect.testing.IteratorTester;
+
+import junit.framework.TestCase;
+
+import java.util.Collection;
+import java.util.Collections;
+import static java.util.Collections.emptyList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+/**
+ * Unit test for {@link PeekingIterator}.
+ *
+ * @author Mick Killianey
+ */
+@SuppressWarnings("serial") // No serialization is used in this test
+public class PeekingIteratorTest extends TestCase {
+
+ /**
+ * Version of {@link IteratorTester} that compares an iterator over
+ * a given collection of elements (used as the reference iterator)
+ * against a {@code PeekingIterator} that *wraps* such an iterator
+ * (used as the target iterator).
+ *
+ * <p>This IteratorTester makes copies of the master so that it can
+ * later verify that {@link PeekingIterator#remove()} removes the
+ * same elements as the reference's iterator {@code #remove()}.
+ */
+ private static class PeekingIteratorTester<T> extends IteratorTester<T> {
+ private Iterable<T> master;
+ private List<T> targetList;
+
+ public PeekingIteratorTester(Collection<T> master) {
+ super(master.size() + 3, MODIFIABLE, master,
+ IteratorTester.KnownOrder.KNOWN_ORDER);
+ this.master = master;
+ }
+ @Override protected Iterator<T> newTargetIterator() {
+ // make copy from master to verify later
+ targetList = Lists.newArrayList(master);
+ Iterator<T> iterator = targetList.iterator();
+ return Iterators.peekingIterator(iterator);
+ }
+ @Override protected void verify(List<T> elements) {
+ // verify same objects were removed from reference and target
+ assertEquals(elements, targetList);
+ }
+ }
+
+ private <T> void actsLikeIteratorHelper(final List<T> list) throws Exception {
+ // Check with modifiable copies of the list
+ new PeekingIteratorTester<T>(list).test();
+
+ // Check with unmodifiable lists
+ new IteratorTester<T>(list.size() * 2 + 2, UNMODIFIABLE, list,
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<T> newTargetIterator() {
+ Iterator<T> iterator = Collections.unmodifiableList(list).iterator();
+ return Iterators.peekingIterator(iterator);
+ }
+ }.test();
+ }
+
+ public void testPeekingIteratorBehavesLikeIteratorOnEmptyIterable()
+ throws Exception {
+ actsLikeIteratorHelper(Collections.emptyList());
+ }
+
+ public void testPeekingIteratorBehavesLikeIteratorOnSingletonIterable()
+ throws Exception {
+ actsLikeIteratorHelper(Collections.singletonList(new Object()));
+ }
+
+ public void testPeekingIteratorBehavesLikeIteratorOnThreeElementIterable()
+ throws Exception {
+ actsLikeIteratorHelper(Lists.newArrayList("A", "B", "C"));
+ }
+
+ public void testPeekingIteratorAcceptsNullElements() throws Exception {
+ actsLikeIteratorHelper(Lists.newArrayList(null, "A", null));
+ }
+
+ public void testPeekOnEmptyList() {
+ List<?> list = Collections.emptyList();
+ Iterator<?> iterator = list.iterator();
+ PeekingIterator<?> peekingIterator = Iterators.peekingIterator(iterator);
+
+ try {
+ peekingIterator.peek();
+ fail("Should throw NoSuchElementException if nothing to peek()");
+ } catch (NoSuchElementException e) { /* expected */ }
+ }
+
+ public void testPeekDoesntChangeIteration() {
+ List<?> list = Lists.newArrayList("A", "B", "C");
+ Iterator<?> iterator = list.iterator();
+ PeekingIterator<?> peekingIterator =
+ Iterators.peekingIterator(iterator);
+
+ assertEquals("Should be able to peek() at first element",
+ "A", peekingIterator.peek());
+ assertEquals("Should be able to peek() first element multiple times",
+ "A", peekingIterator.peek());
+ assertEquals("next() should still return first element after peeking",
+ "A", peekingIterator.next());
+
+ assertEquals("Should be able to peek() at middle element",
+ "B", peekingIterator.peek());
+ assertEquals("Should be able to peek() middle element multiple times",
+ "B", peekingIterator.peek());
+ assertEquals("next() should still return middle element after peeking",
+ "B", peekingIterator.next());
+
+ assertEquals("Should be able to peek() at last element",
+ "C", peekingIterator.peek());
+ assertEquals("Should be able to peek() last element multiple times",
+ "C", peekingIterator.peek());
+ assertEquals("next() should still return last element after peeking",
+ "C", peekingIterator.next());
+
+ try {
+ peekingIterator.peek();
+ fail("Should throw exception if no next to peek()");
+ } catch (NoSuchElementException e) { /* expected */ }
+ try {
+ peekingIterator.peek();
+ fail("Should continue to throw exception if no next to peek()");
+ } catch (NoSuchElementException e) { /* expected */ }
+ try {
+ peekingIterator.next();
+ fail("next() should still throw exception after the end of iteration");
+ } catch (NoSuchElementException e) { /* expected */ }
+ }
+
+ public void testCantRemoveAfterPeek() {
+ List<String> list = Lists.newArrayList("A", "B", "C");
+ Iterator<String> iterator = list.iterator();
+ PeekingIterator<?> peekingIterator = Iterators.peekingIterator(iterator);
+
+ assertEquals("A", peekingIterator.next());
+ assertEquals("B", peekingIterator.peek());
+
+ /* Should complain on attempt to remove() after peek(). */
+ try {
+ peekingIterator.remove();
+ fail("remove() should throw IllegalStateException after a peek()");
+ } catch (IllegalStateException e) { /* expected */ }
+
+ assertEquals("After remove() throws exception, peek should still be ok",
+ "B", peekingIterator.peek());
+
+ /* Should recover to be able to remove() after next(). */
+ assertEquals("B", peekingIterator.next());
+ peekingIterator.remove();
+ assertEquals("Should have removed an element", 2, list.size());
+ assertFalse("Second element should be gone", list.contains("B"));
+ }
+
+ static class ThrowsAtEndException extends RuntimeException { /* nothing */ }
+
+ /**
+ * This Iterator claims to have more elements than the underlying
+ * iterable, but when you try to fetch the extra elements, it throws
+ * an unchecked exception.
+ */
+ static class ThrowsAtEndIterator<E> implements Iterator<E> {
+ Iterator<E> iterator;
+ public ThrowsAtEndIterator(Iterable<E> iterable) {
+ this.iterator = iterable.iterator();
+ }
+ public boolean hasNext() {
+ return true; // pretend that you have more...
+ }
+ public E next() {
+ // ...but throw an unchecked exception when you ask for it.
+ if (!iterator.hasNext()) {
+ throw new ThrowsAtEndException();
+ }
+ return iterator.next();
+ }
+ public void remove() {
+ iterator.remove();
+ }
+ }
+
+ public void testPeekingIteratorDoesntAdvancePrematurely() throws Exception {
+ /*
+ * This test will catch problems where the underlying iterator
+ * throws a RuntimeException when retrieving the nth element.
+ *
+ * If the PeekingIterator is caching elements too aggressively,
+ * it may throw the exception on the (n-1)th element (oops!).
+ */
+
+ /* Checks the case where the first element throws an exception. */
+
+ List<Integer> list = emptyList();
+ Iterator<Integer> iterator =
+ peekingIterator(new ThrowsAtEndIterator<Integer>(list));
+ assertNextThrows(iterator);
+
+ /* Checks the case where a later element throws an exception. */
+
+ list = Lists.newArrayList(1, 2);
+ iterator = peekingIterator(new ThrowsAtEndIterator<Integer>(list));
+ assertTrue(iterator.hasNext());
+ iterator.next();
+ assertTrue(iterator.hasNext());
+ iterator.next();
+ assertNextThrows(iterator);
+ }
+
+ private void assertNextThrows(Iterator<?> iterator) {
+ try {
+ iterator.next();
+ fail();
+ } catch (ThrowsAtEndException expected) {
+ }
+ }
+}
diff --git a/test/com/google/common/collect/SetOperationsTest.java b/test/com/google/common/collect/SetOperationsTest.java
new file mode 100644
index 0000000..b5ac549
--- /dev/null
+++ b/test/com/google/common/collect/SetOperationsTest.java
@@ -0,0 +1,313 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import com.google.common.collect.testing.SetTestSuiteBuilder;
+import com.google.common.collect.testing.TestStringSetGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import static java.util.Arrays.asList;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Unit tests for {@link Sets#union}, {@link Sets#intersection} and
+ * {@link Sets#difference}.
+ *
+ * @author Kevin Bourrillion
+ */
+public class SetOperationsTest extends TestCase {
+ public static Test suite() {
+ TestSuite suite = new TestSuite();
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ return Sets.union(
+ Sets.<String>newHashSet(), Sets.<String>newHashSet());
+ }
+ })
+ .named("empty U empty")
+ .withFeatures(CollectionSize.ZERO, CollectionFeature.NONE,
+ CollectionFeature.ALLOWS_NULL_VALUES)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ checkArgument(elements.length == 1);
+ return Sets.union(
+ Sets.<String>newHashSet(elements), Sets.newHashSet(elements));
+ }
+ })
+ .named("singleton U itself")
+ .withFeatures(CollectionSize.ONE, CollectionFeature.ALLOWS_NULL_VALUES)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ return Sets.union(
+ Sets.<String>newHashSet(), Sets.newHashSet(elements));
+ }
+ })
+ .named("empty U set")
+ .withFeatures(CollectionSize.ONE, CollectionSize.SEVERAL,
+ CollectionFeature.ALLOWS_NULL_VALUES)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ return Sets.union(
+ Sets.newHashSet(elements), Sets.<String>newHashSet());
+ }
+ })
+ .named("set U empty")
+ .withFeatures(CollectionSize.ONE, CollectionSize.SEVERAL,
+ CollectionFeature.ALLOWS_NULL_VALUES)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ checkArgument(elements.length == 3);
+ // Put the sets in different orders for the hell of it
+ return Sets.union(
+ Sets.newLinkedHashSet(asList(elements)),
+ Sets.newLinkedHashSet(
+ asList(elements[1], elements[0], elements[2])));
+ }
+ })
+ .named("set U itself")
+ .withFeatures(CollectionSize.SEVERAL,
+ CollectionFeature.ALLOWS_NULL_VALUES)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ checkArgument(elements.length == 3);
+ return Sets.union(
+ Sets.newHashSet(elements[0]),
+ Sets.newHashSet(elements[1], elements[2]));
+ }
+ })
+ .named("union of disjoint")
+ .withFeatures(CollectionSize.SEVERAL,
+ CollectionFeature.ALLOWS_NULL_VALUES)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ return Sets.union(
+ Sets.<String>newHashSet(elements[0], elements[1]),
+ Sets.newHashSet(elements[1], elements[2]));
+ }
+ })
+ .named("venn")
+ .withFeatures(CollectionSize.SEVERAL,
+ CollectionFeature.ALLOWS_NULL_VALUES)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ return Sets.intersection(
+ Sets.<String>newHashSet(), Sets.<String>newHashSet());
+ }
+ })
+ .named("empty & empty")
+ .withFeatures(CollectionSize.ZERO, CollectionFeature.NONE,
+ CollectionFeature.ALLOWS_NULL_VALUES)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ return Sets.intersection(
+ Sets.<String>newHashSet(), Sets.newHashSet((String) null));
+ }
+ })
+ .named("empty & singleton")
+ .withFeatures(CollectionSize.ZERO, CollectionFeature.NONE,
+ CollectionFeature.ALLOWS_NULL_VALUES)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ return Sets.intersection(
+ Sets.newHashSet("a", "b"), Sets.newHashSet("c", "d"));
+ }
+ })
+ .named("intersection of disjoint")
+ .withFeatures(CollectionSize.ZERO, CollectionFeature.NONE,
+ CollectionFeature.ALLOWS_NULL_VALUES)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ return Sets.intersection(
+ Sets.newHashSet(elements), Sets.newHashSet(elements));
+ }
+ })
+ .named("set & itself")
+ .withFeatures(CollectionSize.ONE, CollectionSize.SEVERAL,
+ CollectionFeature.ALLOWS_NULL_VALUES)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ return Sets.intersection(
+ Sets.newHashSet("a", elements[0], "b"),
+ Sets.newHashSet("c", elements[0], "d"));
+ }
+ })
+ .named("intersection with overlap of one")
+ .withFeatures(CollectionSize.ONE, CollectionFeature.ALLOWS_NULL_VALUES)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ return Sets.difference(
+ Sets.<String>newHashSet(), Sets.<String>newHashSet());
+ }
+ })
+ .named("empty - empty")
+ .withFeatures(CollectionSize.ZERO, CollectionFeature.NONE,
+ CollectionFeature.ALLOWS_NULL_VALUES)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ return Sets.difference(Sets.newHashSet("a"), Sets.newHashSet("a"));
+ }
+ })
+ .named("singleton - itself")
+ .withFeatures(CollectionSize.ZERO, CollectionFeature.NONE,
+ CollectionFeature.ALLOWS_NULL_VALUES)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ Set<String> set = Sets.newHashSet("b", "c");
+ Set<String> other = Sets.newHashSet("a", "b", "c", "d");
+ return Sets.difference(set, other);
+ }
+ })
+ .named("set - superset")
+ .withFeatures(CollectionSize.ZERO, CollectionFeature.NONE,
+ CollectionFeature.ALLOWS_NULL_VALUES)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ Set<String> set = Sets.newHashSet(elements);
+ Set<String> other = Sets.newHashSet("wz", "xq");
+ set.addAll(other);
+ other.add("pq");
+ return Sets.difference(set, other);
+ }
+ })
+ .named("set - set")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionFeature.ALLOWS_NULL_VALUES)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ return Sets.difference(
+ Sets.newHashSet(elements), Sets.newHashSet());
+ }
+ })
+ .named("set - empty")
+ .withFeatures(CollectionSize.ONE, CollectionSize.SEVERAL,
+ CollectionFeature.ALLOWS_NULL_VALUES)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ return Sets.difference(
+ Sets.<String>newHashSet(elements), Sets.newHashSet("xx", "xq"));
+ }
+ })
+ .named("set - disjoint")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_VALUES)
+ .createTestSuite());
+
+ suite.addTestSuite(MoreTests.class);
+ return suite;
+ }
+
+ public static class MoreTests extends TestCase {
+ Set<String> friends;
+ Set<String> enemies;
+
+ @Override protected void setUp() {
+ friends = Sets.newHashSet("Tom", "Joe", "Dave");
+ enemies = Sets.newHashSet("Dick", "Harry", "Tom");
+ }
+
+ public void testUnion() {
+ Set<String> all = Sets.union(friends, enemies);
+ assertEquals(5, all.size());
+
+ ImmutableSet<String> immut = Sets.union(friends, enemies).immutableCopy();
+ HashSet<String> mut
+ = Sets.union(friends, enemies).copyInto(new HashSet<String>());
+
+ enemies.add("Buck");
+ assertEquals(6, all.size());
+ assertEquals(5, immut.size());
+ assertEquals(5, mut.size());
+ }
+
+ public void testIntersection() {
+ Set<String> friends = Sets.newHashSet("Tom", "Joe", "Dave");
+ Set<String> enemies = Sets.newHashSet("Dick", "Harry", "Tom");
+
+ Set<String> frenemies = Sets.intersection(friends, enemies);
+ assertEquals(1, frenemies.size());
+
+ ImmutableSet<String> immut
+ = Sets.intersection(friends, enemies).immutableCopy();
+ HashSet<String> mut
+ = Sets.intersection(friends, enemies).copyInto(new HashSet<String>());
+
+ enemies.add("Joe");
+ assertEquals(2, frenemies.size());
+ assertEquals(1, immut.size());
+ assertEquals(1, mut.size());
+ }
+
+ public void testDifference() {
+ Set<String> friends = Sets.newHashSet("Tom", "Joe", "Dave");
+ Set<String> enemies = Sets.newHashSet("Dick", "Harry", "Tom");
+
+ Set<String> goodFriends = Sets.difference(friends, enemies);
+ assertEquals(2, goodFriends.size());
+
+ ImmutableSet<String> immut
+ = Sets.difference(friends, enemies).immutableCopy();
+ HashSet<String> mut
+ = Sets.difference(friends, enemies).copyInto(new HashSet<String>());
+
+ enemies.add("Dave");
+ assertEquals(1, goodFriends.size());
+ assertEquals(2, immut.size());
+ assertEquals(2, mut.size());
+ }
+ }
+}
diff --git a/test/com/google/common/collect/SetsTest.java b/test/com/google/common/collect/SetsTest.java
new file mode 100644
index 0000000..5be0db8
--- /dev/null
+++ b/test/com/google/common/collect/SetsTest.java
@@ -0,0 +1,626 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.Iterables.unmodifiableIterable;
+import static com.google.common.collect.Sets.newEnumSet;
+import com.google.common.collect.testing.AnEnum;
+import com.google.common.collect.testing.MinimalIterable;
+import com.google.common.collect.testing.SetTestSuiteBuilder;
+import com.google.common.collect.testing.TestEnumSetGenerator;
+import com.google.common.collect.testing.TestStringSetGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.SetFeature;
+import static com.google.common.collect.testing.testers.CollectionIteratorTester.getIteratorKnownOrderRemoveSupportedMethod;
+import com.google.common.testing.junit3.JUnitAsserts;
+import static com.google.common.testing.junit3.JUnitAsserts.assertContentsInOrder;
+import com.google.common.testutils.NullPointerTester;
+import com.google.common.testutils.SerializableTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import static java.io.ObjectStreamConstants.TC_REFERENCE;
+import static java.io.ObjectStreamConstants.baseWireHandle;
+import java.io.Serializable;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * Unit test for {@code Sets}.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ */
+public class SetsTest extends TestCase {
+
+ private static final Collection<Integer> EMPTY_COLLECTION
+ = Arrays.<Integer>asList();
+
+ private static final Collection<Integer> SOME_COLLECTION
+ = Arrays.asList(0, 1, 1);
+
+ private static final Iterable<Integer> SOME_ITERABLE
+ = new Iterable<Integer>() {
+ public Iterator<Integer> iterator() {
+ return SOME_COLLECTION.iterator();
+ }
+ };
+
+ private static final List<Integer> LONGER_LIST
+ = Arrays.asList(8, 6, 7, 5, 3, 0, 9);
+
+ private static final Comparator<Integer> SOME_COMPARATOR
+ = Collections.reverseOrder();
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite();
+ suite.addTestSuite(SetsTest.class);
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ int size = elements.length;
+ // Remove last element, if size > 1
+ Set<String> set1 = (size > 1)
+ ? Sets.newHashSet(
+ Arrays.asList(elements).subList(0, size - 1))
+ : Sets.newHashSet(elements);
+ // Remove first element, if size > 0
+ Set<String> set2 = (size > 0)
+ ? Sets.newHashSet(
+ Arrays.asList(elements).subList(1, size))
+ : Sets.<String>newHashSet();
+ return Sets.union(set1, set2);
+ }
+ })
+ .named("Sets.union")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_VALUES)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ Set<String> set1 = Sets.newHashSet(elements);
+ set1.add(samples().e3);
+ Set<String> set2 = Sets.newHashSet(elements);
+ set2.add(samples().e4);
+ return Sets.intersection(set1, set2);
+ }
+ })
+ .named("Sets.intersection")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_VALUES)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ Set<String> set1 = Sets.newHashSet(elements);
+ set1.add(samples().e3);
+ Set<String> set2 = Sets.newHashSet(samples().e3);
+ return Sets.difference(set1, set2);
+ }
+ })
+ .named("Sets.difference")
+ .withFeatures(CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_VALUES)
+ .createTestSuite());
+
+ suite.addTest(SetTestSuiteBuilder.using(new TestEnumSetGenerator() {
+ @Override protected Set<AnEnum> create(AnEnum[] elements) {
+ AnEnum[] otherElements = new AnEnum[elements.length - 1];
+ System.arraycopy(
+ elements, 1, otherElements, 0, otherElements.length);
+ return Sets.immutableEnumSet(elements[0], otherElements);
+ }
+ })
+ .named("Sets.immutableEnumSet")
+ .withFeatures(CollectionSize.ONE, CollectionSize.SEVERAL)
+ .createTestSuite());
+
+ suite.addTest(testsForFilter());
+ suite.addTest(testsForFilterNoNulls());
+ suite.addTest(testsForFilterFiltered());
+
+ return suite;
+ }
+
+ private static Test testsForFilter() {
+ return SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override public Set<String> create(String[] elements) {
+ Set<String> unfiltered = Sets.newLinkedHashSet();
+ unfiltered.add("yyy");
+ unfiltered.addAll(Arrays.asList(elements));
+ unfiltered.add("zzz");
+ return Sets.filter(unfiltered, Collections2Test.NOT_YYY_ZZZ);
+ }
+ })
+ .named("Sets.filter")
+ .withFeatures(
+ SetFeature.GENERAL_PURPOSE,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionFeature.KNOWN_ORDER,
+ CollectionSize.ANY)
+ .suppressing(getIteratorKnownOrderRemoveSupportedMethod())
+ .createTestSuite();
+ }
+
+ private static Test testsForFilterNoNulls() {
+ return SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override public Set<String> create(String[] elements) {
+ Set<String> unfiltered = Sets.newLinkedHashSet();
+ unfiltered.add("yyy");
+ unfiltered.addAll(ImmutableList.of(elements));
+ unfiltered.add("zzz");
+ return Sets.filter(unfiltered, Collections2Test.LENGTH_1);
+ }
+ })
+ .named("Sets.filter, no nulls")
+ .withFeatures(
+ SetFeature.GENERAL_PURPOSE,
+ CollectionFeature.KNOWN_ORDER,
+ CollectionSize.ANY)
+ .suppressing(getIteratorKnownOrderRemoveSupportedMethod())
+ .createTestSuite();
+ }
+
+ private static Test testsForFilterFiltered() {
+ return SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+ @Override public Set<String> create(String[] elements) {
+ Set<String> unfiltered = Sets.newLinkedHashSet();
+ unfiltered.add("yyy");
+ unfiltered.addAll(ImmutableList.of(elements));
+ unfiltered.add("zzz");
+ unfiltered.add("abc");
+ return Sets.filter(
+ Sets.filter(unfiltered, Collections2Test.LENGTH_1),
+ Collections2Test.NOT_YYY_ZZZ);
+ }
+ })
+ .named("Sets.filter, filtered input")
+ .withFeatures(
+ SetFeature.GENERAL_PURPOSE,
+ CollectionFeature.KNOWN_ORDER,
+ CollectionSize.ANY)
+ .suppressing(getIteratorKnownOrderRemoveSupportedMethod())
+ .createTestSuite();
+ }
+
+ private enum SomeEnum { A, B, C, D }
+
+ public void testImmutableEnumSet() {
+ Set<SomeEnum> units = Sets.immutableEnumSet(SomeEnum.D, SomeEnum.B);
+
+ assertContentsInOrder(units, SomeEnum.B, SomeEnum.D);
+
+ Set<SomeEnum> copy = SerializableTester.reserializeAndAssert(units);
+ assertTrue(copy instanceof ImmutableEnumSet);
+
+ try {
+ units.remove(SomeEnum.B);
+ fail("ImmutableEnumSet should throw an exception on remove()");
+ } catch (UnsupportedOperationException expected) {}
+ try {
+ units.add(SomeEnum.C);
+ fail("ImmutableEnumSet should throw an exception on add()");
+ } catch (UnsupportedOperationException expected) {}
+ }
+
+ public void testImmutableEnumSet_fromIterable() {
+ ImmutableSet<SomeEnum> none
+ = Sets.immutableEnumSet(MinimalIterable.<SomeEnum>of());
+ assertContentsInOrder(none);
+
+ ImmutableSet<SomeEnum> one
+ = Sets.immutableEnumSet(MinimalIterable.of(SomeEnum.B));
+ assertContentsInOrder(one, SomeEnum.B);
+
+ ImmutableSet<SomeEnum> two
+ = Sets.immutableEnumSet(MinimalIterable.of(SomeEnum.D, SomeEnum.B));
+ assertContentsInOrder(two, SomeEnum.B, SomeEnum.D);
+ }
+
+ public void testImmutableEnumSet_deserializationMakesDefensiveCopy()
+ throws Exception {
+ ImmutableSet<SomeEnum> original =
+ Sets.immutableEnumSet(SomeEnum.A, SomeEnum.B);
+ int handleOffset = 6;
+ byte[] serializedForm = serializeWithBackReference(original, handleOffset);
+ ObjectInputStream in =
+ new ObjectInputStream(new ByteArrayInputStream(serializedForm));
+
+ ImmutableSet<?> deserialized = (ImmutableSet<?>) in.readObject();
+ EnumSet<?> delegate = (EnumSet<?>) in.readObject();
+
+ assertEquals(original, deserialized);
+ assertTrue(delegate.remove(SomeEnum.A));
+ assertTrue(deserialized.contains(SomeEnum.A));
+ }
+
+ private static byte[] serializeWithBackReference(
+ Object original, int handleOffset) throws IOException {
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ ObjectOutputStream out = new ObjectOutputStream(bos);
+
+ out.writeObject(original);
+
+ byte[] handle = toByteArray(baseWireHandle + handleOffset);
+ byte[] ref = prepended(TC_REFERENCE, handle);
+ bos.write(ref);
+
+ return bos.toByteArray();
+ }
+
+ private static byte[] prepended(byte b, byte[] array) {
+ byte[] out = new byte[array.length + 1];
+ out[0] = b;
+ System.arraycopy(array, 0, out, 1, array.length);
+ return out;
+ }
+
+ private static byte[] toByteArray(int h) {
+ return ByteBuffer.allocate(4).putInt(h).array();
+ }
+
+ public void testNewEnumSet_empty() {
+ EnumSet<SomeEnum> copy =
+ newEnumSet(Collections.<SomeEnum>emptySet(), SomeEnum.class);
+ assertEquals(EnumSet.noneOf(SomeEnum.class), copy);
+ }
+
+ public void testNewEnumSet_enumSet() {
+ EnumSet<SomeEnum> set = EnumSet.of(SomeEnum.A, SomeEnum.D);
+ assertEquals(set, newEnumSet(set, SomeEnum.class));
+ }
+
+ public void testNewEnumSet_collection() {
+ Set<SomeEnum> set = ImmutableSet.of(SomeEnum.B, SomeEnum.C);
+ assertEquals(set, newEnumSet(set, SomeEnum.class));
+ }
+
+ public void testNewEnumSet_iterable() {
+ Set<SomeEnum> set = ImmutableSet.of(SomeEnum.A, SomeEnum.B, SomeEnum.C);
+ assertEquals(set, newEnumSet(unmodifiableIterable(set), SomeEnum.class));
+ }
+
+ public void testNewHashSetEmpty() {
+ HashSet<Integer> set = Sets.newHashSet();
+ verifySetContents(set, EMPTY_COLLECTION);
+ }
+
+ public void testNewHashSetVarArgs() {
+ HashSet<Integer> set = Sets.newHashSet(0, 1, 1);
+ verifySetContents(set, Arrays.asList(0, 1));
+ }
+
+ public void testNewHashSetFromCollection() {
+ HashSet<Integer> set = Sets.newHashSet(SOME_COLLECTION);
+ verifySetContents(set, SOME_COLLECTION);
+ }
+
+ public void testNewHashSetFromIterable() {
+ HashSet<Integer> set = Sets.newHashSet(SOME_ITERABLE);
+ verifySetContents(set, SOME_ITERABLE);
+ }
+
+ public void testNewHashSetWithExpectedSizeSmall() {
+ HashSet<Integer> set = Sets.newHashSetWithExpectedSize(0);
+ verifySetContents(set, EMPTY_COLLECTION);
+ }
+
+ public void testNewHashSetWithExpectedSizeLarge() {
+ HashSet<Integer> set = Sets.newHashSetWithExpectedSize(1000);
+ verifySetContents(set, EMPTY_COLLECTION);
+ }
+
+ public void testNewHashSetFromIterator() {
+ HashSet<Integer> set = Sets.newHashSet(SOME_COLLECTION.iterator());
+ verifySetContents(set, SOME_COLLECTION);
+ }
+
+ public void testNewLinkedHashSetEmpty() {
+ LinkedHashSet<Integer> set = Sets.newLinkedHashSet();
+ verifyLinkedHashSetContents(set, EMPTY_COLLECTION);
+ }
+
+ public void testNewLinkedHashSetFromCollection() {
+ LinkedHashSet<Integer> set = Sets.newLinkedHashSet(LONGER_LIST);
+ verifyLinkedHashSetContents(set, LONGER_LIST);
+ }
+
+ public void testNewLinkedHashSetFromIterable() {
+ LinkedHashSet<Integer> set = Sets.newLinkedHashSet(new Iterable<Integer>()
+ {
+ public Iterator<Integer> iterator() {
+ return LONGER_LIST.iterator();
+ }
+ });
+ verifyLinkedHashSetContents(set, LONGER_LIST);
+ }
+
+ public void testNewTreeSetEmpty() {
+ TreeSet<Integer> set = Sets.newTreeSet();
+ verifySortedSetContents(set, EMPTY_COLLECTION, null);
+ }
+
+ public void testNewTreeSetEmptyDerived() {
+ TreeSet<Derived> set = Sets.newTreeSet();
+ assertTrue(set.isEmpty());
+ set.add(new Derived("foo"));
+ set.add(new Derived("bar"));
+ JUnitAsserts.assertContentsInOrder(set,
+ new Derived("bar"), new Derived("foo"));
+ }
+
+ public void testNewTreeSetEmptyNonGeneric() {
+ TreeSet<LegacyComparable> set = Sets.newTreeSet();
+ assertTrue(set.isEmpty());
+ set.add(new LegacyComparable("foo"));
+ set.add(new LegacyComparable("bar"));
+ JUnitAsserts.assertContentsInOrder(set,
+ new LegacyComparable("bar"), new LegacyComparable("foo"));
+ }
+
+ public void testNewTreeSetFromCollection() {
+ TreeSet<Integer> set = Sets.newTreeSet(SOME_COLLECTION);
+ verifySortedSetContents(set, SOME_COLLECTION, null);
+ }
+
+ public void testNewTreeSetFromIterable() {
+ TreeSet<Integer> set = Sets.newTreeSet(SOME_ITERABLE);
+ verifySortedSetContents(set, SOME_ITERABLE, null);
+ }
+
+ public void testNewTreeSetFromIterableDerived() {
+ Iterable<Derived> iterable =
+ Arrays.asList(new Derived("foo"), new Derived("bar"));
+ TreeSet<Derived> set = Sets.newTreeSet(iterable);
+ JUnitAsserts.assertContentsInOrder(set,
+ new Derived("bar"), new Derived("foo"));
+ }
+
+ public void testNewTreeSetFromIterableNonGeneric() {
+ Iterable<LegacyComparable> iterable =
+ Arrays.asList(new LegacyComparable("foo"), new LegacyComparable("bar"));
+ TreeSet<LegacyComparable> set = Sets.newTreeSet(iterable);
+ JUnitAsserts.assertContentsInOrder(set,
+ new LegacyComparable("bar"), new LegacyComparable("foo"));
+ }
+
+ public void testNewTreeSetEmptyWithComparator() {
+ TreeSet<Integer> set = Sets.newTreeSet(SOME_COMPARATOR);
+ verifySortedSetContents(set, EMPTY_COLLECTION, SOME_COMPARATOR);
+ }
+
+ public void testComplementOfEnumSet() {
+ Set<SomeEnum> units = EnumSet.of(SomeEnum.B, SomeEnum.D);
+ EnumSet<SomeEnum> otherUnits = Sets.complementOf(units);
+ verifySetContents(otherUnits, EnumSet.of(SomeEnum.A, SomeEnum.C));
+ }
+
+ public void testComplementOfEnumSetWithType() {
+ Set<SomeEnum> units = EnumSet.of(SomeEnum.B, SomeEnum.D);
+ EnumSet<SomeEnum> otherUnits = Sets.complementOf(units, SomeEnum.class);
+ verifySetContents(otherUnits, EnumSet.of(SomeEnum.A, SomeEnum.C));
+ }
+
+ public void testComplementOfRegularSet() {
+ Set<SomeEnum> units = Sets.newHashSet(SomeEnum.B, SomeEnum.D);
+ EnumSet<SomeEnum> otherUnits = Sets.complementOf(units);
+ verifySetContents(otherUnits, EnumSet.of(SomeEnum.A, SomeEnum.C));
+ }
+
+ public void testComplementOfRegularSetWithType() {
+ Set<SomeEnum> units = Sets.newHashSet(SomeEnum.B, SomeEnum.D);
+ EnumSet<SomeEnum> otherUnits = Sets.complementOf(units, SomeEnum.class);
+ verifySetContents(otherUnits, EnumSet.of(SomeEnum.A, SomeEnum.C));
+ }
+
+ public void testComplementOfEmptySet() {
+ Set<SomeEnum> noUnits = Collections.emptySet();
+ EnumSet<SomeEnum> allUnits = Sets.complementOf(noUnits, SomeEnum.class);
+ verifySetContents(EnumSet.allOf(SomeEnum.class), allUnits);
+ }
+
+ public void testComplementOfFullSet() {
+ Set<SomeEnum> allUnits = Sets.newHashSet(SomeEnum.values());
+ EnumSet<SomeEnum> noUnits = Sets.complementOf(allUnits, SomeEnum.class);
+ verifySetContents(noUnits, EnumSet.noneOf(SomeEnum.class));
+ }
+
+ public void testComplementOfEmptyEnumSetWithoutType() {
+ Set<SomeEnum> noUnits = EnumSet.noneOf(SomeEnum.class);
+ EnumSet<SomeEnum> allUnits = Sets.complementOf(noUnits);
+ verifySetContents(allUnits, EnumSet.allOf(SomeEnum.class));
+ }
+
+ public void testComplementOfEmptySetWithoutTypeDoesntWork() {
+ Set<SomeEnum> set = Collections.emptySet();
+ try {
+ Sets.complementOf(set);
+ fail();
+ } catch (IllegalArgumentException expected) {}
+ }
+
+ public void testNullPointerExceptions() throws Exception {
+ NullPointerTester tester = new NullPointerTester();
+ tester.setDefault(Enum.class, SomeEnum.A);
+
+ // TODO: make NPT create empty arrays for defaults automatically
+ tester.setDefault(Collection[].class, new Collection[0]);
+ tester.setDefault(Enum[].class, new Enum[0]);
+ tester.setDefault(Set[].class, new Set[0]);
+ tester.testAllPublicStaticMethods(Sets.class);
+ }
+
+ public void testNewSetFromMap() {
+ Set<Integer> set = Sets.newSetFromMap(new HashMap<Integer, Boolean>());
+ set.addAll(SOME_COLLECTION);
+ verifySetContents(set, SOME_COLLECTION);
+ }
+
+ public void testNewSetFromMapSerialization() {
+ Set<Integer> set =
+ Sets.newSetFromMap(new LinkedHashMap<Integer, Boolean>());
+ set.addAll(SOME_COLLECTION);
+ Set<Integer> copy = SerializableTester.reserializeAndAssert(set);
+ JUnitAsserts.assertContentsInOrder(copy, 0, 1);
+ }
+
+ public void testNewSetFromMapIllegal() {
+ Map<Integer, Boolean> map = new LinkedHashMap<Integer, Boolean>();
+ map.put(2, true);
+ try {
+ Sets.newSetFromMap(map);
+ fail();
+ } catch (IllegalArgumentException expected) {}
+ }
+
+ /**
+ * Utility method to verify that the given LinkedHashSet is equal to and
+ * hashes identically to a set constructed with the elements in the given
+ * collection. Also verifies that the ordering in the set is the same
+ * as the ordering of the given contents.
+ */
+ private static <E> void verifyLinkedHashSetContents(
+ LinkedHashSet<E> set, Collection<E> contents) {
+ assertEquals("LinkedHashSet should have preserved order for iteration",
+ new ArrayList<E>(set), new ArrayList<E>(contents));
+ verifySetContents(set, contents);
+ }
+
+ /**
+ * Utility method to verify that the given SortedSet is equal to and
+ * hashes identically to a set constructed with the elements in the
+ * given iterable. Also verifies that the comparator is the same as the
+ * given comparator.
+ */
+ private static <E> void verifySortedSetContents(
+ SortedSet<E> set, Iterable<E> iterable,
+ @Nullable Comparator<E> comparator) {
+ assertSame(comparator, set.comparator());
+ verifySetContents(set, iterable);
+ }
+
+ /**
+ * Utility method that verifies that the given set is equal to and hashes
+ * identically to a set constructed with the elements in the given iterable.
+ */
+ private static <E> void verifySetContents(Set<E> set, Iterable<E> contents) {
+ Set<E> expected = null;
+ if (contents instanceof Set) {
+ expected = (Set<E>) contents;
+ } else {
+ expected = new HashSet<E>();
+ for (E element : contents) {
+ expected.add(element);
+ }
+ }
+ assertEquals(expected, set);
+ }
+
+ /**
+ * Simple base class to verify that we handle generics correctly.
+ */
+ static class Base implements Comparable<Base>, Serializable {
+ private final String s;
+
+ public Base(String s) {
+ this.s = s;
+ }
+
+ @Override public int hashCode() { // delegate to 's'
+ return s.hashCode();
+ }
+
+ @Override public boolean equals(Object other) {
+ if (other == null) {
+ return false;
+ } else if (other instanceof Base) {
+ return s.equals(((Base) other).s);
+ } else {
+ return false;
+ }
+ }
+
+ public int compareTo(Base o) {
+ return s.compareTo(o.s);
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Simple derived class to verify that we handle generics correctly.
+ */
+ static class Derived extends Base {
+ public Derived(String s) {
+ super(s);
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ public void testFilterFiltered() {
+ Set<String> unfiltered = Sets.newHashSet();
+ Set<String> filtered = Sets.filter(
+ Sets.filter(unfiltered, Collections2Test.LENGTH_1),
+ Collections2Test.STARTS_WITH_VOWEL);
+ unfiltered.add("a");
+ unfiltered.add("b");
+ unfiltered.add("apple");
+ unfiltered.add("banana");
+ unfiltered.add("e");
+ assertEquals(ImmutableSet.of("a", "e"), filtered);
+ assertEquals(ImmutableSet.of("a", "b", "apple", "banana", "e"), unfiltered);
+
+ try {
+ filtered.add("d");
+ fail();
+ } catch (IllegalArgumentException expected) {}
+ try {
+ filtered.add("egg");
+ fail();
+ } catch (IllegalArgumentException expected) {}
+ assertEquals(ImmutableSet.of("a", "e"), filtered);
+ assertEquals(ImmutableSet.of("a", "b", "apple", "banana", "e"), unfiltered);
+
+ filtered.clear();
+ assertTrue(filtered.isEmpty());
+ assertEquals(ImmutableSet.of("b", "apple", "banana"), unfiltered);
+ }
+}
diff --git a/test/com/google/common/collect/SimpleAbstractMultisetTest.java b/test/com/google/common/collect/SimpleAbstractMultisetTest.java
new file mode 100644
index 0000000..a2167cf
--- /dev/null
+++ b/test/com/google/common/collect/SimpleAbstractMultisetTest.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import java.io.Serializable;
+import java.util.AbstractSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Unit test for {@link AbstractMultiset}.
+ *
+ * @author Kevin Bourrillion
+ */
+@SuppressWarnings("serial") // No serialization is used in this test
+public class SimpleAbstractMultisetTest extends AbstractMultisetTest {
+
+ @Override protected <E> Multiset<E> create() {
+ return new SimpleAbstractMultiset<E>();
+ }
+
+ public void testRemoveUnsupported() {
+ Multiset<String> multiset = new NoRemoveMultiset<String>();
+ multiset.add("a");
+ try {
+ multiset.remove("a");
+ fail();
+ } catch (UnsupportedOperationException expected) {}
+ assertTrue(multiset.contains("a"));
+ }
+
+ private static class NoRemoveMultiset<E> extends AbstractMultiset<E>
+ implements Serializable {
+ final Map<E, Integer> backingMap = Maps.newHashMap();
+
+ @Override public int add(E element, int occurrences) {
+ checkArgument(occurrences >= 0);
+ Integer frequency = backingMap.get(element);
+ if (frequency == null) {
+ frequency = 0;
+ }
+ if (occurrences == 0) {
+ return frequency;
+ }
+ checkArgument(occurrences <= Integer.MAX_VALUE - frequency);
+ backingMap.put(element, frequency + occurrences);
+ return frequency;
+ }
+
+ @Override public Set<Entry<E>> entrySet() {
+ return new AbstractSet<Entry<E>>() {
+ @Override public int size() {
+ return backingMap.size();
+ }
+
+ @Override public Iterator<Multiset.Entry<E>> iterator() {
+ final Iterator<Map.Entry<E, Integer>> backingEntries
+ = backingMap.entrySet().iterator();
+ return new Iterator<Multiset.Entry<E>>() {
+ public boolean hasNext() {
+ return backingEntries.hasNext();
+ }
+ public Multiset.Entry<E> next() {
+ final Map.Entry<E, Integer> mapEntry = backingEntries.next();
+ return new Multisets.AbstractEntry<E>() {
+ public E getElement() {
+ return mapEntry.getKey();
+ }
+ public int getCount() {
+ Integer frequency = backingMap.get(getElement());
+ return (frequency == null) ? 0 : frequency;
+ }
+ };
+ }
+ public void remove() {
+ backingEntries.remove();
+ }
+ };
+ }
+ };
+ }
+ }
+
+ private static class SimpleAbstractMultiset<E> extends NoRemoveMultiset<E> {
+ @SuppressWarnings("unchecked")
+ @Override public int remove(Object element, int occurrences) {
+ checkArgument(occurrences >= 0);
+ Integer count = backingMap.get(element);
+ if (count == null) {
+ return 0;
+ } else if (count > occurrences) {
+ backingMap.put((E) element, count - occurrences);
+ return count;
+ } else {
+ return backingMap.remove(element);
+ }
+ }
+ }
+}
diff --git a/test/com/google/common/collect/SubMapMultimapAsMapImplementsMapTest.java b/test/com/google/common/collect/SubMapMultimapAsMapImplementsMapTest.java
new file mode 100644
index 0000000..6008fdd
--- /dev/null
+++ b/test/com/google/common/collect/SubMapMultimapAsMapImplementsMapTest.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.testing.MapInterfaceTest;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+
+/**
+ * Test {@code TreeMultimap.asMap().subMap()} with {@link MapInterfaceTest}.
+ *
+ * @author Jared Levy
+ */
+public class SubMapMultimapAsMapImplementsMapTest
+ extends AbstractMultimapAsMapImplementsMapTest {
+
+ public SubMapMultimapAsMapImplementsMapTest() {
+ super(true, true);
+ }
+
+ private TreeMultimap<String, Integer> createMultimap() {
+ TreeMultimap<String, Integer> multimap
+ = TreeMultimap.create(Ordering.<String>natural().nullsFirst(),
+ Ordering.<Integer>natural().nullsFirst());
+ multimap.put("a", -1);
+ multimap.put("a", -3);
+ multimap.put("z", -2);
+ return multimap;
+ }
+
+ @Override protected Map<String, Collection<Integer>> makeEmptyMap() {
+ return createMultimap().asMap().subMap("e", "p");
+ }
+
+ @Override protected Map<String, Collection<Integer>> makePopulatedMap() {
+ TreeMultimap<String, Integer> multimap = createMultimap();
+ multimap.put("f", 1);
+ multimap.put("f", 2);
+ multimap.put("g", 3);
+ multimap.put("h", 4);
+ return multimap.asMap().subMap("e", "p");
+ }
+
+ @Override protected String getKeyNotInPopulatedMap() {
+ return "a";
+ }
+
+ @Override protected Collection<Integer> getValueNotInPopulatedMap() {
+ return Collections.singleton(-2);
+ }
+}
diff --git a/test/com/google/common/collect/SynchronizedBiMapTest.java b/test/com/google/common/collect/SynchronizedBiMapTest.java
new file mode 100644
index 0000000..c195e57
--- /dev/null
+++ b/test/com/google/common/collect/SynchronizedBiMapTest.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.Synchronized.SynchronizedBiMap;
+import com.google.common.collect.Synchronized.SynchronizedSet;
+
+import junit.framework.TestSuite;
+
+import java.util.Set;
+
+/**
+ * Tests for {@code Synchronized#biMap}.
+ *
+ * @author Mike Bostock
+ */
+public class SynchronizedBiMapTest extends SynchronizedMapTest {
+
+ public static TestSuite suite() {
+ TestSuite suite = new TestSuite(SynchronizedBiMapTest.class);
+ suite.addTestSuite(AbstractBiMapTests.class);
+ return suite;
+ }
+
+ @Override protected <K,V> BiMap<K,V> create() {
+ TestBiMap<K,V> inner = new TestBiMap<K,V>(HashBiMap.<K,V>create(), mutex);
+ BiMap<K,V> outer = Synchronized.biMap(inner, mutex);
+ return outer;
+ }
+
+ static class TestBiMap<K,V> extends TestMap<K,V> implements BiMap<K,V> {
+ private final BiMap<K,V> delegate;
+
+ public TestBiMap(BiMap<K,V> delegate, Object mutex) {
+ super(delegate, mutex);
+ this.delegate = delegate;
+ }
+
+ public V forcePut(K key, V value) {
+ assertTrue(Thread.holdsLock(mutex));
+ return delegate.forcePut(key, value);
+ }
+
+ public BiMap<V,K> inverse() {
+ assertTrue(Thread.holdsLock(mutex));
+ return delegate.inverse();
+ }
+
+ @Override public Set<V> values() {
+ assertTrue(Thread.holdsLock(mutex));
+ return delegate.values();
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ public void testForcePut() {
+ create().forcePut(null, null);
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testInverse() {
+ BiMap<String, Integer> bimap = create();
+ BiMap<Integer, String> inverse = bimap.inverse();
+ assertSame(bimap, inverse.inverse());
+ assertTrue(inverse instanceof SynchronizedBiMap);
+ assertSame(mutex, ((SynchronizedBiMap<?,?>) inverse).mutex);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override public void testValues() {
+ BiMap<String, Integer> map = create();
+ Set<Integer> values = map.values();
+ assertTrue(values instanceof SynchronizedSet);
+ assertSame(mutex, ((SynchronizedSet<?>) values).mutex);
+ }
+
+ public static class AbstractBiMapTests extends AbstractBiMapTest {
+ public final Object mutex = new Integer(1); // something Serializable
+
+ @Override protected BiMap<Integer, String> create() {
+ TestBiMap<Integer, String> inner = new TestBiMap<Integer, String>(
+ HashBiMap.<Integer, String>create(), mutex);
+ BiMap<Integer, String> outer = Synchronized.biMap(inner, mutex);
+ return outer;
+ }
+
+ /**
+ * If you serialize a synchronized bimap and its inverse together, the
+ * reserialized bimaps will have backing maps that stay in sync, as shown
+ * by the {@code testSerializationWithInverseEqual()} test. However, the
+ * inverse of one won't be the same as the other.
+ *
+ * To make them the same, the inverse synchronized bimap would need a custom
+ * serialized form, similar to what {@code AbstractBiMap.Inverse} does.
+ */
+ @Override public void testSerializationWithInverseSame() {}
+ }
+}
diff --git a/test/com/google/common/collect/SynchronizedMapTest.java b/test/com/google/common/collect/SynchronizedMapTest.java
new file mode 100644
index 0000000..5ad828e
--- /dev/null
+++ b/test/com/google/common/collect/SynchronizedMapTest.java
@@ -0,0 +1,220 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.collect.Synchronized.SynchronizedCollection;
+import com.google.common.collect.Synchronized.SynchronizedSet;
+import com.google.common.testutils.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Tests for {@code Synchronized#map}.
+ *
+ * @author Mike Bostock
+ */
+public class SynchronizedMapTest extends TestCase {
+ public final Object mutex = new Integer(1); // something Serializable
+
+ protected <K, V> Map<K, V> create() {
+ TestMap<K, V> inner = new TestMap<K, V>(new HashMap<K, V>(), mutex);
+ Map<K, V> outer = Synchronized.map(inner, mutex);
+ return outer;
+ }
+
+ static class TestMap<K, V> extends ForwardingMap<K, V>
+ implements Serializable {
+ public final Object mutex;
+ private Map<K, V> delegate;
+ public TestMap(Map<K, V> delegate, Object mutex) {
+ checkNotNull(mutex);
+ this.delegate = delegate;
+ this.mutex = mutex;
+ }
+
+ @Override protected Map<K, V> delegate() {
+ return delegate;
+ }
+
+ @Override public int size() {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.size();
+ }
+
+ @Override public boolean isEmpty() {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.isEmpty();
+ }
+
+ @Override public V remove(Object object) {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.remove(object);
+ }
+
+ @Override public void clear() {
+ assertTrue(Thread.holdsLock(mutex));
+ super.clear();
+ }
+
+ @Override public boolean containsKey(Object key) {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.containsKey(key);
+ }
+
+ @Override public boolean containsValue(Object value) {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.containsValue(value);
+ }
+
+ @Override public V get(Object key) {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.get(key);
+ }
+
+ @Override public V put(K key, V value) {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.put(key, value);
+ }
+
+ @Override public void putAll(Map<? extends K, ? extends V> map) {
+ assertTrue(Thread.holdsLock(mutex));
+ super.putAll(map);
+ }
+
+ @Override public Set<K> keySet() {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.keySet();
+ }
+
+ @Override public Collection<V> values() {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.values();
+ }
+
+ @Override public Set<Entry<K, V>> entrySet() {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.entrySet();
+ }
+
+ @Override public boolean equals(Object obj) {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.equals(obj);
+ }
+
+ @Override public int hashCode() {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.hashCode();
+ }
+
+ @Override public String toString() {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.toString();
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ /*
+ * This is somewhat of a weak test; we verify that all of the methods are
+ * correct, but not that they're actually forwarding correctly. We also rely
+ * on the other tests (e.g., SynchronizedSetTest) to verify that the
+ * collection views are synchronized correctly.
+ */
+
+ public void testSize() {
+ create().size();
+ }
+
+ public void testIsEmpty() {
+ create().isEmpty();
+ }
+
+ public void testRemove() {
+ create().remove(null);
+ }
+
+ public void testClear() {
+ create().clear();
+ }
+
+ public void testContainsKey() {
+ create().containsKey(null);
+ }
+
+ public void testContainsValue() {
+ create().containsValue(null);
+ }
+
+ public void testGet() {
+ create().get(null);
+ }
+
+ public void testPut() {
+ create().put(null, null);
+ }
+
+ public void testPutAll() {
+ create().putAll(new HashMap<String, Integer>());
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testKeySet() {
+ Map<String, Integer> map = create();
+ Set<String> keySet = map.keySet();
+ assertTrue(keySet instanceof SynchronizedSet);
+ assertSame(mutex, ((SynchronizedSet<?>) keySet).mutex);
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testValues() {
+ Map<String, Integer> map = create();
+ Collection<Integer> values = map.values();
+ assertTrue(values instanceof SynchronizedCollection);
+ assertSame(mutex, ((SynchronizedCollection<?>) values).mutex);
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testEntrySet() {
+ Map<String, Integer> map = create();
+ Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
+ assertTrue(entrySet instanceof SynchronizedSet);
+ assertSame(mutex, ((SynchronizedSet<?>) entrySet).mutex);
+ }
+
+ public void testEquals() {
+ create().equals(new HashMap<String, Integer>());
+ }
+
+ public void testHashCode() {
+ create().hashCode();
+ }
+
+ public void testToString() {
+ create().toString();
+ }
+
+ public void testSerialization() {
+ SerializableTester.reserializeAndAssert(create());
+ }
+}
diff --git a/test/com/google/common/collect/SynchronizedMultimapTest.java b/test/com/google/common/collect/SynchronizedMultimapTest.java
new file mode 100644
index 0000000..a45b19e
--- /dev/null
+++ b/test/com/google/common/collect/SynchronizedMultimapTest.java
@@ -0,0 +1,217 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.testing.junit3.JUnitAsserts;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Map;
+import java.util.RandomAccess;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * Tests for {@code Synchronized#multimap}.
+ *
+ * @author Mike Bostock
+ */
+public class SynchronizedMultimapTest extends AbstractSetMultimapTest {
+
+ @Override protected Multimap<String, Integer> create() {
+ TestMultimap<String, Integer> inner = new TestMultimap<String, Integer>();
+ Multimap<String, Integer> outer = Synchronized.multimap(inner, inner.mutex);
+ return outer;
+ }
+
+ private static final class TestMultimap<K, V> extends ForwardingMultimap<K, V>
+ implements Serializable {
+ final Multimap<K, V> delegate = HashMultimap.create();
+ public final Object mutex = new Integer(1); // something Serializable
+
+ @Override protected Multimap<K, V> delegate() {
+ return delegate;
+ }
+
+ @Override public String toString() {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.toString();
+ }
+
+ @Override public boolean equals(@Nullable Object o) {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.equals(o);
+ }
+
+ @Override public int hashCode() {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.hashCode();
+ }
+
+ @Override public int size() {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.size();
+ }
+
+ @Override public boolean isEmpty() {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.isEmpty();
+ }
+
+ @Override public boolean containsKey(@Nullable Object key) {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.containsKey(key);
+ }
+
+ @Override public boolean containsValue(@Nullable Object value) {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.containsValue(value);
+ }
+
+ @Override public boolean containsEntry(@Nullable Object key,
+ @Nullable Object value) {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.containsEntry(key, value);
+ }
+
+ @Override public Collection<V> get(@Nullable K key) {
+ assertTrue(Thread.holdsLock(mutex));
+ /* TODO: verify that the Collection is also synchronized? */
+ return super.get(key);
+ }
+
+ @Override public boolean put(K key, V value) {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.put(key, value);
+ }
+
+ @Override public boolean putAll(@Nullable K key,
+ Iterable<? extends V> values) {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.putAll(key, values);
+ }
+
+ @Override public boolean putAll(Multimap<? extends K, ? extends V> map) {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.putAll(map);
+ }
+
+ @Override public Collection<V> replaceValues(@Nullable K key,
+ Iterable<? extends V> values) {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.replaceValues(key, values);
+ }
+
+ @Override public boolean remove(@Nullable Object key,
+ @Nullable Object value) {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.remove(key, value);
+ }
+
+ @Override public Collection<V> removeAll(@Nullable Object key) {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.removeAll(key);
+ }
+
+ @Override public void clear() {
+ assertTrue(Thread.holdsLock(mutex));
+ super.clear();
+ }
+
+ @Override public Set<K> keySet() {
+ assertTrue(Thread.holdsLock(mutex));
+ /* TODO: verify that the Set is also synchronized? */
+ return super.keySet();
+ }
+
+ @Override public Multiset<K> keys() {
+ assertTrue(Thread.holdsLock(mutex));
+ /* TODO: verify that the Set is also synchronized? */
+ return super.keys();
+ }
+
+ @Override public Collection<V> values() {
+ assertTrue(Thread.holdsLock(mutex));
+ /* TODO: verify that the Collection is also synchronized? */
+ return super.values();
+ }
+
+ @Override public Collection<Map.Entry<K, V>> entries() {
+ assertTrue(Thread.holdsLock(mutex));
+ /* TODO: verify that the Collection is also synchronized? */
+ return super.entries();
+ }
+
+ @Override public Map<K, Collection<V>> asMap() {
+ assertTrue(Thread.holdsLock(mutex));
+ /* TODO: verify that the Map is also synchronized? */
+ return super.asMap();
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ public void testSynchronizedListMultimap() {
+ ListMultimap<String, Integer> multimap
+ = Multimaps.synchronizedListMultimap(
+ ArrayListMultimap.<String, Integer>create());
+ multimap.putAll("foo", Arrays.asList(3, -1, 2, 4, 1));
+ multimap.putAll("bar", Arrays.asList(1, 2, 3, 1));
+ JUnitAsserts.assertContentsInOrder(
+ multimap.removeAll("foo"), 3, -1, 2, 4, 1);
+ assertFalse(multimap.containsKey("foo"));
+ JUnitAsserts.assertContentsInOrder(
+ multimap.replaceValues("bar", Arrays.asList(6, 5)), 1, 2, 3, 1);
+ JUnitAsserts.assertContentsInOrder(multimap.get("bar"), 6, 5);
+ }
+
+ public void testSynchronizedSortedSetMultimap() {
+ SortedSetMultimap<String, Integer> multimap
+ = Multimaps.synchronizedSortedSetMultimap(
+ TreeMultimap.<String, Integer>create());
+ multimap.putAll("foo", Arrays.asList(3, -1, 2, 4, 1));
+ multimap.putAll("bar", Arrays.asList(1, 2, 3, 1));
+ JUnitAsserts.assertContentsInOrder(
+ multimap.removeAll("foo"), -1, 1, 2, 3, 4);
+ assertFalse(multimap.containsKey("foo"));
+ JUnitAsserts.assertContentsInOrder(
+ multimap.replaceValues("bar", Arrays.asList(6, 5)), 1, 2, 3);
+ JUnitAsserts.assertContentsInOrder(multimap.get("bar"), 5, 6);
+ }
+
+ public void testSynchronizedArrayListMultimapRandomAccess() {
+ ListMultimap<String, Integer> delegate = ArrayListMultimap.create();
+ delegate.put("foo", 1);
+ delegate.put("foo", 3);
+ ListMultimap<String, Integer> multimap
+ = Multimaps.synchronizedListMultimap(delegate);
+ assertTrue(multimap.get("foo") instanceof RandomAccess);
+ assertTrue(multimap.get("bar") instanceof RandomAccess);
+ }
+
+ public void testSynchronizedLinkedListMultimapRandomAccess() {
+ ListMultimap<String, Integer> delegate = LinkedListMultimap.create();
+ delegate.put("foo", 1);
+ delegate.put("foo", 3);
+ ListMultimap<String, Integer> multimap
+ = Multimaps.synchronizedListMultimap(delegate);
+ assertFalse(multimap.get("foo") instanceof RandomAccess);
+ assertFalse(multimap.get("bar") instanceof RandomAccess);
+ }
+}
diff --git a/test/com/google/common/collect/SynchronizedSetTest.java b/test/com/google/common/collect/SynchronizedSetTest.java
new file mode 100644
index 0000000..783b529
--- /dev/null
+++ b/test/com/google/common/collect/SynchronizedSetTest.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.testutils.SerializableTester;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * Tests for {@code Synchronized#set}.
+ *
+ * @author Mike Bostock
+ */
+public class SynchronizedSetTest extends AbstractCollectionTest {
+ public final Object mutex = new Integer(1); // something Serializable
+
+ @Override protected <E> Set<E> create() {
+ TestSet<E> inner = new TestSet<E>(new HashSet<E>(), mutex);
+ Set<E> outer = Synchronized.set(inner, inner.mutex);
+ return outer;
+ }
+
+ @Override public void testNullPointerExceptions() throws Exception {
+ /* Skip this test, as SynchronizedSet is not a public class. */
+ }
+
+ public void testSerialization() {
+ SerializableTester.reserializeAndAssert(create());
+ }
+
+ static class TestSet<E> extends ForwardingSet<E> implements Serializable {
+ final Set<E> delegate;
+ public final Object mutex;
+
+ public TestSet(Set<E> delegate, Object mutex) {
+ checkNotNull(mutex);
+ this.delegate = delegate;
+ this.mutex = mutex;
+ }
+
+ @Override protected Set<E> delegate() {
+ return delegate;
+ }
+
+ @Override public String toString() {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.toString();
+ }
+
+ @Override public boolean equals(@Nullable Object o) {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.equals(o);
+ }
+
+ @Override public int hashCode() {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.hashCode();
+ }
+
+ @Override public boolean add(@Nullable E o) {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.add(o);
+ }
+
+ @Override public boolean addAll(Collection<? extends E> c) {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.addAll(c);
+ }
+
+ @Override public void clear() {
+ assertTrue(Thread.holdsLock(mutex));
+ super.clear();
+ }
+
+ @Override public boolean contains(@Nullable Object o) {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.contains(o);
+ }
+
+ @Override public boolean containsAll(Collection<?> c) {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.containsAll(c);
+ }
+
+ @Override public boolean isEmpty() {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.isEmpty();
+ }
+
+ /* Don't test iterator(); it may or may not hold the mutex. */
+
+ @Override public boolean remove(@Nullable Object o) {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.remove(o);
+ }
+
+ @Override public boolean removeAll(Collection<?> c) {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.removeAll(c);
+ }
+
+ @Override public boolean retainAll(Collection<?> c) {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.retainAll(c);
+ }
+
+ @Override public int size() {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.size();
+ }
+
+ @Override public Object[] toArray() {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.toArray();
+ }
+
+ @Override public <T> T[] toArray(T[] a) {
+ assertTrue(Thread.holdsLock(mutex));
+ return super.toArray(a);
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+}
diff --git a/test/com/google/common/collect/TreeMultimapExplicitTest.java b/test/com/google/common/collect/TreeMultimapExplicitTest.java
new file mode 100644
index 0000000..b2409b8
--- /dev/null
+++ b/test/com/google/common/collect/TreeMultimapExplicitTest.java
@@ -0,0 +1,194 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.testing.Helpers.assertContentsAnyOrder;
+import static com.google.common.testing.junit3.JUnitAsserts.assertContentsInOrder;
+import com.google.common.testutils.SerializableTester;
+
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.SortedSet;
+
+/**
+ * Unit tests for {@code TreeMultimap} with explicit comparators.
+ *
+ * @author Jared Levy
+ */
+public class TreeMultimapExplicitTest extends AbstractSetMultimapTest {
+
+ /**
+ * Compare strings lengths, and if the lengths are equal compare the strings.
+ * A {@code null} is less than any non-null value.
+ */
+ private enum StringLength implements Comparator<String> {
+ COMPARATOR;
+
+ public int compare(String first, String second) {
+ if (first == second) {
+ return 0;
+ } else if (first == null) {
+ return -1;
+ } else if (second == null) {
+ return 1;
+ } else if (first.length() != second.length()) {
+ return first.length() - second.length();
+ } else {
+ return first.compareTo(second);
+ }
+ }
+ }
+
+ /**
+ * Decreasing integer values. A {@code null} comes before any non-null value.
+ */
+ private static final Comparator<Integer> DECREASING_INT_COMPARATOR =
+ Ordering.<Integer>natural().reverse().nullsFirst();
+
+ @Override protected Multimap<String, Integer> create() {
+ return TreeMultimap.create(
+ StringLength.COMPARATOR, DECREASING_INT_COMPARATOR);
+ }
+
+ /**
+ * Create and populate a {@code TreeMultimap} with explicit comparators.
+ */
+ private TreeMultimap<String, Integer> createPopulate() {
+ TreeMultimap<String, Integer> multimap = TreeMultimap.create(
+ StringLength.COMPARATOR, DECREASING_INT_COMPARATOR);
+ multimap.put("google", 2);
+ multimap.put("google", 6);
+ multimap.put(null, 3);
+ multimap.put(null, 1);
+ multimap.put(null, 7);
+ multimap.put("tree", 0);
+ multimap.put("tree", null);
+ return multimap;
+ }
+
+ /**
+ * Test that a TreeMultimap created from another uses the natural ordering.
+ */
+ public void testMultimapCreateFromTreeMultimap() {
+ TreeMultimap<String, Integer> tree = TreeMultimap.create(
+ StringLength.COMPARATOR, DECREASING_INT_COMPARATOR);
+ tree.put("google", 2);
+ tree.put("google", 6);
+ tree.put("tree", 0);
+ tree.put("tree", 3);
+ assertContentsInOrder(tree.keySet(), "tree", "google");
+ assertContentsInOrder(tree.get("google"), 6, 2);
+
+ TreeMultimap<String, Integer> copy = TreeMultimap.create(tree);
+ assertEquals(tree, copy);
+ assertContentsInOrder(copy.keySet(), "google", "tree");
+ assertContentsInOrder(copy.get("google"), 2, 6);
+ assertEquals(Ordering.natural(), copy.keyComparator());
+ assertEquals(Ordering.natural(), copy.valueComparator());
+ assertEquals(Ordering.natural(), copy.get("google").comparator());
+ }
+
+ public void testToString() {
+ assertEquals("{bar=[3, 2, 1], foo=[4, 3, 2, 1, -1]}",
+ createSample().toString());
+ }
+
+ public void testGetComparator() {
+ TreeMultimap<String, Integer> multimap = createPopulate();
+ assertEquals(StringLength.COMPARATOR, multimap.keyComparator());
+ assertEquals(DECREASING_INT_COMPARATOR, multimap.valueComparator());
+ }
+
+ public void testOrderedGet() {
+ TreeMultimap<String, Integer> multimap = createPopulate();
+ assertContentsInOrder(multimap.get(null), 7, 3, 1);
+ assertContentsInOrder(multimap.get("google"), 6, 2);
+ assertContentsInOrder(multimap.get("tree"), null, 0);
+ }
+
+ public void testOrderedKeySet() {
+ TreeMultimap<String, Integer> multimap = createPopulate();
+ assertContentsInOrder(
+ multimap.keySet(), null, "tree", "google");
+ }
+
+ public void testOrderedAsMapEntries() {
+ TreeMultimap<String, Integer> multimap = createPopulate();
+ Iterator<Map.Entry<String, Collection<Integer>>> iterator =
+ multimap.asMap().entrySet().iterator();
+ Map.Entry<String, Collection<Integer>> entry = iterator.next();
+ assertEquals(null, entry.getKey());
+ assertContentsAnyOrder(entry.getValue(), 7, 3, 1);
+ entry = iterator.next();
+ assertEquals("tree", entry.getKey());
+ assertContentsAnyOrder(entry.getValue(), null, 0);
+ entry = iterator.next();
+ assertEquals("google", entry.getKey());
+ assertContentsAnyOrder(entry.getValue(), 6, 2);
+ }
+
+ public void testOrderedEntries() {
+ TreeMultimap<String, Integer> multimap = createPopulate();
+ assertContentsInOrder(multimap.entries(),
+ Maps.immutableEntry(null, 7),
+ Maps.immutableEntry(null, 3),
+ Maps.immutableEntry(null, 1),
+ Maps.immutableEntry("tree", null),
+ Maps.immutableEntry("tree", 0),
+ Maps.immutableEntry("google", 6),
+ Maps.immutableEntry("google", 2));
+ }
+
+ public void testOrderedValues() {
+ TreeMultimap<String, Integer> multimap = createPopulate();
+ assertContentsInOrder(multimap.values(),
+ 7, 3, 1, null, 0, 6, 2);
+ }
+
+ public void testComparator() {
+ TreeMultimap<String, Integer> multimap = createPopulate();
+ assertEquals(DECREASING_INT_COMPARATOR, multimap.get("foo").comparator());
+ assertEquals(DECREASING_INT_COMPARATOR,
+ multimap.get("missing").comparator());
+ }
+
+ public void testSortedKeySet() {
+ TreeMultimap<String, Integer> multimap = createPopulate();
+ SortedSet<String> keySet = multimap.keySet();
+
+ assertEquals(null, keySet.first());
+ assertEquals("google", keySet.last());
+ assertEquals(StringLength.COMPARATOR, keySet.comparator());
+ assertEquals(Sets.newHashSet(null, "tree"), keySet.headSet("yahoo"));
+ assertEquals(Sets.newHashSet("google"), keySet.tailSet("yahoo"));
+ assertEquals(Sets.newHashSet("tree"), keySet.subSet("ask", "yahoo"));
+ }
+
+ public void testExplicitComparatorSerialization() {
+ TreeMultimap<String, Integer> multimap = createPopulate();
+ TreeMultimap<String, Integer> copy
+ = SerializableTester.reserializeAndAssert(multimap);
+ assertContentsInOrder(
+ copy.values(), 7, 3, 1, null, 0, 6, 2);
+ assertContentsInOrder(
+ copy.keySet(), null, "tree", "google");
+ assertEquals(multimap.keyComparator(), copy.keyComparator());
+ assertEquals(multimap.valueComparator(), copy.valueComparator());
+ }
+}
diff --git a/test/com/google/common/collect/TreeMultimapNaturalTest.java b/test/com/google/common/collect/TreeMultimapNaturalTest.java
new file mode 100644
index 0000000..5a41b12
--- /dev/null
+++ b/test/com/google/common/collect/TreeMultimapNaturalTest.java
@@ -0,0 +1,484 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.Lists.newArrayList;
+import static com.google.common.collect.Sets.newHashSet;
+import com.google.common.collect.SetsTest.Derived;
+import com.google.common.collect.testing.Helpers;
+import static com.google.common.collect.testing.IteratorFeature.MODIFIABLE;
+import com.google.common.collect.testing.IteratorTester;
+import static com.google.common.testing.junit3.JUnitAsserts.assertContentsInOrder;
+import com.google.common.testutils.SerializableTester;
+
+import static java.util.Arrays.asList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.SortedMap;
+import java.util.Map.Entry;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.SortedSet;
+
+/**
+ * Unit tests for {@code TreeMultimap} with natural ordering.
+ *
+ * @author Jared Levy
+ */
+public class TreeMultimapNaturalTest<E> extends AbstractSetMultimapTest {
+ @Override protected Multimap<String, Integer> create() {
+ return TreeMultimap.create();
+ }
+
+ /* Null keys and values aren't supported. */
+ @Override protected String nullKey() {
+ return "null";
+ }
+
+ @Override protected Integer nullValue() {
+ return 42;
+ }
+
+ /**
+ * Create and populate a {@code TreeMultimap} with the natural ordering of
+ * keys and values.
+ */
+ private TreeMultimap<String, Integer> createPopulate() {
+ TreeMultimap<String, Integer> multimap = TreeMultimap.create();
+ multimap.put("google", 2);
+ multimap.put("google", 6);
+ multimap.put("foo", 3);
+ multimap.put("foo", 1);
+ multimap.put("foo", 7);
+ multimap.put("tree", 4);
+ multimap.put("tree", 0);
+ return multimap;
+ }
+
+ public void testToString() {
+ assertEquals("{bar=[1, 2, 3], foo=[-1, 1, 2, 3, 4]}",
+ createSample().toString());
+ }
+
+ public void testOrderedGet() {
+ TreeMultimap<String, Integer> multimap = createPopulate();
+ assertContentsInOrder(multimap.get("foo"), 1, 3, 7);
+ assertContentsInOrder(multimap.get("google"), 2, 6);
+ assertContentsInOrder(multimap.get("tree"), 0, 4);
+ }
+
+ public void testOrderedKeySet() {
+ TreeMultimap<String, Integer> multimap = createPopulate();
+ assertContentsInOrder(
+ multimap.keySet(), "foo", "google", "tree");
+ }
+
+ public void testOrderedAsMapEntries() {
+ TreeMultimap<String, Integer> multimap = createPopulate();
+ Iterator<Map.Entry<String, Collection<Integer>>> iterator =
+ multimap.asMap().entrySet().iterator();
+ Map.Entry<String, Collection<Integer>> entry = iterator.next();
+ assertEquals("foo", entry.getKey());
+ Helpers.assertContentsAnyOrder(entry.getValue(), 1, 3, 7);
+ entry = iterator.next();
+ assertEquals("google", entry.getKey());
+ Helpers.assertContentsAnyOrder(entry.getValue(), 2, 6);
+ entry = iterator.next();
+ assertEquals("tree", entry.getKey());
+ Helpers.assertContentsAnyOrder(entry.getValue(), 0, 4);
+ }
+
+ public void testOrderedEntries() {
+ TreeMultimap<String, Integer> multimap = createPopulate();
+ assertContentsInOrder(multimap.entries(),
+ Maps.immutableEntry("foo", 1),
+ Maps.immutableEntry("foo", 3),
+ Maps.immutableEntry("foo", 7),
+ Maps.immutableEntry("google", 2),
+ Maps.immutableEntry("google", 6),
+ Maps.immutableEntry("tree", 0),
+ Maps.immutableEntry("tree", 4));
+ }
+
+ public void testOrderedValues() {
+ TreeMultimap<String, Integer> multimap = createPopulate();
+ assertContentsInOrder(multimap.values(),
+ 1, 3, 7, 2, 6, 0, 4);
+ }
+
+ public void testFirst() {
+ TreeMultimap<String, Integer> multimap = createPopulate();
+ assertEquals(Integer.valueOf(1), multimap.get("foo").first());
+ try {
+ multimap.get("missing").first();
+ fail("Expected NoSuchElementException");
+ } catch (NoSuchElementException expected) {}
+ }
+
+ public void testLast() {
+ TreeMultimap<String, Integer> multimap = createPopulate();
+ assertEquals(Integer.valueOf(7), multimap.get("foo").last());
+ try {
+ multimap.get("missing").last();
+ fail("Expected NoSuchElementException");
+ } catch (NoSuchElementException expected) {}
+ }
+
+ public void testHeadSet() {
+ TreeMultimap<String, Integer> multimap = createPopulate();
+ Set<Integer> fooSet = multimap.get("foo").headSet(4);
+ assertEquals(Sets.newHashSet(1, 3), fooSet);
+ Set<Integer> missingSet = multimap.get("missing").headSet(4);
+ assertEquals(Sets.newHashSet(), missingSet);
+
+ multimap.put("foo", 0);
+ assertEquals(Sets.newHashSet(0, 1, 3), fooSet);
+
+ missingSet.add(2);
+ assertEquals(Sets.newHashSet(2), multimap.get("missing"));
+ }
+
+ public void testTailSet() {
+ TreeMultimap<String, Integer> multimap = createPopulate();
+ Set<Integer> fooSet = multimap.get("foo").tailSet(2);
+ assertEquals(Sets.newHashSet(3, 7), fooSet);
+ Set<Integer> missingSet = multimap.get("missing").tailSet(4);
+ assertEquals(Sets.newHashSet(), missingSet);
+
+ multimap.put("foo", 6);
+ assertEquals(Sets.newHashSet(3, 6, 7), fooSet);
+
+ missingSet.add(9);
+ assertEquals(Sets.newHashSet(9), multimap.get("missing"));
+ }
+
+ public void testSubSet() {
+ TreeMultimap<String, Integer> multimap = createPopulate();
+ Set<Integer> fooSet = multimap.get("foo").subSet(2, 6);
+ assertEquals(Sets.newHashSet(3), fooSet);
+
+ multimap.put("foo", 5);
+ assertEquals(Sets.newHashSet(3, 5), fooSet);
+
+ fooSet.add(4);
+ assertEquals(Sets.newHashSet(1, 3, 4, 5, 7), multimap.get("foo"));
+ }
+
+ /**
+ * Test that creating one TreeMultimap from a non-TreeMultimap
+ * results in natural ordering.
+ */
+ public void testCreateFromHashMultimap() {
+ Multimap<Double, Double> hash = HashMultimap.create();
+ hash.put(1.0, 2.0);
+ hash.put(2.0, 3.0);
+ hash.put(3.0, 4.0);
+ hash.put(4.0, 5.0);
+
+ TreeMultimap<Double, Double> copyFromHash = TreeMultimap.create(hash);
+ assertEquals(hash, copyFromHash);
+ assertEquals(Ordering.natural(), copyFromHash.keyComparator());
+ assertEquals(Ordering.natural(), copyFromHash.valueComparator());
+ }
+
+ public void testComparators() {
+ TreeMultimap<String, Integer> multimap = TreeMultimap.create();
+ assertEquals(Ordering.natural(), multimap.keyComparator());
+ assertEquals(Ordering.natural(), multimap.valueComparator());
+ }
+
+ public void testSortedKeySet() {
+ TreeMultimap<String, Integer> multimap = createPopulate();
+ SortedSet<String> keySet = multimap.keySet();
+
+ assertEquals("foo", keySet.first());
+ assertEquals("tree", keySet.last());
+ assertEquals(Ordering.natural(), keySet.comparator());
+ assertEquals(ImmutableSet.of("foo", "google"), keySet.headSet("hi"));
+ assertEquals(ImmutableSet.of("tree"), keySet.tailSet("hi"));
+ assertEquals(ImmutableSet.of("google"), keySet.subSet("gap", "hi"));
+ }
+
+ public void testKeySetSubSet() {
+ TreeMultimap<String, Integer> multimap = createPopulate();
+ SortedSet<String> keySet = multimap.keySet();
+ SortedSet<String> subSet = keySet.subSet("gap", "hi");
+
+ assertEquals(1, subSet.size());
+ assertTrue(subSet.contains("google"));
+ assertFalse(subSet.contains("foo"));
+ assertTrue(subSet.containsAll(Collections.singleton("google")));
+ assertFalse(subSet.containsAll(Collections.singleton("foo")));
+
+ Iterator<String> iterator = subSet.iterator();
+ assertTrue(iterator.hasNext());
+ assertEquals("google", iterator.next());
+ assertFalse(iterator.hasNext());
+
+ assertFalse(subSet.remove("foo"));
+ assertTrue(multimap.containsKey("foo"));
+ assertEquals(7, multimap.size());
+ assertTrue(subSet.remove("google"));
+ assertFalse(multimap.containsKey("google"));
+ assertEquals(5, multimap.size());
+ }
+
+ public void testGetIteration() throws Exception {
+ new IteratorTester<Integer>(6, MODIFIABLE,
+ Sets.newTreeSet(asList(2, 3, 4, 7, 8)),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ private Multimap<String, Integer> multimap;
+
+ @Override protected Iterator<Integer> newTargetIterator() {
+ multimap = create();
+ multimap.putAll("foo", asList(3, 8, 4));
+ multimap.putAll("bar", asList(5, 6));
+ multimap.putAll("foo", asList(7, 2));
+ return multimap.get("foo").iterator();
+ }
+
+ @Override protected void verify(List<Integer> elements) {
+ assertEquals(newHashSet(elements), multimap.get("foo"));
+ }
+ }.test();
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testEntriesIteration() throws Exception {
+ Set<Entry<String, Integer>> set = Sets.newLinkedHashSet(asList(
+ Helpers.mapEntry("bar", 4),
+ Helpers.mapEntry("bar", 5),
+ Helpers.mapEntry("foo", 2),
+ Helpers.mapEntry("foo", 3),
+ Helpers.mapEntry("foo", 6)));
+ new IteratorTester<Entry<String, Integer>>(6, MODIFIABLE, set,
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ private Multimap<String, Integer> multimap;
+
+ @Override protected Iterator<Entry<String, Integer>> newTargetIterator() {
+ multimap = create();
+ multimap.putAll("foo", asList(6, 3));
+ multimap.putAll("bar", asList(4, 5));
+ multimap.putAll("foo", asList(2));
+ return multimap.entries().iterator();
+ }
+
+ @Override protected void verify(List<Entry<String, Integer>> elements) {
+ assertEquals(newHashSet(elements), multimap.entries());
+ }
+ }.test();
+ }
+
+ public void testKeysIteration() throws Exception {
+ new IteratorTester<String>(6, MODIFIABLE, Lists.newArrayList("bar", "bar",
+ "foo", "foo", "foo"), IteratorTester.KnownOrder.KNOWN_ORDER) {
+ private Multimap<String, Integer> multimap;
+
+ @Override protected Iterator<String> newTargetIterator() {
+ multimap = create();
+ multimap.putAll("foo", asList(2, 3));
+ multimap.putAll("bar", asList(4, 5));
+ multimap.putAll("foo", asList(6));
+ return multimap.keys().iterator();
+ }
+
+ @Override protected void verify(List<String> elements) {
+ assertEquals(elements, Lists.newArrayList(multimap.keys()));
+ }
+ }.test();
+ }
+
+ public void testValuesIteration() throws Exception {
+ new IteratorTester<Integer>(6, MODIFIABLE, newArrayList(4, 5, 2, 3, 6),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ private Multimap<String, Integer> multimap;
+
+ @Override protected Iterator<Integer> newTargetIterator() {
+ multimap = create();
+ multimap.putAll("foo", asList(2, 3));
+ multimap.putAll("bar", asList(4, 5));
+ multimap.putAll("foo", asList(6));
+ return multimap.values().iterator();
+ }
+
+ @Override protected void verify(List<Integer> elements) {
+ assertEquals(elements, Lists.newArrayList(multimap.values()));
+ }
+ }.test();
+ }
+
+ public void testKeySetIteration() throws Exception {
+ new IteratorTester<String>(6, MODIFIABLE,
+ Sets.newTreeSet(asList("bar", "baz", "cat", "dog", "foo")),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ private Multimap<String, Integer> multimap;
+
+ @Override protected Iterator<String> newTargetIterator() {
+ multimap = create();
+ multimap.putAll("foo", asList(2, 3));
+ multimap.putAll("bar", asList(4, 5));
+ multimap.putAll("foo", asList(6));
+ multimap.putAll("baz", asList(7, 8));
+ multimap.putAll("dog", asList(9));
+ multimap.putAll("bar", asList(10, 11));
+ multimap.putAll("cat", asList(12, 13, 14));
+ return multimap.keySet().iterator();
+ }
+
+ @Override protected void verify(List<String> elements) {
+ assertEquals(newHashSet(elements), multimap.keySet());
+ }
+ }.test();
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testAsSetIteration() throws Exception {
+ Set<Entry<String, Collection<Integer>>> set = Sets.newTreeSet(
+ new Comparator<Entry<String, ?>>() {
+ public int compare(Entry<String, ?> o1, Entry<String, ?> o2) {
+ return o1.getKey().compareTo(o2.getKey());
+ }
+ });
+ Collections.addAll(set,
+ Helpers.mapEntry("bar",
+ (Collection<Integer>) Sets.newHashSet(4, 5, 10, 11)),
+ Helpers.mapEntry("baz",
+ (Collection<Integer>) Sets.newHashSet(7, 8)),
+ Helpers.mapEntry("cat",
+ (Collection<Integer>) Sets.newHashSet(12, 13, 14)),
+ Helpers.mapEntry("dog",
+ (Collection<Integer>) Sets.newHashSet(9)),
+ Helpers.mapEntry("foo",
+ (Collection<Integer>) Sets.newHashSet(2, 3, 6))
+ );
+
+ new IteratorTester<Entry<String, Collection<Integer>>>(6, MODIFIABLE, set,
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ private Multimap<String, Integer> multimap;
+
+ @Override protected Iterator<Entry<String, Collection<Integer>>>
+ newTargetIterator() {
+ multimap = create();
+ multimap.putAll("foo", asList(2, 3));
+ multimap.putAll("bar", asList(4, 5));
+ multimap.putAll("foo", asList(6));
+ multimap.putAll("baz", asList(7, 8));
+ multimap.putAll("dog", asList(9));
+ multimap.putAll("bar", asList(10, 11));
+ multimap.putAll("cat", asList(12, 13, 14));
+ return multimap.asMap().entrySet().iterator();
+ }
+
+ @Override protected void verify(
+ List<Entry<String, Collection<Integer>>> elements) {
+ assertEquals(newHashSet(elements), multimap.asMap().entrySet());
+ }
+ }.test();
+ }
+
+ public void testExplicitComparatorSerialization() {
+ TreeMultimap<String, Integer> multimap = createPopulate();
+ TreeMultimap<String, Integer> copy
+ = SerializableTester.reserializeAndAssert(multimap);
+ assertContentsInOrder(
+ copy.values(), 1, 3, 7, 2, 6, 0, 4);
+ assertContentsInOrder(
+ copy.keySet(), "foo", "google", "tree");
+ assertEquals(multimap.keyComparator(), copy.keyComparator());
+ assertEquals(multimap.valueComparator(), copy.valueComparator());
+ }
+
+ public void testTreeMultimapDerived() {
+ TreeMultimap<Derived, Derived> multimap = TreeMultimap.create();
+ assertEquals(ImmutableMultimap.of(), multimap);
+ multimap.put(new Derived("foo"), new Derived("f"));
+ multimap.put(new Derived("foo"), new Derived("o"));
+ multimap.put(new Derived("foo"), new Derived("o"));
+ multimap.put(new Derived("bar"), new Derived("b"));
+ multimap.put(new Derived("bar"), new Derived("a"));
+ multimap.put(new Derived("bar"), new Derived("r"));
+ assertContentsInOrder(multimap.keySet(),
+ new Derived("bar"), new Derived("foo"));
+ assertContentsInOrder(multimap.values(),
+ new Derived("a"), new Derived("b"), new Derived("r"),
+ new Derived("f"), new Derived("o"));
+ assertEquals(Ordering.natural(), multimap.keyComparator());
+ assertEquals(Ordering.natural(), multimap.valueComparator());
+ SerializableTester.reserializeAndAssert(multimap);
+ }
+
+ public void testTreeMultimapNonGeneric() {
+ TreeMultimap<LegacyComparable, LegacyComparable> multimap
+ = TreeMultimap.create();
+ assertEquals(ImmutableMultimap.of(), multimap);
+ multimap.put(new LegacyComparable("foo"), new LegacyComparable("f"));
+ multimap.put(new LegacyComparable("foo"), new LegacyComparable("o"));
+ multimap.put(new LegacyComparable("foo"), new LegacyComparable("o"));
+ multimap.put(new LegacyComparable("bar"), new LegacyComparable("b"));
+ multimap.put(new LegacyComparable("bar"), new LegacyComparable("a"));
+ multimap.put(new LegacyComparable("bar"), new LegacyComparable("r"));
+ assertContentsInOrder(multimap.keySet(),
+ new LegacyComparable("bar"), new LegacyComparable("foo"));
+ assertContentsInOrder(multimap.values(),
+ new LegacyComparable("a"),
+ new LegacyComparable("b"),
+ new LegacyComparable("r"),
+ new LegacyComparable("f"),
+ new LegacyComparable("o"));
+ assertEquals(Ordering.natural(), multimap.keyComparator());
+ assertEquals(Ordering.natural(), multimap.valueComparator());
+ SerializableTester.reserializeAndAssert(multimap);
+ }
+
+ public void testTreeMultimapAsMapSorted() {
+ TreeMultimap<String, Integer> multimap = createPopulate();
+ SortedMap<String, Collection<Integer>> asMap = multimap.asMap();
+ assertEquals(Ordering.natural(), asMap.comparator());
+ assertEquals("foo", asMap.firstKey());
+ assertEquals("tree", asMap.lastKey());
+ Set<Integer> fooValues = ImmutableSet.of(1, 3, 7);
+ Set<Integer> googleValues = ImmutableSet.of(2, 6);
+ Set<Integer> treeValues = ImmutableSet.of(4, 0);
+ assertEquals(ImmutableMap.of("google", googleValues, "tree", treeValues),
+ asMap.tailMap("g"));
+ assertEquals(ImmutableMap.of("google", googleValues, "foo", fooValues),
+ asMap.headMap("h"));
+ assertEquals(ImmutableMap.of("google", googleValues),
+ asMap.subMap("g", "h"));
+ }
+
+ public void testTailSetClear() {
+ TreeMultimap<String, Integer> multimap = TreeMultimap.create();
+ multimap.put("a", 1);
+ multimap.put("a", 11);
+ multimap.put("b", 2);
+ multimap.put("c", 3);
+ multimap.put("d", 4);
+ multimap.put("e", 5);
+ multimap.put("e", 55);
+
+ multimap.keySet().tailSet("d").clear();
+ assertEquals(ImmutableSet.of("a", "b", "c"), multimap.keySet());
+ assertEquals(4, multimap.size());
+ assertEquals(4, multimap.values().size());
+ assertEquals(4, multimap.keys().size());
+ }
+}
diff --git a/test/com/google/common/collect/TreeMultisetTest.java b/test/com/google/common/collect/TreeMultisetTest.java
new file mode 100644
index 0000000..9a4e05d
--- /dev/null
+++ b/test/com/google/common/collect/TreeMultisetTest.java
@@ -0,0 +1,315 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.Lists.newArrayList;
+import static com.google.common.collect.testing.IteratorFeature.MODIFIABLE;
+import com.google.common.collect.testing.IteratorTester;
+import static com.google.common.testing.junit3.JUnitAsserts.assertContentsInOrder;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.SortedSet;
+
+/**
+ * Unit test for {@link TreeMultiset}.
+ *
+ * @author Neal Kanodia
+ */
+public class TreeMultisetTest extends AbstractMultisetTest {
+ @SuppressWarnings("unchecked")
+ @Override protected <E> Multiset<E> create() {
+ return (Multiset) TreeMultiset.create();
+ }
+
+ public void testCreate() {
+ Multiset<String> multiset = TreeMultiset.create();
+ multiset.add("foo", 2);
+ multiset.add("bar");
+ assertEquals(3, multiset.size());
+ assertEquals(2, multiset.count("foo"));
+ assertEquals("[bar, foo x 2]", multiset.toString());
+ }
+
+ public void testCreateWithComparator() {
+ Multiset<String> multiset = TreeMultiset.create(Collections.reverseOrder());
+ multiset.add("foo", 2);
+ multiset.add("bar");
+ assertEquals(3, multiset.size());
+ assertEquals(2, multiset.count("foo"));
+ assertEquals("[foo x 2, bar]", multiset.toString());
+ }
+
+ public void testCreateFromIterable() {
+ Multiset<String> multiset
+ = TreeMultiset.create(Arrays.asList("foo", "bar", "foo"));
+ assertEquals(3, multiset.size());
+ assertEquals(2, multiset.count("foo"));
+ assertEquals("[bar, foo x 2]", multiset.toString());
+ }
+
+ public void testToString() {
+ ms.add("a", 3);
+ ms.add("c", 1);
+ ms.add("b", 2);
+
+ assertEquals("[a x 3, b x 2, c]", ms.toString());
+ }
+
+ public void testIteratorBashing() throws Exception {
+ IteratorTester<String> tester =
+ new IteratorTester<String>(createSample().size() + 2, MODIFIABLE,
+ newArrayList(createSample()),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ private Multiset<String> targetMultiset;
+
+ @Override protected Iterator<String> newTargetIterator() {
+ targetMultiset = createSample();
+ return targetMultiset.iterator();
+ }
+
+ @Override protected void verify(List<String> elements) {
+ assertEquals(elements, Lists.newArrayList(targetMultiset));
+ }
+ };
+
+ /* This next line added as a stopgap until JDK6 bug is fixed. */
+ tester.ignoreSunJavaBug6529795();
+
+ tester.test();
+ }
+
+ public void testElementSetIteratorBashing() throws Exception {
+ IteratorTester<String> tester = new IteratorTester<String>(5, MODIFIABLE,
+ newArrayList("a", "b", "c"), IteratorTester.KnownOrder.KNOWN_ORDER) {
+ private Set<String> targetSet;
+ @Override protected Iterator<String> newTargetIterator() {
+ Multiset<String> multiset = create();
+ multiset.add("a", 3);
+ multiset.add("c", 1);
+ multiset.add("b", 2);
+ targetSet = multiset.elementSet();
+ return targetSet.iterator();
+ }
+ @Override protected void verify(List<String> elements) {
+ assertEquals(elements, Lists.newArrayList(targetSet));
+ }
+ };
+
+ /* This next line added as a stopgap until JDK6 bug is fixed. */
+ tester.ignoreSunJavaBug6529795();
+
+ tester.test();
+ }
+
+ public void testElementSetSortedSetMethods() {
+ @SuppressWarnings("hiding")
+ TreeMultiset<String> ms = TreeMultiset.create();
+ ms.add("c", 1);
+ ms.add("a", 3);
+ ms.add("b", 2);
+ SortedSet<String> elementSet = ms.elementSet();
+
+ assertEquals("a", elementSet.first());
+ assertEquals("c", elementSet.last());
+ assertNull(elementSet.comparator());
+ assertContentsInOrder(elementSet.headSet("b"), "a");
+ assertContentsInOrder(elementSet.tailSet("b"), "b", "c");
+ assertContentsInOrder(elementSet.subSet("a", "c"), "a", "b");
+ }
+
+ public void testElementSetSubsetRemove() {
+ @SuppressWarnings("hiding")
+ TreeMultiset<String> ms = TreeMultiset.create();
+ ms.add("a", 1);
+ ms.add("b", 3);
+ ms.add("c", 2);
+ ms.add("d", 1);
+ ms.add("e", 3);
+ ms.add("f", 2);
+
+ SortedSet<String> elementSet = ms.elementSet();
+ assertContentsInOrder(elementSet, "a", "b", "c", "d", "e", "f");
+ SortedSet<String> subset = elementSet.subSet("b", "f");
+ assertContentsInOrder(subset, "b", "c", "d", "e");
+
+ assertTrue(subset.remove("c"));
+ assertContentsInOrder(elementSet, "a", "b", "d", "e", "f");
+ assertContentsInOrder(subset, "b", "d", "e");
+ assertEquals(10, ms.size());
+
+ assertFalse(subset.remove("a"));
+ assertContentsInOrder(elementSet, "a", "b", "d", "e", "f");
+ assertContentsInOrder(subset, "b", "d", "e");
+ assertEquals(10, ms.size());
+ }
+
+ public void testElementSetSubsetRemoveAll() {
+ @SuppressWarnings("hiding")
+ TreeMultiset<String> ms = TreeMultiset.create();
+ ms.add("a", 1);
+ ms.add("b", 3);
+ ms.add("c", 2);
+ ms.add("d", 1);
+ ms.add("e", 3);
+ ms.add("f", 2);
+
+ SortedSet<String> elementSet = ms.elementSet();
+ assertContentsInOrder(elementSet, "a", "b", "c", "d", "e", "f");
+ SortedSet<String> subset = elementSet.subSet("b", "f");
+ assertContentsInOrder(subset, "b", "c", "d", "e");
+
+ assertTrue(subset.removeAll(Arrays.asList("a", "c")));
+ assertContentsInOrder(elementSet, "a", "b", "d", "e", "f");
+ assertContentsInOrder(subset, "b", "d", "e");
+ assertEquals(10, ms.size());
+ }
+
+ public void testElementSetSubsetRetainAll() {
+ @SuppressWarnings("hiding")
+ TreeMultiset<String> ms = TreeMultiset.create();
+ ms.add("a", 1);
+ ms.add("b", 3);
+ ms.add("c", 2);
+ ms.add("d", 1);
+ ms.add("e", 3);
+ ms.add("f", 2);
+
+ SortedSet<String> elementSet = ms.elementSet();
+ assertContentsInOrder(elementSet, "a", "b", "c", "d", "e", "f");
+ SortedSet<String> subset = elementSet.subSet("b", "f");
+ assertContentsInOrder(subset, "b", "c", "d", "e");
+
+ assertTrue(subset.retainAll(Arrays.asList("a", "c")));
+ assertContentsInOrder(elementSet, "a", "c", "f");
+ assertContentsInOrder(subset, "c");
+ assertEquals(5, ms.size());
+ }
+
+ public void testElementSetSubsetClear() {
+ @SuppressWarnings("hiding")
+ TreeMultiset<String> ms = TreeMultiset.create();
+ ms.add("a", 1);
+ ms.add("b", 3);
+ ms.add("c", 2);
+ ms.add("d", 1);
+ ms.add("e", 3);
+ ms.add("f", 2);
+
+ SortedSet<String> elementSet = ms.elementSet();
+ assertContentsInOrder(elementSet, "a", "b", "c", "d", "e", "f");
+ SortedSet<String> subset = elementSet.subSet("b", "f");
+ assertContentsInOrder(subset, "b", "c", "d", "e");
+
+ subset.clear();
+ assertContentsInOrder(elementSet, "a", "f");
+ assertContentsInOrder(subset);
+ assertEquals(3, ms.size());
+ }
+
+ public void testCustomComparator() throws Exception {
+ Comparator<String> comparator = new Comparator<String>() {
+ public int compare(String o1, String o2) {
+ return o2.compareTo(o1);
+ }
+ };
+ @SuppressWarnings("hiding")
+ TreeMultiset<String> ms = TreeMultiset.create(comparator);
+
+ ms.add("b");
+ ms.add("c");
+ ms.add("a");
+ ms.add("b");
+ ms.add("d");
+
+ assertContentsInOrder(ms, "d", "c", "b", "b", "a");
+
+ SortedSet<String> elementSet = ms.elementSet();
+ assertEquals("d", elementSet.first());
+ assertEquals("a", elementSet.last());
+ assertEquals(comparator, elementSet.comparator());
+ }
+
+ public void testNullAcceptingComparator() throws Exception {
+ Comparator<String> comparator = Ordering.<String>natural().nullsFirst();
+ @SuppressWarnings("hiding")
+ TreeMultiset<String> ms = TreeMultiset.create(comparator);
+
+ ms.add("b");
+ ms.add(null);
+ ms.add("a");
+ ms.add("b");
+ ms.add(null, 2);
+
+ assertContentsInOrder(ms, null, null, null, "a", "b", "b");
+ assertEquals(3, ms.count(null));
+
+ SortedSet<String> elementSet = ms.elementSet();
+ assertEquals(null, elementSet.first());
+ assertEquals("b", elementSet.last());
+ assertEquals(comparator, elementSet.comparator());
+ }
+
+ private static final Comparator<String> DEGENERATE_COMPARATOR =
+ new Comparator<String>() {
+ public int compare(String o1, String o2) {
+ return o1.length() - o2.length();
+ }
+ };
+
+ /**
+ * Test a TreeMultiset with a comparator that can return 0 when comparing
+ * unequal values.
+ */
+ public void testDegenerateComparator() throws Exception {
+ @SuppressWarnings("hiding")
+ TreeMultiset<String> ms = TreeMultiset.create(DEGENERATE_COMPARATOR);
+
+ ms.add("foo");
+ ms.add("a");
+ ms.add("bar");
+ ms.add("b");
+ ms.add("c");
+
+ assertEquals(2, ms.count("bar"));
+ assertEquals(3, ms.count("b"));
+
+ Multiset<String> ms2 = TreeMultiset.create(DEGENERATE_COMPARATOR);
+
+ ms2.add("cat", 2);
+ ms2.add("x", 3);
+
+ assertEquals(ms, ms2);
+ assertEquals(ms2, ms);
+
+ SortedSet<String> elementSet = ms.elementSet();
+ assertEquals("a", elementSet.first());
+ assertEquals("foo", elementSet.last());
+ assertEquals(DEGENERATE_COMPARATOR, elementSet.comparator());
+ }
+
+ @Override public void testToStringNull() {
+ try {
+ super.testToStringNull();
+ fail("exception expected");
+ } catch (NullPointerException expected) {}
+ }
+}
diff --git a/test/com/google/common/collect/UnmodifiableIteratorTest.java b/test/com/google/common/collect/UnmodifiableIteratorTest.java
new file mode 100644
index 0000000..78ba623
--- /dev/null
+++ b/test/com/google/common/collect/UnmodifiableIteratorTest.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import junit.framework.TestCase;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+/**
+ * Tests for {@link UnmodifiableIterator}.
+ *
+ * @author Jared Levy
+ */
+public class UnmodifiableIteratorTest extends TestCase {
+
+ public void testRemove() {
+ final String[] array = {"a", "b", "c"};
+
+ Iterator<String> iterator = new UnmodifiableIterator<String>() {
+ int i;
+ public boolean hasNext() {
+ return i < array.length;
+ }
+ public String next() {
+ if (!hasNext()) {
+ throw new NoSuchElementException();
+ }
+ return array[i++];
+ }
+ };
+
+ assertTrue(iterator.hasNext());
+ assertEquals("a", iterator.next());
+ try {
+ iterator.remove();
+ fail();
+ } catch (UnsupportedOperationException expected) {}
+ }
+}
diff --git a/test/com/google/common/collect/UnmodifiableMultimapAsMapImplementsMapTest.java b/test/com/google/common/collect/UnmodifiableMultimapAsMapImplementsMapTest.java
new file mode 100644
index 0000000..f53eaa5
--- /dev/null
+++ b/test/com/google/common/collect/UnmodifiableMultimapAsMapImplementsMapTest.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.testing.MapInterfaceTest;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Test {@link Multimap#asMap()} for an unmodifiable multimap with
+ * {@link MapInterfaceTest}.
+ *
+ * @author Jared Levy
+ */
+public class UnmodifiableMultimapAsMapImplementsMapTest
+ extends AbstractMultimapAsMapImplementsMapTest {
+
+ public UnmodifiableMultimapAsMapImplementsMapTest() {
+ super(false, true);
+ }
+
+ @Override protected Map<String, Collection<Integer>> makeEmptyMap() {
+ return Multimaps.unmodifiableMultimap(
+ LinkedHashMultimap.<String, Integer>create()).asMap();
+ }
+
+ @Override protected Map<String, Collection<Integer>> makePopulatedMap() {
+ Multimap<String, Integer> delegate = LinkedHashMultimap.create();
+ populate(delegate);
+ return Multimaps.unmodifiableMultimap(delegate).asMap();
+ }
+}
diff --git a/test/com/google/common/collect/testing/IteratorTesterTest.java b/test/com/google/common/collect/testing/IteratorTesterTest.java
new file mode 100644
index 0000000..4c91724
--- /dev/null
+++ b/test/com/google/common/collect/testing/IteratorTesterTest.java
@@ -0,0 +1,335 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+import static com.google.common.collect.Lists.newArrayList;
+import static com.google.common.collect.testing.IteratorFeature.MODIFIABLE;
+
+import junit.framework.AssertionFailedError;
+import junit.framework.TestCase;
+
+import static java.util.Collections.emptyList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+/**
+ * Unit test for IteratorTester.
+ *
+ * @author Mick Killianey
+ */
+@SuppressWarnings("serial") // No serialization is used in this test
+public class IteratorTesterTest extends TestCase {
+
+ public void testCanCatchDifferentLengthOfIteration() throws Exception {
+ IteratorTester<Integer> tester =
+ new IteratorTester<Integer>(4, MODIFIABLE, newArrayList(1, 2, 3),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<Integer> newTargetIterator() {
+ return Lists.newArrayList(1, 2, 3, 4).iterator();
+ }
+ };
+ assertFailure(tester);
+ }
+
+ public void testCanCatchDifferentContents() throws Exception {
+ IteratorTester<Integer> tester =
+ new IteratorTester<Integer>(3, MODIFIABLE, newArrayList(1, 2, 3),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<Integer> newTargetIterator() {
+ return Lists.newArrayList(1, 3, 2).iterator();
+ }
+ };
+ assertFailure(tester);
+ }
+
+ public void testCanCatchDifferentRemoveBehaviour() throws Exception {
+ IteratorTester<Integer> tester =
+ new IteratorTester<Integer>(3, MODIFIABLE, newArrayList(1, 2),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<Integer> newTargetIterator() {
+ return ImmutableList.of(1, 2).iterator();
+ }
+ };
+ assertFailure(tester);
+ }
+
+ public void testUnknownOrder() throws Exception {
+ new IteratorTester<Integer>(3, MODIFIABLE, newArrayList(1, 2),
+ IteratorTester.KnownOrder.UNKNOWN_ORDER) {
+ @Override protected Iterator<Integer> newTargetIterator() {
+ return newArrayList(2, 1).iterator();
+ }
+ }.test();
+ }
+
+ public void testUnknownOrderUnrecognizedElement() throws Exception {
+ IteratorTester<Integer> tester =
+ new IteratorTester<Integer>(3, MODIFIABLE, newArrayList(1, 2, 50),
+ IteratorTester.KnownOrder.UNKNOWN_ORDER) {
+ @Override protected Iterator<Integer> newTargetIterator() {
+ return newArrayList(2, 1, 3).iterator();
+ }
+ };
+ assertFailure(tester);
+ }
+
+ /**
+ * This Iterator wraps another iterator and gives it a bug found
+ * in JDK6.
+ *
+ * <p>This bug is this: if you create an iterator from a TreeSet
+ * and call next() on that iterator when hasNext() is false, so
+ * that next() throws a NoSuchElementException, then subsequent
+ * calls to remove() will incorrectly throw an IllegalStateException,
+ * instead of removing the last element returned.
+ *
+ * <p>See
+ * <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6529795">
+ * Sun bug 6529795</a>
+ */
+ static class IteratorWithSunJavaBug6529795<T> implements Iterator<T> {
+ Iterator<T> iterator;
+ boolean nextThrewException;
+ IteratorWithSunJavaBug6529795(Iterator<T> iterator) {
+ this.iterator = iterator;
+ }
+
+ public boolean hasNext() {
+ return iterator.hasNext();
+ }
+
+ public T next() {
+ try {
+ return iterator.next();
+ } catch (NoSuchElementException e) {
+ nextThrewException = true;
+ throw e;
+ }
+ }
+
+ public void remove() {
+ if (nextThrewException) {
+ throw new IllegalStateException();
+ }
+ iterator.remove();
+ }
+ }
+
+ public void testCanCatchSunJavaBug6529795InTargetIterator()
+ throws Exception {
+ try {
+ /* Choose 4 steps to get sequence [next, next, next, remove] */
+ new IteratorTester<Integer>(4, MODIFIABLE, newArrayList(1, 2),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<Integer> newTargetIterator() {
+ Iterator<Integer> iterator = Lists.newArrayList(1, 2).iterator();
+ return new IteratorWithSunJavaBug6529795<Integer>(iterator);
+ }
+ }.test();
+ } catch (AssertionFailedError e) {
+ return;
+ }
+ fail("Should have caught jdk6 bug in target iterator");
+ }
+
+ public void testCanWorkAroundSunJavaBug6529795InTargetIterator()
+ throws Exception {
+ IteratorTester<Integer> tester =
+ new IteratorTester<Integer>(4, MODIFIABLE, newArrayList(1, 2),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<Integer> newTargetIterator() {
+ Iterator<Integer> iterator = Lists.newArrayList(1, 2).iterator();
+ return new IteratorWithSunJavaBug6529795<Integer>(iterator);
+ }
+ };
+
+ /*
+ * Calling this method on an IteratorTester should avoid flagging
+ * the bug exposed by the preceding test.
+ */
+ tester.ignoreSunJavaBug6529795();
+
+ tester.test();
+ }
+
+ private static final int STEPS = 3;
+ static class TesterThatCountsCalls extends IteratorTester<Integer> {
+ TesterThatCountsCalls() {
+ super(STEPS, MODIFIABLE, newArrayList(1),
+ IteratorTester.KnownOrder.KNOWN_ORDER);
+ }
+ int numCallsToNewTargetIterator;
+ int numCallsToVerify;
+ @Override protected Iterator<Integer> newTargetIterator() {
+ numCallsToNewTargetIterator++;
+ return Lists.newArrayList(1).iterator();
+ }
+ @Override protected void verify(List<Integer> elements) {
+ numCallsToVerify++;
+ super.verify(elements);
+ }
+ }
+
+ public void testVerifyGetsCalled() throws Exception {
+ TesterThatCountsCalls tester = new TesterThatCountsCalls();
+
+ tester.test();
+
+ assertEquals("Should have verified once per stimulus executed",
+ tester.numCallsToVerify,
+ tester.numCallsToNewTargetIterator * STEPS);
+ }
+
+ public void testVerifyCanThrowAssertionThatFailsTest() throws Exception {
+ final String message = "Important info about why verify failed";
+ IteratorTester<Integer> tester =
+ new IteratorTester<Integer>(1, MODIFIABLE, newArrayList(1, 2, 3),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<Integer> newTargetIterator() {
+ return Lists.newArrayList(1, 2, 3).iterator();
+ }
+
+ @Override protected void verify(List<Integer> elements) {
+ throw new AssertionFailedError(message);
+ }
+ };
+ AssertionFailedError actual = null;
+ try {
+ tester.test();
+ } catch (AssertionFailedError e) {
+ actual = e;
+ }
+ assertNotNull("verify() should be able to cause test failure", actual);
+ assertTrue("AssertionFailedError should have info about why test failed",
+ actual.getCause().getMessage().contains(message));
+ }
+
+ public void testMissingException() throws Exception {
+ List<Integer> emptyList = newArrayList();
+
+ IteratorTester<Integer> tester =
+ new IteratorTester<Integer>(1, MODIFIABLE, emptyList,
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<Integer> newTargetIterator() {
+ return new Iterator<Integer>() {
+ public void remove() {
+ // We should throw here, but we won't!
+ }
+ public Integer next() {
+ // We should throw here, but we won't!
+ return null;
+ }
+ public boolean hasNext() {
+ return false;
+ }
+ };
+ }
+ };
+ assertFailure(tester);
+ }
+
+ public void testUnexpectedException() throws Exception {
+ IteratorTester<Integer> tester =
+ new IteratorTester<Integer>(1, MODIFIABLE, newArrayList(1),
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<Integer> newTargetIterator() {
+ return new ThrowingIterator<Integer>(new IllegalStateException());
+ }
+ };
+ assertFailure(tester);
+ }
+
+ public void testSimilarException() throws Exception {
+ List<Integer> emptyList = emptyList();
+ IteratorTester<Integer> tester =
+ new IteratorTester<Integer>(1, MODIFIABLE, emptyList,
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<Integer> newTargetIterator() {
+ return new Iterator<Integer>() {
+ public void remove() {
+ throw new IllegalStateException() { /* subclass */};
+ }
+ public Integer next() {
+ throw new NoSuchElementException() { /* subclass */};
+ }
+ public boolean hasNext() {
+ return false;
+ }
+ };
+ }
+ };
+ tester.test();
+ }
+
+ public void testMismatchedException() throws Exception {
+ List<Integer> emptyList = emptyList();
+ IteratorTester<Integer> tester =
+ new IteratorTester<Integer>(1, MODIFIABLE, emptyList,
+ IteratorTester.KnownOrder.KNOWN_ORDER) {
+ @Override protected Iterator<Integer> newTargetIterator() {
+ return new Iterator<Integer>() {
+ public void remove() {
+ // Wrong exception type.
+ throw new IllegalArgumentException();
+ }
+ public Integer next() {
+ // Wrong exception type.
+ throw new UnsupportedOperationException();
+ }
+ public boolean hasNext() {
+ return false;
+ }
+ };
+ }
+ };
+ assertFailure(tester);
+ }
+
+ private static void assertFailure(IteratorTester<?> tester) throws Exception {
+ try {
+ tester.test();
+ fail();
+ } catch (AssertionFailedError expected) {
+ }
+ }
+
+ private static final class ThrowingIterator<E> implements Iterator<E> {
+ private final RuntimeException ex;
+
+ private ThrowingIterator(RuntimeException ex) {
+ this.ex = ex;
+ }
+
+ public boolean hasNext() {
+ // IteratorTester doesn't expect exceptions for hasNext().
+ return true;
+ }
+
+ public E next() {
+ ex.fillInStackTrace();
+ throw ex;
+ }
+
+ public void remove() {
+ ex.fillInStackTrace();
+ throw ex;
+ }
+ }
+}
diff --git a/test/com/google/common/collect/testing/MapTestSuiteBuilderTests.java b/test/com/google/common/collect/testing/MapTestSuiteBuilderTests.java
new file mode 100644
index 0000000..1d4523c
--- /dev/null
+++ b/test/com/google/common/collect/testing/MapTestSuiteBuilderTests.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.base.Preconditions;
+import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.Feature;
+import com.google.common.collect.testing.features.MapFeature;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.AbstractMap;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Tests {@link MapTestSuiteBuilder} by using it against maps that have various
+ * negative behaviors.
+ *
+ * @author George van den Driessche
+ */
+public final class MapTestSuiteBuilderTests extends TestCase {
+ private MapTestSuiteBuilderTests() {}
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite(
+ MapTestSuiteBuilderTests.class.getSimpleName());
+ suite.addTest(testsForHashMapNullKeysForbidden());
+ suite.addTest(testsForHashMapNullValuesForbidden());
+ return suite;
+ }
+
+ private abstract static class WrappedHashMapGenerator
+ extends TestStringMapGenerator {
+ @Override protected final Map<String, String> create(
+ Map.Entry<String, String>[] entries) {
+ HashMap<String, String> map = Maps.newHashMap();
+ for (Map.Entry<String, String> entry : entries) {
+ map.put(entry.getKey(), entry.getValue());
+ }
+ return wrap(map);
+ }
+
+ abstract Map<String, String> wrap(HashMap<String, String> map);
+ }
+
+ private static TestSuite wrappedHashMapTests(
+ WrappedHashMapGenerator generator, String name, Feature<?>... features) {
+ return MapTestSuiteBuilder.using(generator)
+ .named(name)
+ .withFeatures(Lists.asList(
+ MapFeature.GENERAL_PURPOSE, CollectionSize.ANY, features))
+ .createTestSuite();
+ }
+
+ // TODO(Chris Povirk): consider being null-hostile in these tests
+
+ private static Test testsForHashMapNullKeysForbidden() {
+ return wrappedHashMapTests(new WrappedHashMapGenerator() {
+ @Override Map<String, String> wrap(final HashMap<String, String> map) {
+ for (String s :map.keySet()) {
+ checkNotNull(s);
+ }
+ return new AbstractMap<String, String>() {
+ @Override public Set<Map.Entry<String, String>> entrySet() {
+ return map.entrySet();
+ }
+ @Override public String put(String key, String value) {
+ checkNotNull(key);
+ return map.put(key, value);
+ }
+ };
+ }
+ }, "HashMap w/out null keys", ALLOWS_NULL_VALUES);
+ }
+
+ private static Test testsForHashMapNullValuesForbidden() {
+ return wrappedHashMapTests(new WrappedHashMapGenerator() {
+ @Override Map<String, String> wrap(final HashMap<String, String> map) {
+ for (String s :map.values()) {
+ checkNotNull(s);
+ }
+ return new AbstractMap<String, String>() {
+ @Override public Set<Map.Entry<String, String>> entrySet() {
+ return map.entrySet();
+ }
+ @Override public String put(String key, String value) {
+ checkNotNull(value);
+ return map.put(key, value);
+ }
+ };
+ }
+ }, "HashMap w/out null values", ALLOWS_NULL_KEYS);
+ }
+}
diff --git a/test/com/google/common/collect/testing/MinimalCollectionTest.java b/test/com/google/common/collect/testing/MinimalCollectionTest.java
new file mode 100644
index 0000000..1cd497f
--- /dev/null
+++ b/test/com/google/common/collect/testing/MinimalCollectionTest.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+
+import java.util.Collection;
+
+/**
+ * Unit test for {@link MinimalCollection}.
+ *
+ * @author Kevin Bourrillion
+ */
+public class MinimalCollectionTest extends TestCase {
+ public static Test suite() {
+ return CollectionTestSuiteBuilder
+ .using(new TestStringCollectionGenerator() {
+ @Override public Collection<String> create(String[] elements) {
+ // TODO: MinimalCollection should perhaps throw
+ for (Object element : elements) {
+ Helpers.checkNotNull(element);
+ }
+ return MinimalCollection.of(elements);
+ }
+ })
+ .named("MinimalCollection")
+ .withFeatures(
+ CollectionFeature.NONE,
+ CollectionSize.ANY)
+ .createTestSuite();
+ }
+}
diff --git a/test/com/google/common/collect/testing/MinimalIterableTest.java b/test/com/google/common/collect/testing/MinimalIterableTest.java
new file mode 100644
index 0000000..86834e6
--- /dev/null
+++ b/test/com/google/common/collect/testing/MinimalIterableTest.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import junit.framework.TestCase;
+
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+/**
+ * Unit test for {@link MinimalIterable}.
+ *
+ * @author Kevin Bourrillion
+ */
+public class MinimalIterableTest extends TestCase {
+
+ public void testOf_empty() {
+ Iterable<String> iterable = MinimalIterable.<String>of();
+ Iterator<String> iterator = iterable.iterator();
+ assertFalse(iterator.hasNext());
+ try {
+ iterator.next();
+ fail();
+ } catch (NoSuchElementException expected) {
+ }
+ try {
+ iterable.iterator();
+ fail();
+ } catch (IllegalStateException expected) {
+ }
+ }
+
+ public void testOf_one() {
+ Iterable<String> iterable = MinimalIterable.of("a");
+ Iterator<String> iterator = iterable.iterator();
+ assertTrue(iterator.hasNext());
+ assertEquals("a", iterator.next());
+ assertFalse(iterator.hasNext());
+ try {
+ iterator.next();
+ fail();
+ } catch (NoSuchElementException expected) {
+ }
+ try {
+ iterable.iterator();
+ fail();
+ } catch (IllegalStateException expected) {
+ }
+ }
+
+ public void testFrom_empty() {
+ Iterable<String> iterable
+ = MinimalIterable.from(Collections.<String>emptySet());
+ Iterator<String> iterator = iterable.iterator();
+ assertFalse(iterator.hasNext());
+ try {
+ iterator.next();
+ fail();
+ } catch (NoSuchElementException expected) {
+ }
+ try {
+ iterable.iterator();
+ fail();
+ } catch (IllegalStateException expected) {
+ }
+ }
+
+ public void testFrom_one() {
+ Iterable<String> iterable
+ = MinimalIterable.from(Collections.singleton("a"));
+ Iterator<String> iterator = iterable.iterator();
+ assertTrue(iterator.hasNext());
+ assertEquals("a", iterator.next());
+ try {
+ iterator.remove();
+ fail();
+ } catch (UnsupportedOperationException expected) {
+ }
+ assertFalse(iterator.hasNext());
+ try {
+ iterator.next();
+ fail();
+ } catch (NoSuchElementException expected) {
+ }
+ try {
+ iterable.iterator();
+ fail();
+ } catch (IllegalStateException expected) {
+ }
+ }
+}
diff --git a/test/com/google/common/collect/testing/MinimalSetTest.java b/test/com/google/common/collect/testing/MinimalSetTest.java
new file mode 100644
index 0000000..08e4d9c
--- /dev/null
+++ b/test/com/google/common/collect/testing/MinimalSetTest.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+
+import java.util.Set;
+
+/**
+ * Unit test for {@link MinimalSet}.
+ *
+ * @author Regina O'Dell
+ */
+public class MinimalSetTest extends TestCase {
+ public static Test suite() {
+ return SetTestSuiteBuilder
+ .using(new TestStringSetGenerator() {
+ @Override protected Set<String> create(String[] elements) {
+ return MinimalSet.of(elements);
+ }
+ })
+ .named("MinimalSet")
+ .withFeatures(
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionFeature.NONE,
+ CollectionSize.ANY)
+ .createTestSuite();
+ }
+}
diff --git a/test/com/google/common/collect/testing/OpenJdk6ListTests.java b/test/com/google/common/collect/testing/OpenJdk6ListTests.java
new file mode 100644
index 0000000..51fb2ed
--- /dev/null
+++ b/test/com/google/common/collect/testing/OpenJdk6ListTests.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.testers.CollectionAddTester;
+import static com.google.common.collect.testing.testers.CollectionToArrayTester.getToArrayIsPlainObjectArrayMethod;
+import static com.google.common.collect.testing.testers.CollectionIteratorTester.getIteratorKnownOrderRemoveSupportedMethod;
+import com.google.common.collect.testing.testers.ListAddAtIndexTester;
+import static com.google.common.collect.testing.testers.ListAddTester.getAddSupportedNullPresentMethod;
+import static com.google.common.collect.testing.testers.ListListIteratorTester.getListIteratorFullyModifiableMethod;
+import static com.google.common.collect.testing.testers.ListSetTester.getSetNullSupportedMethod;
+import static com.google.common.collect.testing.testers.ListSubListTester.getSubListOriginalListSetAffectsSubListLargeListMethod;
+import static com.google.common.collect.testing.testers.ListSubListTester.getSubListOriginalListSetAffectsSubListMethod;
+import static com.google.common.collect.testing.testers.ListSubListTester.getSubListSubListRemoveAffectsOriginalLargeListMethod;
+
+import junit.framework.Test;
+
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Tests the {@link List} implementations of {@link java.util}, suppressing
+ * tests that trip known OpenJDK 6 bugs.
+ *
+ * @author Kevin Bourrillion
+ */
+public class OpenJdk6ListTests extends TestsForListsInJavaUtil {
+ public static Test suite() {
+ return new OpenJdk6ListTests().allTests();
+ }
+
+ @Override protected Collection<Method> suppressForArraysAsList() {
+ return Arrays.asList(
+ getToArrayIsPlainObjectArrayMethod());
+ }
+
+ @Override protected Collection<Method> suppressForCopyOnWriteArrayList() {
+ return Arrays.asList(
+ getSubListOriginalListSetAffectsSubListMethod(),
+ getSubListOriginalListSetAffectsSubListLargeListMethod(),
+ getSubListSubListRemoveAffectsOriginalLargeListMethod(),
+ getIteratorKnownOrderRemoveSupportedMethod(),
+ getListIteratorFullyModifiableMethod());
+ }
+
+ @Override protected Collection<Method> suppressForCheckedList() {
+ return Arrays.asList(
+ CollectionAddTester.getAddNullSupportedMethod(),
+ getAddSupportedNullPresentMethod(),
+ ListAddAtIndexTester.getAddNullSupportedMethod(),
+ getSetNullSupportedMethod());
+ }
+}
diff --git a/test/com/google/common/collect/testing/OpenJdk6MapTests.java b/test/com/google/common/collect/testing/OpenJdk6MapTests.java
new file mode 100644
index 0000000..eb8fdab
--- /dev/null
+++ b/test/com/google/common/collect/testing/OpenJdk6MapTests.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import java.util.Map;
+
+/**
+ * Tests the {@link Map} implementations of {@link java.util}, suppressing
+ * tests that trip known OpenJDK 6 bugs.
+ *
+ * @author Kevin Bourrillion
+ */
+public class OpenJdk6MapTests extends TestsForMapsInJavaUtil {
+ public static Test suite() {
+ return new OpenJdk6MapTests().allTests();
+ }
+
+ @Override public Test testsForEnumMap() {
+ // Do nothing.
+ // TODO: work around the reused-entry problem
+ // http://bugs.sun.com/view_bug.do?bug_id=6312706
+ return new TestSuite();
+ }
+} \ No newline at end of file
diff --git a/test/com/google/common/collect/testing/OpenJdk6QueueTests.java b/test/com/google/common/collect/testing/OpenJdk6QueueTests.java
new file mode 100644
index 0000000..29132b7
--- /dev/null
+++ b/test/com/google/common/collect/testing/OpenJdk6QueueTests.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import static com.google.common.collect.testing.testers.CollectionCreationTester.getCreateWithNullUnsupportedMethod;
+
+import junit.framework.Test;
+
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Queue;
+
+/**
+ * Tests the {@link Queue} implementations of {@link java.util}, suppressing
+ * tests that trip known OpenJDK 6 bugs.
+ *
+ * @author Kevin Bourrillion
+ */
+public class OpenJdk6QueueTests extends TestsForQueuesInJavaUtil {
+ public static Test suite() {
+ return new OpenJdk6QueueTests().allTests();
+ }
+
+ private static final List<Method> PQ_SUPPRESS = Arrays.asList(
+ getCreateWithNullUnsupportedMethod());
+
+ @Override protected Collection<Method> suppressForPriorityBlockingQueue() {
+ return PQ_SUPPRESS;
+ }
+
+ @Override protected Collection<Method> suppressForPriorityQueue() {
+ return PQ_SUPPRESS;
+ }
+}
diff --git a/test/com/google/common/collect/testing/OpenJdk6SetTests.java b/test/com/google/common/collect/testing/OpenJdk6SetTests.java
new file mode 100644
index 0000000..5a2ae5d
--- /dev/null
+++ b/test/com/google/common/collect/testing/OpenJdk6SetTests.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import static com.google.common.collect.testing.testers.CollectionAddAllTester.getAddAllNullUnsupportedMethod;
+import static com.google.common.collect.testing.testers.CollectionAddTester.getAddNullSupportedMethod;
+import static com.google.common.collect.testing.testers.CollectionAddTester.getAddNullUnsupportedMethod;
+import static com.google.common.collect.testing.testers.CollectionCreationTester.getCreateWithNullUnsupportedMethod;
+import static com.google.common.collect.testing.testers.CollectionIteratorTester.getIteratorKnownOrderRemoveSupportedMethod;
+import static com.google.common.collect.testing.testers.SetAddTester.getAddSupportedNullPresentMethod;
+
+import junit.framework.Test;
+
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Set;
+
+/**
+ * Tests the {@link Set} implementations of {@link java.util}, suppressing
+ * tests that trip known OpenJDK 6 bugs.
+ *
+ * @author Kevin Bourrillion
+ */
+public class OpenJdk6SetTests extends TestsForSetsInJavaUtil {
+ public static Test suite() {
+ return new OpenJdk6SetTests().allTests();
+ }
+
+ @Override protected Collection<Method> suppressForTreeSetNatural() {
+ return Arrays.asList(
+ getAddNullUnsupportedMethod(),
+ getAddAllNullUnsupportedMethod(),
+ getCreateWithNullUnsupportedMethod());
+ }
+
+ @Override protected Collection<Method> suppressForCopyOnWriteArraySet() {
+ return Arrays.asList(
+ getIteratorKnownOrderRemoveSupportedMethod());
+ }
+
+ @Override protected Collection<Method> suppressForCheckedSet() {
+ return Arrays.asList(
+ getAddNullSupportedMethod(),
+ getAddSupportedNullPresentMethod());
+ }
+}
diff --git a/test/com/google/common/collect/testing/OpenJdk6Tests.java b/test/com/google/common/collect/testing/OpenJdk6Tests.java
new file mode 100644
index 0000000..a4038ee
--- /dev/null
+++ b/test/com/google/common/collect/testing/OpenJdk6Tests.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Suite of tests for OpenJdk 6 tests. The existence of this class is a hack
+ * because the suitebuilder won't pick up the suites directly in the other
+ * classes because they don't extend TestCase. Ergh.
+ *
+ * @author Kevin Bourrillion
+ */
+public class OpenJdk6Tests extends TestCase {
+ public static Test suite() {
+ TestSuite suite = new TestSuite();
+ suite.addTest(OpenJdk6SetTests.suite());
+ suite.addTest(OpenJdk6ListTests.suite());
+ suite.addTest(OpenJdk6QueueTests.suite());
+ suite.addTest(OpenJdk6MapTests.suite());
+ return suite;
+ }
+}
diff --git a/test/com/google/common/collect/testing/features/FeatureEnumTest.java b/test/com/google/common/collect/testing/features/FeatureEnumTest.java
new file mode 100644
index 0000000..94ed495
--- /dev/null
+++ b/test/com/google/common/collect/testing/features/FeatureEnumTest.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.features;
+
+import junit.framework.TestCase;
+
+import java.lang.annotation.Annotation;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Inherited;
+import java.lang.reflect.Method;
+
+/**
+ * Since annotations have some reusability issues that force copy and paste
+ * all over the place, it's worth having a test to ensure that all our Feature
+ * enums have their annotations correctly set up.
+ *
+ * @author George van den Driessche
+ */
+public class FeatureEnumTest extends TestCase {
+ private static void assertGoodTesterAnnotation(
+ Class<? extends Annotation> annotationClass) {
+ assertNotNull(
+ String.format("%s must be annotated with @TesterAnnotation.",
+ annotationClass),
+ annotationClass.getAnnotation(TesterAnnotation.class));
+ final Retention retentionPolicy =
+ annotationClass.getAnnotation(Retention.class);
+ assertNotNull(
+ String.format("%s must have a @Retention annotation.", annotationClass),
+ retentionPolicy);
+ assertEquals(
+ String.format("%s must have RUNTIME RetentionPolicy.", annotationClass),
+ RetentionPolicy.RUNTIME, retentionPolicy.value());
+ assertNotNull(
+ String.format("%s must be inherited.", annotationClass),
+ annotationClass.getAnnotation(Inherited.class));
+
+ for (String propertyName : new String[]{"value", "absent"}) {
+ Method method = null;
+ try {
+ method = annotationClass.getMethod(propertyName);
+ } catch (NoSuchMethodException e) {
+ fail(String.format("%s must have a property named '%s'.",
+ annotationClass, propertyName));
+ }
+ final Class<?> returnType = method.getReturnType();
+ assertTrue(String.format("%s.%s() must return an array.",
+ annotationClass, propertyName),
+ returnType.isArray());
+ assertSame(String.format("%s.%s() must return an array of %s.",
+ annotationClass, propertyName, annotationClass.getDeclaringClass()),
+ annotationClass.getDeclaringClass(), returnType.getComponentType());
+ }
+ }
+
+ // This is public so that tests for Feature enums we haven't yet imagined
+ // can reuse it.
+ public static <E extends Enum<?> & Feature<?>> void assertGoodFeatureEnum(
+ Class<E> featureEnumClass) {
+ final Class<?>[] classes = featureEnumClass.getDeclaredClasses();
+ for (Class<?> containedClass : classes) {
+ if (containedClass.getSimpleName().equals("Require")) {
+ if (containedClass.isAnnotation()) {
+ assertGoodTesterAnnotation(asAnnotation(containedClass));
+ } else {
+ fail(String.format("Feature enum %s contains a class named " +
+ "'Require' but it is not an annotation.", featureEnumClass));
+ }
+ return;
+ }
+ }
+ fail(String.format("Feature enum %s should contain an " +
+ "annotation named 'Require'.", featureEnumClass));
+ }
+
+ @SuppressWarnings("unchecked")
+ private static Class<? extends Annotation> asAnnotation(Class<?> clazz) {
+ if (clazz.isAnnotation()) {
+ return (Class<? extends Annotation>) clazz;
+ } else {
+ throw new IllegalArgumentException(
+ String.format("%s is not an annotation.", clazz));
+ }
+ }
+
+ public void testFeatureEnums() throws Exception {
+ assertGoodFeatureEnum(CollectionFeature.class);
+ assertGoodFeatureEnum(ListFeature.class);
+ assertGoodFeatureEnum(SetFeature.class);
+ assertGoodFeatureEnum(CollectionSize.class);
+ assertGoodFeatureEnum(MapFeature.class);
+ }
+}
diff --git a/test/com/google/common/collect/testing/features/FeatureUtilTest.java b/test/com/google/common/collect/testing/features/FeatureUtilTest.java
new file mode 100644
index 0000000..d12a1e3
--- /dev/null
+++ b/test/com/google/common/collect/testing/features/FeatureUtilTest.java
@@ -0,0 +1,275 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.features;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Sets;
+import static com.google.common.collect.testing.Helpers.assertContentsAnyOrder;
+
+import junit.framework.TestCase;
+
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.reflect.Method;
+import java.util.Collections;
+import java.util.Set;
+
+/**
+ * @author George van den Driessche
+ */
+// Enum values use constructors with generic varargs.
+@SuppressWarnings("unchecked")
+public class FeatureUtilTest extends TestCase {
+ interface ExampleBaseInterface {
+ void behave();
+ }
+
+ interface ExampleDerivedInterface extends ExampleBaseInterface {
+ void misbehave();
+ }
+
+ enum ExampleBaseFeature implements Feature<ExampleBaseInterface> {
+ BASE_FEATURE_1,
+ BASE_FEATURE_2;
+
+ public Set<Feature<? super ExampleBaseInterface>> getImpliedFeatures() {
+ return Collections.emptySet();
+ }
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @Inherited
+ @TesterAnnotation
+ @interface Require {
+ ExampleBaseFeature[] value() default {};
+ ExampleBaseFeature[] absent() default {};
+ }
+ }
+
+ enum ExampleDerivedFeature implements Feature<ExampleDerivedInterface>{
+ DERIVED_FEATURE_1,
+ DERIVED_FEATURE_2(ExampleBaseFeature.BASE_FEATURE_1),
+ DERIVED_FEATURE_3,
+
+ COMPOUND_DERIVED_FEATURE(
+ DERIVED_FEATURE_1,
+ DERIVED_FEATURE_2,
+ ExampleBaseFeature.BASE_FEATURE_2);
+
+ private Set<Feature<? super ExampleDerivedInterface>> implied;
+
+ ExampleDerivedFeature(
+ Feature<? super ExampleDerivedInterface> ... implied) {
+ this.implied = ImmutableSet.of(implied);
+ }
+
+ public Set<Feature<? super ExampleDerivedInterface>> getImpliedFeatures() {
+ return implied;
+ }
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @Inherited
+ @TesterAnnotation
+ @interface Require {
+ ExampleDerivedFeature[] value() default {};
+ ExampleDerivedFeature[] absent() default {};
+ }
+ }
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @interface NonTesterAnnotation {
+ }
+
+ @ExampleBaseFeature.Require({ExampleBaseFeature.BASE_FEATURE_1})
+ private static abstract class ExampleBaseInterfaceTester extends TestCase {
+ protected final void doNotActuallyRunThis() {
+ fail("Nobody's meant to actually run this!");
+ }
+ }
+
+ @NonTesterAnnotation
+ @ExampleDerivedFeature.Require({ExampleDerivedFeature.DERIVED_FEATURE_2})
+ private static class ExampleDerivedInterfaceTester
+ extends ExampleBaseInterfaceTester {
+ @ExampleDerivedFeature.Require({
+ ExampleDerivedFeature.DERIVED_FEATURE_1,
+ ExampleDerivedFeature.DERIVED_FEATURE_2})
+ public void testRequiringTwoExplicitDerivedFeatures() throws Exception {
+ doNotActuallyRunThis();
+ }
+
+ @ExampleDerivedFeature.Require({
+ ExampleDerivedFeature.DERIVED_FEATURE_1,
+ ExampleDerivedFeature.DERIVED_FEATURE_3})
+ public void testRequiringAllThreeDerivedFeatures() {
+ doNotActuallyRunThis();
+ }
+
+ @ExampleBaseFeature.Require(absent = {ExampleBaseFeature.BASE_FEATURE_1})
+ public void testRequiringConflictingFeatures() throws Exception {
+ doNotActuallyRunThis();
+ }
+ }
+
+ @ExampleDerivedFeature.Require(
+ absent = {ExampleDerivedFeature.DERIVED_FEATURE_2})
+ private static class ExampleDerivedInterfaceTester_Conflict
+ extends ExampleBaseInterfaceTester {
+ }
+
+ public void testTestFeatureEnums() throws Exception {
+ // Haha! Let's test our own test rig!
+ FeatureEnumTest.assertGoodFeatureEnum(
+ FeatureUtilTest.ExampleBaseFeature.class);
+ FeatureEnumTest.assertGoodFeatureEnum(
+ FeatureUtilTest.ExampleDerivedFeature.class);
+ }
+
+ public void testAddImpliedFeatures_returnsSameSetInstance() throws Exception {
+ Set<Feature<?>> features = Sets.<Feature<?>>newHashSet(
+ ExampleBaseFeature.BASE_FEATURE_1);
+ assertSame(features, FeatureUtil.addImpliedFeatures(features));
+ }
+
+ public void testAddImpliedFeatures_addsImpliedFeatures() throws Exception {
+ Set<Feature<?>> features;
+
+ features = Sets.<Feature<?>>newHashSet(
+ ExampleDerivedFeature.DERIVED_FEATURE_1);
+ assertContentsAnyOrder(FeatureUtil.addImpliedFeatures(features),
+ ExampleDerivedFeature.DERIVED_FEATURE_1);
+
+ features = Sets.<Feature<?>>newHashSet(
+ ExampleDerivedFeature.DERIVED_FEATURE_2);
+ assertContentsAnyOrder(FeatureUtil.addImpliedFeatures(features),
+ ExampleDerivedFeature.DERIVED_FEATURE_2,
+ ExampleBaseFeature.BASE_FEATURE_1);
+
+ features = Sets.<Feature<?>>newHashSet(
+ ExampleDerivedFeature.COMPOUND_DERIVED_FEATURE);
+ assertContentsAnyOrder(FeatureUtil.addImpliedFeatures(features),
+ ExampleDerivedFeature.COMPOUND_DERIVED_FEATURE,
+ ExampleDerivedFeature.DERIVED_FEATURE_1,
+ ExampleDerivedFeature.DERIVED_FEATURE_2,
+ ExampleBaseFeature.BASE_FEATURE_1,
+ ExampleBaseFeature.BASE_FEATURE_2);
+ }
+
+ public void testImpliedFeatures_returnsNewSetInstance() throws Exception {
+ Set<Feature<?>> features = Sets.<Feature<?>>newHashSet(
+ ExampleBaseFeature.BASE_FEATURE_1);
+ assertNotSame(features, FeatureUtil.impliedFeatures(features));
+ }
+
+ public void testImpliedFeatures_returnsImpliedFeatures() throws Exception {
+ Set<Feature<?>> features;
+
+ features = Sets.<Feature<?>>newHashSet(
+ ExampleDerivedFeature.DERIVED_FEATURE_1);
+ assertTrue(FeatureUtil.impliedFeatures(features).isEmpty());
+
+ features = Sets.<Feature<?>>newHashSet(
+ ExampleDerivedFeature.DERIVED_FEATURE_2);
+ assertContentsAnyOrder(FeatureUtil.impliedFeatures(features),
+ ExampleBaseFeature.BASE_FEATURE_1);
+
+ features = Sets.<Feature<?>>newHashSet(
+ ExampleDerivedFeature.COMPOUND_DERIVED_FEATURE);
+ assertContentsAnyOrder(FeatureUtil.impliedFeatures(features),
+ ExampleDerivedFeature.DERIVED_FEATURE_1,
+ ExampleDerivedFeature.DERIVED_FEATURE_2,
+ ExampleBaseFeature.BASE_FEATURE_1,
+ ExampleBaseFeature.BASE_FEATURE_2);
+ }
+
+ public void testBuildTesterRequirements_class() throws Exception {
+ assertEquals(FeatureUtil.buildTesterRequirements(
+ ExampleBaseInterfaceTester.class),
+ new TesterRequirements(
+ Sets.<Feature<?>>newHashSet(ExampleBaseFeature.BASE_FEATURE_1),
+ Collections.<Feature<?>>emptySet()));
+
+ assertEquals(FeatureUtil.buildTesterRequirements(
+ ExampleDerivedInterfaceTester.class),
+ new TesterRequirements(
+ Sets.<Feature<?>>newHashSet(
+ ExampleBaseFeature.BASE_FEATURE_1,
+ ExampleDerivedFeature.DERIVED_FEATURE_2),
+ Collections.<Feature<?>>emptySet()));
+ }
+
+ public void testBuildTesterRequirements_method() throws Exception {
+ assertEquals(FeatureUtil.buildTesterRequirements(
+ ExampleDerivedInterfaceTester.class.getMethod(
+ "testRequiringTwoExplicitDerivedFeatures")),
+ new TesterRequirements(
+ Sets.<Feature<?>>newHashSet(
+ ExampleBaseFeature.BASE_FEATURE_1,
+ ExampleDerivedFeature.DERIVED_FEATURE_1,
+ ExampleDerivedFeature.DERIVED_FEATURE_2),
+ Collections.<Feature<?>>emptySet()));
+ assertEquals(FeatureUtil.buildTesterRequirements(
+ ExampleDerivedInterfaceTester.class.getMethod(
+ "testRequiringAllThreeDerivedFeatures")),
+ new TesterRequirements(
+ Sets.<Feature<?>>newHashSet(
+ ExampleBaseFeature.BASE_FEATURE_1,
+ ExampleDerivedFeature.DERIVED_FEATURE_1,
+ ExampleDerivedFeature.DERIVED_FEATURE_2,
+ ExampleDerivedFeature.DERIVED_FEATURE_3),
+ Collections.<Feature<?>>emptySet()));
+ }
+
+ public void testBuildTesterRequirements_classClassConflict()
+ throws Exception {
+ try {
+ FeatureUtil.buildTesterRequirements(
+ ExampleDerivedInterfaceTester_Conflict.class);
+ fail("Expected ConflictingRequirementsException");
+ } catch (ConflictingRequirementsException e) {
+ assertContentsAnyOrder(e.getConflicts(),
+ ExampleBaseFeature.BASE_FEATURE_1);
+ assertEquals(ExampleDerivedInterfaceTester_Conflict.class, e.getSource());
+ }
+ }
+
+ public void testBuildTesterRequirements_methodClassConflict()
+ throws Exception {
+ Method method = ExampleDerivedInterfaceTester.class
+ .getMethod("testRequiringConflictingFeatures");
+ try {
+ FeatureUtil.buildTesterRequirements(method);
+ fail("Expected ConflictingRequirementsException");
+ } catch (ConflictingRequirementsException e) {
+ assertContentsAnyOrder(e.getConflicts(),
+ ExampleBaseFeature.BASE_FEATURE_1);
+ assertEquals(method, e.getSource());
+ }
+ }
+
+ public void testBuildDeclaredTesterRequirements() throws Exception {
+ assertEquals(FeatureUtil.buildDeclaredTesterRequirements(
+ ExampleDerivedInterfaceTester.class
+ .getMethod("testRequiringTwoExplicitDerivedFeatures")),
+ new TesterRequirements(FeatureUtil.addImpliedFeatures(
+ Sets.<Feature<?>>newHashSet(
+ ExampleDerivedFeature.DERIVED_FEATURE_1,
+ ExampleDerivedFeature.DERIVED_FEATURE_2)),
+ Collections.<Feature<?>>emptySet()));
+ }
+
+}
diff --git a/test/com/google/common/collect/testing/google/AbstractMultisetSetCountTester.java b/test/com/google/common/collect/testing/google/AbstractMultisetSetCountTester.java
new file mode 100644
index 0000000..cc4c3f4
--- /dev/null
+++ b/test/com/google/common/collect/testing/google/AbstractMultisetSetCountTester.java
@@ -0,0 +1,348 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.google;
+
+import com.google.common.collect.Multiset;
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.SEVERAL;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Common superclass for {@link MultisetSetCountUnconditionallyTester} and
+ * {@link MultisetSetCountConditionallyTester}. It is used by those testers to
+ * test calls to the unconditional {@code setCount()} method and calls to the
+ * conditional {@code setCount()} method when the expected present count is
+ * correct.
+ *
+ * @author Chris Povirk
+ */
+public abstract class AbstractMultisetSetCountTester<E>
+ extends AbstractMultisetTester<E> {
+ /*
+ * TODO: consider adding MultisetFeatures.SUPPORTS_SET_COUNT. Currently we
+ * assume that using setCount() to increase the count is permitted iff add()
+ * is permitted and similarly for decrease/remove(). We assume that a
+ * setCount() no-op is permitted if either add() or remove() is permitted,
+ * though we also allow it to "succeed" if neither is permitted.
+ */
+
+ private void assertSetCount(E element, int count) {
+ setCountCheckReturnValue(element, count);
+
+ assertEquals(
+ "multiset.count() should return the value passed to setCount()",
+ count, getMultiset().count(element));
+
+ int size = 0;
+ for (Multiset.Entry<E> entry : getMultiset().entrySet()) {
+ size += entry.getCount();
+ }
+ assertEquals(
+ "multiset.size() should be the sum of the counts of all entries",
+ size, getMultiset().size());
+ }
+
+ /**
+ * Call the {@code setCount()} method under test, and check its return value.
+ */
+ abstract void setCountCheckReturnValue(E element, int count);
+
+ /**
+ * Call the {@code setCount()} method under test, but do not check its return
+ * value. Callers should use this method over
+ * {@link #setCountCheckReturnValue(Object, int)} when they expect
+ * {@code setCount()} to throw an exception, as checking the return value
+ * could produce an incorrect error message like
+ * "setCount() should return the original count" instead of the message passed
+ * to a later invocation of {@code fail()}, like "setCount should throw
+ * UnsupportedOperationException."
+ */
+ abstract void setCountNoCheckReturnValue(E element, int count);
+
+ private void assertSetCountIncreasingFailure(E element, int count) {
+ try {
+ setCountNoCheckReturnValue(element, count);
+ fail("a call to multiset.setCount() to increase an element's count "
+ + "should throw");
+ } catch (UnsupportedOperationException expected) {
+ }
+ }
+
+ private void assertSetCountDecreasingFailure(E element, int count) {
+ try {
+ setCountNoCheckReturnValue(element, count);
+ fail("a call to multiset.setCount() to decrease an element's count "
+ + "should throw");
+ } catch (UnsupportedOperationException expected) {
+ }
+ }
+
+ // Unconditional setCount no-ops.
+
+ private void assertZeroToZero() {
+ assertSetCount(samples.e3, 0);
+ }
+
+ private void assertOneToOne() {
+ assertSetCount(samples.e0, 1);
+ }
+
+ private void assertThreeToThree() {
+ initThreeCopies();
+ assertSetCount(samples.e0, 3);
+ }
+
+ @CollectionFeature.Require(SUPPORTS_ADD)
+ public void testSetCount_zeroToZero_addSupported() {
+ assertZeroToZero();
+ }
+
+ @CollectionFeature.Require(SUPPORTS_REMOVE)
+ public void testSetCount_zeroToZero_removeSupported() {
+ assertZeroToZero();
+ }
+
+ @CollectionFeature.Require(absent = {SUPPORTS_ADD, SUPPORTS_REMOVE})
+ public void testSetCount_zeroToZero_unsupported() {
+ try {
+ assertZeroToZero();
+ } catch (UnsupportedOperationException tolerated) {
+ }
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ @CollectionFeature.Require(SUPPORTS_ADD)
+ public void testSetCount_oneToOne_addSupported() {
+ assertOneToOne();
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ @CollectionFeature.Require(SUPPORTS_REMOVE)
+ public void testSetCount_oneToOne_removeSupported() {
+ assertOneToOne();
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ @CollectionFeature.Require(absent = {SUPPORTS_ADD, SUPPORTS_REMOVE})
+ public void testSetCount_oneToOne_unsupported() {
+ try {
+ assertOneToOne();
+ } catch (UnsupportedOperationException tolerated) {
+ }
+ }
+
+ @CollectionSize.Require(SEVERAL)
+ @CollectionFeature.Require(SUPPORTS_ADD)
+ public void testSetCount_threeToThree_addSupported() {
+ assertThreeToThree();
+ }
+
+ @CollectionSize.Require(SEVERAL)
+ @CollectionFeature.Require(SUPPORTS_REMOVE)
+ public void testSetCount_threeToThree_removeSupported() {
+ assertThreeToThree();
+ }
+
+ @CollectionSize.Require(SEVERAL)
+ @CollectionFeature.Require(absent = {SUPPORTS_ADD, SUPPORTS_REMOVE})
+ public void testSetCount_threeToThree_unsupported() {
+ try {
+ assertThreeToThree();
+ } catch (UnsupportedOperationException tolerated) {
+ }
+ }
+
+ // Unconditional setCount size increases:
+
+ @CollectionFeature.Require(SUPPORTS_ADD)
+ public void testSetCount_zeroToOne_supported() {
+ assertSetCount(samples.e3, 1);
+ }
+
+ @CollectionFeature.Require(SUPPORTS_ADD)
+ public void testSetCount_zeroToThree_supported() {
+ assertSetCount(samples.e3, 3);
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ @CollectionFeature.Require(SUPPORTS_ADD)
+ public void testSetCount_oneToThree_supported() {
+ assertSetCount(samples.e0, 3);
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_ADD)
+ public void testSetCount_zeroToOne_unsupported() {
+ assertSetCountIncreasingFailure(samples.e3, 1);
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_ADD)
+ public void testSetCount_zeroToThree_unsupported() {
+ assertSetCountIncreasingFailure(samples.e3, 3);
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ @CollectionFeature.Require(absent = SUPPORTS_ADD)
+ public void testSetCount_oneToThree_unsupported() {
+ assertSetCountIncreasingFailure(samples.e3, 3);
+ }
+
+ // Unconditional setCount size decreases:
+
+ @CollectionSize.Require(absent = ZERO)
+ @CollectionFeature.Require(SUPPORTS_REMOVE)
+ public void testSetCount_oneToZero_supported() {
+ assertSetCount(samples.e0, 0);
+ }
+
+ @CollectionSize.Require(SEVERAL)
+ @CollectionFeature.Require(SUPPORTS_REMOVE)
+ public void testSetCount_threeToZero_supported() {
+ initThreeCopies();
+ assertSetCount(samples.e0, 0);
+ }
+
+ @CollectionSize.Require(SEVERAL)
+ @CollectionFeature.Require(SUPPORTS_REMOVE)
+ public void testSetCount_threeToOne_supported() {
+ initThreeCopies();
+ assertSetCount(samples.e0, 1);
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
+ public void testSetCount_oneToZero_unsupported() {
+ assertSetCountDecreasingFailure(samples.e0, 0);
+ }
+
+ @CollectionSize.Require(SEVERAL)
+ @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
+ public void testSetCount_threeToZero_unsupported() {
+ initThreeCopies();
+ assertSetCountDecreasingFailure(samples.e0, 0);
+ }
+
+ @CollectionSize.Require(SEVERAL)
+ @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
+ public void testSetCount_threeToOne_unsupported() {
+ initThreeCopies();
+ assertSetCountDecreasingFailure(samples.e0, 1);
+ }
+
+ // setCount with nulls:
+
+ @CollectionSize.Require(absent = ZERO)
+ @CollectionFeature.Require({SUPPORTS_REMOVE, ALLOWS_NULL_VALUES})
+ public void testSetCount_removeNull_nullSupported() {
+ initCollectionWithNullElement();
+ assertSetCount(null, 0);
+ }
+
+ @CollectionFeature.Require({SUPPORTS_ADD, ALLOWS_NULL_VALUES})
+ public void testSetCount_addNull_nullSupported() {
+ assertSetCount(null, 1);
+ }
+
+ @CollectionFeature.Require(value = SUPPORTS_ADD, absent = ALLOWS_NULL_VALUES)
+ public void testSetCount_addNull_nullUnsupported() {
+ try {
+ setCountNoCheckReturnValue(null, 1);
+ fail("adding null with setCount() should throw NullPointerException");
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+ public void testSetCount_noOpNull_nullSupported() {
+ try {
+ assertSetCount(null, 0);
+ } catch (UnsupportedOperationException tolerated) {
+ }
+ }
+
+ @CollectionFeature.Require(absent = ALLOWS_NULL_VALUES)
+ public void testSetCount_noOpNull_nullUnsupported() {
+ try {
+ assertSetCount(null, 0);
+ } catch (NullPointerException tolerated) {
+ } catch (UnsupportedOperationException tolerated) {
+ }
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+ public void testSetCount_existingNoNopNull_nullSupported() {
+ initCollectionWithNullElement();
+ try {
+ assertSetCount(null, 1);
+ } catch (UnsupportedOperationException tolerated) {
+ }
+ }
+
+ // Negative count.
+
+ @CollectionFeature.Require(SUPPORTS_REMOVE)
+ public void testSetCount_negative_removeSupported() {
+ try {
+ setCountNoCheckReturnValue(samples.e3, -1);
+ fail("calling setCount() with a negative count should throw "
+ + "IllegalArgumentException");
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
+ public void testSetCount_negative_removeUnsupported() {
+ try {
+ setCountNoCheckReturnValue(samples.e3, -1);
+ fail("calling setCount() with a negative count should throw "
+ + "IllegalArgumentException or UnsupportedOperationException");
+ } catch (IllegalArgumentException expected) {
+ } catch (UnsupportedOperationException expected) {
+ }
+ }
+
+ // TODO: test adding element of wrong type
+
+ /**
+ * Returns {@link Method} instances for the {@code setCount()} tests that
+ * assume multisets support duplicates so that the test of {@code
+ * Multisets.forSet()} can suppress them.
+ */
+ public static List<Method> getSetCountDuplicateInitializingMethods() {
+ try {
+ return Arrays.asList(
+ getMethod("testSetCount_threeToThree_removeSupported"),
+ getMethod("testSetCount_threeToZero_supported"),
+ getMethod("testSetCount_threeToOne_supported"));
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private static Method getMethod(String methodName)
+ throws NoSuchMethodException {
+ return AbstractMultisetSetCountTester.class.getMethod(methodName);
+ }
+}
diff --git a/test/com/google/common/collect/testing/google/AbstractMultisetTester.java b/test/com/google/common/collect/testing/google/AbstractMultisetTester.java
new file mode 100644
index 0000000..41f9822
--- /dev/null
+++ b/test/com/google/common/collect/testing/google/AbstractMultisetTester.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.google;
+
+import com.google.common.collect.Multiset;
+import com.google.common.collect.testing.AbstractCollectionTester;
+
+/**
+ * Base class for multiset collection tests.
+ *
+ * @author Jared Levy
+ */
+public class AbstractMultisetTester<E> extends AbstractCollectionTester<E> {
+ protected final Multiset<E> getMultiset() {
+ return (Multiset<E>) collection;
+ }
+
+ protected void initThreeCopies() {
+ collection =
+ getSubjectGenerator().create(samples.e0, samples.e0, samples.e0);
+ }
+}
diff --git a/test/com/google/common/collect/testing/google/MultisetReadsTester.java b/test/com/google/common/collect/testing/google/MultisetReadsTester.java
new file mode 100644
index 0000000..bdf322e
--- /dev/null
+++ b/test/com/google/common/collect/testing/google/MultisetReadsTester.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.google;
+
+import com.google.common.collect.HashMultiset;
+import com.google.common.collect.Multiset;
+import com.google.common.collect.Multisets;
+import com.google.common.collect.testing.WrongType;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.SEVERAL;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * A generic JUnit test which tests multiset-specific read operations.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.SetTestSuiteBuilder}.
+ *
+ * @author Jared Levy
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class MultisetReadsTester<E> extends AbstractMultisetTester<E> {
+ public void testCount_0() {
+ assertEquals("multiset.count(missing) didn't return 0",
+ 0, getMultiset().count(samples.e3));
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ public void testCount_1() {
+ assertEquals("multiset.count(present) didn't return 1",
+ 1, getMultiset().count(samples.e0));
+ }
+
+ @CollectionSize.Require(SEVERAL)
+ public void testCount_3() {
+ initThreeCopies();
+ assertEquals("multiset.count(thriceContained) didn't return 3",
+ 3, getMultiset().count(samples.e0));
+ }
+
+ public void testCount_null() {
+ assertEquals("multiset.count(null) didn't return 0",
+ 0, getMultiset().count(null));
+ }
+
+ public void testCount_wrongType() {
+ assertEquals("multiset.count(wrongType) didn't return 0",
+ 0, getMultiset().count(WrongType.VALUE));
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ public void testElementSet_contains() {
+ assertTrue("multiset.elementSet().contains(present) returned false",
+ getMultiset().elementSet().contains(samples.e0));
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ public void testEntrySet_contains() {
+ assertTrue("multiset.entrySet() didn't contain [present, 1]",
+ getMultiset().entrySet().contains(
+ Multisets.immutableEntry(samples.e0, 1)));
+ }
+
+ public void testEntrySet_contains_count0() {
+ assertFalse("multiset.entrySet() contains [missing, 0]",
+ getMultiset().entrySet().contains(
+ Multisets.immutableEntry(samples.e3, 0)));
+ }
+
+ public void testEntrySet_contains_nonentry() {
+ assertFalse("multiset.entrySet() contains a non-entry",
+ getMultiset().entrySet().contains(samples.e0));
+ }
+
+ public void testEntrySet_twice() {
+ assertEquals("calling multiset.entrySet() twice returned unequal sets",
+ getMultiset().entrySet(), getMultiset().entrySet());
+ }
+
+ @CollectionSize.Require(ZERO)
+ public void testEntrySet_hashCode_size0() {
+ assertEquals("multiset.entrySet() has incorrect hash code",
+ 0, getMultiset().entrySet().hashCode());
+ }
+
+ @CollectionSize.Require(ONE)
+ public void testEntrySet_hashCode_size1() {
+ assertEquals("multiset.entrySet() has incorrect hash code",
+ 1 ^ samples.e0.hashCode(), getMultiset().entrySet().hashCode());
+ }
+
+ public void testEquals_yes() {
+ assertTrue("multiset doesn't equal a multiset with the same elements",
+ getMultiset().equals(HashMultiset.create(getSampleElements())));
+ }
+
+ public void testEquals_differentSize() {
+ Multiset<E> other = HashMultiset.create(getSampleElements());
+ other.add(samples.e0);
+ assertFalse("multiset equals a multiset with a different size",
+ getMultiset().equals(other));
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ public void testEquals_differentElements() {
+ Multiset<E> other = HashMultiset.create(getSampleElements());
+ other.remove(samples.e0);
+ other.add(samples.e3);
+ assertFalse("multiset equals a multiset with different elements",
+ getMultiset().equals(other));
+ }
+
+ @CollectionSize.Require(ZERO)
+ public void testHashCode_size0() {
+ assertEquals("multiset has incorrect hash code",
+ 0, getMultiset().hashCode());
+ }
+
+ @CollectionSize.Require(ONE)
+ public void testHashCode_size1() {
+ assertEquals("multiset has incorrect hash code",
+ 1 ^ samples.e0.hashCode(), getMultiset().hashCode());
+ }
+
+ /**
+ * Returns {@link Method} instances for the read tests that assume multisets
+ * support duplicates so that the test of {@code Multisets.forSet()} can
+ * suppress them.
+ */
+ public static List<Method> getReadsDuplicateInitializingMethods() {
+ try {
+ return Arrays.asList(
+ MultisetReadsTester.class.getMethod("testCount_3"));
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/test/com/google/common/collect/testing/google/MultisetSetCountConditionallyTester.java b/test/com/google/common/collect/testing/google/MultisetSetCountConditionallyTester.java
new file mode 100644
index 0000000..bdeb7f7
--- /dev/null
+++ b/test/com/google/common/collect/testing/google/MultisetSetCountConditionallyTester.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.google;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.SEVERAL;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import static java.util.Collections.nCopies;
+
+/**
+ * A generic JUnit test which tests conditional {@code setCount()} operations on
+ * a multiset. Can't be invoked directly; please see
+ * {@link MultisetTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ */
+public class MultisetSetCountConditionallyTester<E> extends
+ AbstractMultisetSetCountTester<E> {
+ @Override void setCountCheckReturnValue(E element, int count) {
+ assertTrue(
+ "setCount() with the correct expected present count should return true",
+ setCount(element, count));
+ }
+
+ @Override void setCountNoCheckReturnValue(E element, int count) {
+ setCount(element, count);
+ }
+
+ private boolean setCount(E element, int count) {
+ return getMultiset().setCount(element, getMultiset().count(element), count);
+ }
+
+ private void assertSetCountNegativeOldCount() {
+ try {
+ getMultiset().setCount(samples.e3, -1, 1);
+ fail("calling setCount() with a negative oldCount should throw "
+ + "IllegalArgumentException");
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ // Negative oldCount.
+
+ @CollectionFeature.Require(SUPPORTS_ADD)
+ public void testSetCountConditional_negativeOldCount_addSupported() {
+ assertSetCountNegativeOldCount();
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_ADD)
+ public void testSetCountConditional_negativeOldCount_addUnsupported() {
+ try {
+ assertSetCountNegativeOldCount();
+ } catch (UnsupportedOperationException tolerated) {
+ }
+ }
+
+ // Incorrect expected present count.
+
+ @CollectionFeature.Require(SUPPORTS_ADD)
+ public void testSetCountConditional_oldCountTooLarge() {
+ assertFalse("setCount() with a too-large oldCount should return false",
+ getMultiset().setCount(samples.e0, 2, 3));
+ expectUnchanged();
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ @CollectionFeature.Require(SUPPORTS_ADD)
+ public void testSetCountConditional_oldCountTooSmallZero() {
+ assertFalse("setCount() with a too-small oldCount should return false",
+ getMultiset().setCount(samples.e0, 0, 2));
+ expectUnchanged();
+ }
+
+ @CollectionSize.Require(SEVERAL)
+ @CollectionFeature.Require(SUPPORTS_ADD)
+ public void testSetCountConditional_oldCountTooSmallNonzero() {
+ initThreeCopies();
+ assertFalse("setCount() with a too-small oldCount should return false",
+ getMultiset().setCount(samples.e0, 1, 5));
+ expectContents(nCopies(3, samples.e0));
+ }
+
+ /*
+ * TODO: test that unmodifiable multisets either throw UOE or return false
+ * when both are valid options. Currently we test the UOE cases and the
+ * return-false cases but not their intersection
+ */
+}
diff --git a/test/com/google/common/collect/testing/google/MultisetSetCountUnconditionallyTester.java b/test/com/google/common/collect/testing/google/MultisetSetCountUnconditionallyTester.java
new file mode 100644
index 0000000..ed07e15
--- /dev/null
+++ b/test/com/google/common/collect/testing/google/MultisetSetCountUnconditionallyTester.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.google;
+
+/**
+ * A generic JUnit test which tests unconditional {@code setCount()} operations
+ * on a multiset. Can't be invoked directly; please see
+ * {@link MultisetTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ */
+public class MultisetSetCountUnconditionallyTester<E>
+ extends AbstractMultisetSetCountTester<E> {
+ @Override void setCountCheckReturnValue(E element, int count) {
+ assertEquals("multiset.setCount() should return the old count",
+ getMultiset().count(element), setCount(element, count));
+ }
+
+ @Override void setCountNoCheckReturnValue(E element, int count) {
+ setCount(element, count);
+ }
+
+ private int setCount(E element, int count) {
+ return getMultiset().setCount(element, count);
+ }
+}
diff --git a/test/com/google/common/collect/testing/google/MultisetTestSuiteBuilder.java b/test/com/google/common/collect/testing/google/MultisetTestSuiteBuilder.java
new file mode 100644
index 0000000..cad4683
--- /dev/null
+++ b/test/com/google/common/collect/testing/google/MultisetTestSuiteBuilder.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.google;
+
+import com.google.common.collect.testing.AbstractCollectionTestSuiteBuilder;
+import com.google.common.collect.testing.AbstractTester;
+import com.google.common.collect.testing.Helpers;
+
+import java.util.List;
+
+/**
+ * Creates, based on your criteria, a JUnit test suite that exhaustively tests
+ * a {@code Multiset} implementation.
+ *
+ * @author Jared Levy
+ */
+public final class MultisetTestSuiteBuilder<E> extends
+ AbstractCollectionTestSuiteBuilder<MultisetTestSuiteBuilder<E>, E> {
+ public static <E> MultisetTestSuiteBuilder<E> using(
+ TestMultisetGenerator<E> generator) {
+ return new MultisetTestSuiteBuilder<E>().usingGenerator(generator);
+ }
+
+ // Class parameters must be raw.
+ @SuppressWarnings("unchecked")
+ @Override protected List<Class<? extends AbstractTester>> getTesters() {
+ List<Class<? extends AbstractTester>> testers
+ = Helpers.copyToList(super.getTesters());
+ testers.add(MultisetReadsTester.class);
+ testers.add(MultisetSetCountConditionallyTester.class);
+ testers.add(MultisetSetCountUnconditionallyTester.class);
+ testers.add(MultisetWritesTester.class);
+ return testers;
+ }
+}
diff --git a/test/com/google/common/collect/testing/google/MultisetWritesTester.java b/test/com/google/common/collect/testing/google/MultisetWritesTester.java
new file mode 100644
index 0000000..afee440
--- /dev/null
+++ b/test/com/google/common/collect/testing/google/MultisetWritesTester.java
@@ -0,0 +1,232 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.google;
+
+import com.google.common.collect.Multiset;
+import com.google.common.collect.Multisets;
+import com.google.common.collect.testing.WrongType;
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_CLEAR;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE_ALL;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_RETAIN_ALL;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import java.util.Collections;
+import java.util.Iterator;
+
+/**
+ * A generic JUnit test which tests multiset-specific write operations.
+ * Can't be invoked directly; please see {@link MultisetTestSuiteBuilder}.
+ *
+ * @author Jared Levy
+ */
+public class MultisetWritesTester<E> extends AbstractMultisetTester<E> {
+
+ @CollectionFeature.Require(SUPPORTS_ADD)
+ public void testAddOccurrences() {
+ int oldCount = getMultiset().count(samples.e0);
+ assertEquals("multiset.add(E, int) should return the old count",
+ oldCount, getMultiset().add(samples.e0, 2));
+ assertEquals("multiset.count() incorrect after add(E, int)",
+ oldCount + 2, getMultiset().count(samples.e0));
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_ADD)
+ public void testAddOccurrences_unsupported() {
+ try {
+ getMultiset().add(samples.e0, 2);
+ fail("unsupported multiset.add(E, int) didn't throw exception");
+ } catch (UnsupportedOperationException required) {}
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ @CollectionFeature.Require(SUPPORTS_REMOVE)
+ public void testRemove_occurrences_present() {
+ assertEquals("multiset.remove(present, 2) didn't return the old count",
+ 1, getMultiset().remove(samples.e0, 2));
+ assertFalse("multiset contains present after multiset.remove(present, 2)",
+ getMultiset().contains(samples.e0));
+ }
+
+ @CollectionFeature.Require(SUPPORTS_REMOVE)
+ public void testRemove_occurrences_absent() {
+ assertEquals("multiset.remove(absent, 0) didn't return 0",
+ 0, getMultiset().remove(samples.e3, 2));
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
+ public void testRemove_occurrences_unsupported_absent() {
+ // notice: we don't care whether it succeeds, or fails with UOE
+ try {
+ assertEquals(
+ "multiset.remove(absent, 2) didn't return 0 or throw an exception",
+ 0, getMultiset().remove(samples.e3, 2));
+ } catch (UnsupportedOperationException ok) {}
+ }
+
+ @CollectionFeature.Require(SUPPORTS_REMOVE)
+ public void testRemove_occurrences_0() {
+ int oldCount = getMultiset().count(samples.e0);
+ assertEquals("multiset.remove(E, 0) didn't return the old count",
+ oldCount, getMultiset().remove(samples.e0, 0));
+ }
+
+ @CollectionFeature.Require(SUPPORTS_REMOVE)
+ public void testRemove_occurrences_negative() {
+ try {
+ getMultiset().remove(samples.e0, -1);
+ fail("multiset.remove(E, -1) didn't throw an exception");
+ } catch (IllegalArgumentException required) {}
+ }
+
+ @CollectionFeature.Require(SUPPORTS_REMOVE)
+ public void testRemove_occurrences_wrongType() {
+ assertEquals("multiset.remove(wrongType, 1) didn't return 0",
+ 0, getMultiset().remove(WrongType.VALUE, 1));
+ }
+
+ @CollectionFeature.Require(SUPPORTS_CLEAR)
+ public void testEntrySet_clear() {
+ getMultiset().entrySet().clear();
+ assertTrue("multiset not empty after entrySet().clear()",
+ getMultiset().isEmpty());
+ }
+
+ @CollectionSize.Require(ONE)
+ @CollectionFeature.Require(SUPPORTS_REMOVE)
+ public void testEntrySet_iterator() {
+ Iterator<Multiset.Entry<E>> iterator = getMultiset().entrySet().iterator();
+ assertTrue(
+ "non-empty multiset.entrySet() iterator.hasNext() returned false",
+ iterator.hasNext());
+ assertEquals("multiset.entrySet() iterator.next() returned incorrect entry",
+ Multisets.immutableEntry(samples.e0, 1), iterator.next());
+ assertFalse(
+ "size 1 multiset.entrySet() iterator.hasNext() returned true "
+ + "after next()",
+ iterator.hasNext());
+ iterator.remove();
+ assertTrue(
+ "multiset isn't empty after multiset.entrySet() iterator.remove()",
+ getMultiset().isEmpty());
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
+ public void testEntrySet_iterator_remove_unsupported() {
+ Iterator<Multiset.Entry<E>> iterator = getMultiset().entrySet().iterator();
+ assertTrue(
+ "non-empty multiset.entrySet() iterator.hasNext() returned false",
+ iterator.hasNext());
+ try {
+ iterator.remove();
+ fail("multiset.entrySet() iterator.remove() didn't throw an exception");
+ } catch (UnsupportedOperationException expected) {}
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ @CollectionFeature.Require(SUPPORTS_REMOVE)
+ public void testEntrySet_remove_present() {
+ assertTrue(
+ "multiset.entrySet.remove(presentEntry) returned false",
+ getMultiset().entrySet().remove(
+ Multisets.immutableEntry(samples.e0, 1)));
+ assertFalse(
+ "multiset contains element after removing its entry",
+ getMultiset().contains(samples.e0));
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ @CollectionFeature.Require(SUPPORTS_REMOVE)
+ public void testEntrySet_remove_missing() {
+ assertFalse(
+ "multiset.entrySet.remove(missingEntry) returned true",
+ getMultiset().entrySet().remove(
+ Multisets.immutableEntry(samples.e0, 2)));
+ assertTrue(
+ "multiset didn't contain element after removing a missing entry",
+ getMultiset().contains(samples.e0));
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ @CollectionFeature.Require(SUPPORTS_REMOVE_ALL)
+ public void testEntrySet_removeAll_present() {
+ assertTrue(
+ "multiset.entrySet.removeAll(presentEntry) returned false",
+ getMultiset().entrySet().removeAll(
+ Collections.singleton(Multisets.immutableEntry(samples.e0, 1))));
+ assertFalse(
+ "multiset contains element after removing its entry",
+ getMultiset().contains(samples.e0));
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ @CollectionFeature.Require(SUPPORTS_REMOVE_ALL)
+ public void testEntrySet_removeAll_missing() {
+ assertFalse(
+ "multiset.entrySet.remove(missingEntry) returned true",
+ getMultiset().entrySet().removeAll(
+ Collections.singleton(Multisets.immutableEntry(samples.e0, 2))));
+ assertTrue(
+ "multiset didn't contain element after removing a missing entry",
+ getMultiset().contains(samples.e0));
+ }
+
+ @CollectionFeature.Require(SUPPORTS_REMOVE_ALL)
+ public void testEntrySet_removeAll_null() {
+ try {
+ getMultiset().entrySet().removeAll(null);
+ fail("multiset.entrySet.removeAll(null) didn't throw an exception");
+ } catch (NullPointerException expected) {}
+ }
+
+ @CollectionSize.Require(ONE)
+ @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+ public void testEntrySet_retainAll_present() {
+ assertFalse(
+ "multiset.entrySet.retainAll(presentEntry) returned false",
+ getMultiset().entrySet().retainAll(
+ Collections.singleton(Multisets.immutableEntry(samples.e0, 1))));
+ assertTrue(
+ "multiset doesn't contains element after retaining its entry",
+ getMultiset().contains(samples.e0));
+ }
+
+ @CollectionSize.Require(ONE)
+ @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+ public void testEntrySet_retainAll_missing() {
+ assertTrue(
+ "multiset.entrySet.retainAll(missingEntry) returned true",
+ getMultiset().entrySet().retainAll(
+ Collections.singleton(Multisets.immutableEntry(samples.e0, 2))));
+ assertFalse(
+ "multiset contains element after retaining a different entry",
+ getMultiset().contains(samples.e0));
+ }
+
+ @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+ public void testEntrySet_retainAll_null() {
+ try {
+ getMultiset().entrySet().retainAll(null);
+ // Returning successfully is not ideal, but tolerated.
+ } catch (NullPointerException expected) {}
+ }
+}
diff --git a/test/com/google/common/collect/testing/google/TestEnumMultisetGenerator.java b/test/com/google/common/collect/testing/google/TestEnumMultisetGenerator.java
new file mode 100644
index 0000000..f9bfa9d
--- /dev/null
+++ b/test/com/google/common/collect/testing/google/TestEnumMultisetGenerator.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.google;
+
+import com.google.common.collect.Multiset;
+import com.google.common.collect.testing.AnEnum;
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.SampleElements.Enums;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * An abstract {@code TestMultisetGenerator} for generating multisets containing
+ * enum values.
+ *
+ * @author Jared Levy
+ */
+public abstract class TestEnumMultisetGenerator
+ implements TestMultisetGenerator<AnEnum> {
+ public SampleElements<AnEnum> samples() {
+ return new Enums();
+ }
+
+ public Multiset<AnEnum> create(Object... elements) {
+ AnEnum[] array = new AnEnum[elements.length];
+ int i = 0;
+ for (Object e : elements) {
+ array[i++] = (AnEnum) e;
+ }
+ return create(array);
+ }
+
+ protected abstract Multiset<AnEnum> create(AnEnum[] elements);
+
+ public AnEnum[] createArray(int length) {
+ return new AnEnum[length];
+ }
+
+ /**
+ * Sorts the enums according to their natural ordering.
+ */
+ public List<AnEnum> order(List<AnEnum> insertionOrder) {
+ Collections.sort(insertionOrder);
+ return insertionOrder;
+ }
+}
diff --git a/test/com/google/common/collect/testing/google/TestMultisetGenerator.java b/test/com/google/common/collect/testing/google/TestMultisetGenerator.java
new file mode 100644
index 0000000..fbf045c
--- /dev/null
+++ b/test/com/google/common/collect/testing/google/TestMultisetGenerator.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.google;
+
+import com.google.common.collect.Multiset;
+import com.google.common.collect.testing.TestCollectionGenerator;
+
+/**
+ * Creates multisets, containing sample elements, to be tested.
+ *
+ * @author Jared Levy
+ */
+public interface TestMultisetGenerator<E> extends TestCollectionGenerator<E> {
+ Multiset<E> create(Object... elements);
+}
diff --git a/test/com/google/common/collect/testing/google/TestStringMultisetGenerator.java b/test/com/google/common/collect/testing/google/TestStringMultisetGenerator.java
new file mode 100644
index 0000000..984d904
--- /dev/null
+++ b/test/com/google/common/collect/testing/google/TestStringMultisetGenerator.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.google;
+
+import com.google.common.collect.Multiset;
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.SampleElements.Strings;
+
+import java.util.List;
+
+/**
+ * Create multisets of strings for tests.
+ *
+ * @author Jared Levy
+ */
+public abstract class TestStringMultisetGenerator
+ implements TestMultisetGenerator<String>
+{
+ public SampleElements<String> samples() {
+ return new Strings();
+ }
+
+ public Multiset<String> create(Object... elements) {
+ String[] array = new String[elements.length];
+ int i = 0;
+ for (Object e : elements) {
+ array[i++] = (String) e;
+ }
+ return create(array);
+ }
+
+ protected abstract Multiset<String> create(String[] elements);
+
+ public String[] createArray(int length) {
+ return new String[length];
+ }
+
+ /** Returns the original element list, unchanged. */
+ public List<String> order(List<String> insertionOrder) {
+ return insertionOrder;
+ }
+}
diff --git a/test/com/google/common/collect/testing/google/UnmodifiableCollectionTests.java b/test/com/google/common/collect/testing/google/UnmodifiableCollectionTests.java
new file mode 100644
index 0000000..27dca04
--- /dev/null
+++ b/test/com/google/common/collect/testing/google/UnmodifiableCollectionTests.java
@@ -0,0 +1,415 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.google;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.LinkedHashMultiset;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Multimap;
+import com.google.common.collect.Multiset;
+
+import static junit.framework.TestCase.assertEquals;
+import static junit.framework.TestCase.assertTrue;
+import static junit.framework.TestCase.fail;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.Set;
+
+/**
+ * A series of tests that support asserting that collections cannot be
+ * modified, either through direct or indirect means.
+ *
+ * @author Robert Konigsberg
+ */
+@GwtCompatible
+public class UnmodifiableCollectionTests {
+
+ public static void assertMapEntryIsUnmodifiable(Entry<?, ?> entry) {
+ try {
+ entry.setValue(null);
+ fail("setValue on unmodifiable Map.Entry succeeded");
+ } catch (UnsupportedOperationException expected) {
+ }
+ }
+
+ /**
+ * Verifies that an Iterator is unmodifiable.
+ *
+ * This test only works with iterators that iterate over a finite set.
+ */
+ public static void assertIteratorIsUnmodifiable(Iterator<?> iterator) {
+ while (iterator.hasNext()) {
+ iterator.next();
+ try {
+ iterator.remove();
+ fail("Remove on unmodifiable iterator succeeded");
+ } catch (UnsupportedOperationException expected) {
+ }
+ }
+ }
+
+ /**
+ * Asserts that two iterators contain elements in tandem.
+ *
+ * This test only works with iterators that iterate over a finite set.
+ */
+ public static void assertIteratorsInOrder(
+ Iterator<?> expectedIterator, Iterator<?> actualIterator) {
+ int i = 0;
+ while (expectedIterator.hasNext()) {
+ Object expected = expectedIterator.next();
+
+ assertTrue(
+ "index " + i + " expected <" + expected + "., actual is exhausted",
+ actualIterator.hasNext());
+
+ Object actual = actualIterator.next();
+ assertEquals("index " + i, expected, actual);
+ i++;
+ }
+ if (actualIterator.hasNext()) {
+ fail("index " + i
+ + ", expected is exhausted, actual <" + actualIterator.next() + ">");
+ }
+ }
+
+ /**
+ * Verifies that a collection is immutable.
+ *
+ * A collection is considered immutable if:<p/>
+ * 1. All its mutation methods result in UnsupportedOperationException, and
+ * do not change the underlying contents.<p/>
+ * 2. All methods that return objects that can indirectly mutate the
+ * collection throw UnsupportedOperationException when those mutators
+ * are called.
+ *
+ * @param collection the presumed-immutable collection
+ * @param sampleElement an element of the same type as that contained by
+ * {@code collection}. {@code collection} may or may not have {@code
+ * sampleElement} as a member.
+ */
+ public static <E> void assertCollectionIsUnmodifiable(
+ Collection<E> collection, E sampleElement) {
+ Collection<E> siblingCollection = new ArrayList<E>();
+ siblingCollection.add(sampleElement);
+ Collection<E> copy = new ArrayList<E>();
+ copy.addAll(collection);
+ try {
+ collection.add(sampleElement);
+ fail("add succeeded on unmodifiable collection");
+ } catch (UnsupportedOperationException expected) {
+ }
+
+ assertCollectionsAreEquivalent(copy, collection);
+
+ try {
+ collection.addAll(siblingCollection);
+ fail("addAll succeeded on unmodifiable collection");
+ } catch (UnsupportedOperationException expected) {
+ }
+ assertCollectionsAreEquivalent(copy, collection);
+
+ try {
+ collection.clear();
+ fail("clear succeeded on unmodifiable collection");
+ } catch (UnsupportedOperationException expected) {
+ }
+ assertCollectionsAreEquivalent(copy, collection);
+
+ assertIteratorIsUnmodifiable(collection.iterator());
+ assertCollectionsAreEquivalent(copy, collection);
+
+ try {
+ collection.remove(sampleElement);
+ fail("remove succeeded on unmodifiable collection");
+ } catch (UnsupportedOperationException expected) {
+ }
+ assertCollectionsAreEquivalent(copy, collection);
+
+ try {
+ collection.removeAll(siblingCollection);
+ fail("removeAll succeeded on unmodifiable collection");
+ } catch (UnsupportedOperationException expected) {
+ }
+ assertCollectionsAreEquivalent(copy, collection);
+
+ try {
+ collection.retainAll(siblingCollection);
+ fail("retainAll succeeded on unmodifiable collection");
+ } catch (UnsupportedOperationException expected) {
+ }
+ assertCollectionsAreEquivalent(copy, collection);
+ }
+
+ /**
+ * Verifies that a set is immutable.
+ *
+ * A set is considered immutable if:<p/>
+ * 1. All its mutation methods result in UnsupportedOperationException, and
+ * do not change the underlying contents.<p/>
+ * 2. All methods that return objects that can indirectly mutate the
+ * set throw UnsupportedOperationException when those mutators
+ * are called.
+ *
+ * @param set the presumed-immutable set
+ * @param sampleElement an element of the same type as that contained by
+ * {@code set}. {@code set} may or may not have {@code sampleElement} as a
+ * member.
+ */
+ public static <E> void assertSetIsUnmodifiable(
+ Set<E> set, E sampleElement) {
+ assertCollectionIsUnmodifiable(set, sampleElement);
+ }
+
+ /**
+ * Verifies that a multiset is immutable.
+ *
+ * A multiset is considered immutable if:<p/>
+ * 1. All its mutation methods result in UnsupportedOperationException, and
+ * do not change the underlying contents.<p/>
+ * 2. All methods that return objects that can indirectly mutate the
+ * multiset throw UnsupportedOperationException when those mutators
+ * are called.
+ *
+ * @param multiset the presumed-immutable multiset
+ * @param sampleElement an element of the same type as that contained by
+ * {@code multiset}. {@code multiset} may or may not have {@code
+ * sampleElement} as a member.
+ */
+ public static <E> void assertMultisetIsUnmodifiable(Multiset<E> multiset,
+ final E sampleElement) {
+ Multiset<E> copy = LinkedHashMultiset.create(multiset);
+ assertCollectionsAreEquivalent(multiset, copy);
+
+ // Multiset is a collection, so we can use all those tests.
+ assertCollectionIsUnmodifiable(multiset, sampleElement);
+
+ assertCollectionsAreEquivalent(multiset, copy);
+
+ try {
+ multiset.add(sampleElement, 2);
+ fail("add(Object, int) succeeded on unmodifiable collection");
+ } catch (UnsupportedOperationException expected) {
+ }
+ assertCollectionsAreEquivalent(multiset, copy);
+
+ try {
+ multiset.remove(sampleElement, 2);
+ fail("remove(Object, int) succeeded on unmodifiable collection");
+ } catch (UnsupportedOperationException expected) {
+ }
+ assertCollectionsAreEquivalent(multiset, copy);
+
+ assertCollectionsAreEquivalent(multiset, copy);
+
+ assertSetIsUnmodifiable(multiset.elementSet(), sampleElement);
+ assertCollectionsAreEquivalent(multiset, copy);
+
+ assertSetIsUnmodifiable(
+ multiset.entrySet(), new Multiset.Entry<E>() {
+ public int getCount() {
+ return 1;
+ }
+
+ public E getElement() {
+ return sampleElement;
+ }
+ });
+ assertCollectionsAreEquivalent(multiset, copy);
+ }
+
+ /**
+ * Verifies that a multimap is immutable.
+ *
+ * A multimap is considered immutable if:<p/>
+ * 1. All its mutation methods result in UnsupportedOperationException, and
+ * do not change the underlying contents.<p/>
+ * 2. All methods that return objects that can indirectly mutate the
+ * multimap throw UnsupportedOperationException when those mutators
+ *
+ * @param multimap the presumed-immutable multimap
+ * @param sampleKey a key of the same type as that contained by
+ * {@code multimap}. {@code multimap} may or may not have {@code sampleKey} as
+ * a key.
+ * @param sampleValue a key of the same type as that contained by
+ * {@code multimap}. {@code multimap} may or may not have {@code sampleValue}
+ * as a key.
+ */
+ public static <K, V> void assertMultimapIsUnmodifiable(
+ Multimap<K, V> multimap, final K sampleKey, final V sampleValue) {
+ List<Entry<K,V>> originalEntries =
+ Collections.unmodifiableList(Lists.newArrayList(multimap.entries()));
+
+ assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+ Collection<V> sampleValueAsCollection = Collections.singleton(sampleValue);
+
+ // Test #clear()
+ try {
+ multimap.clear();
+ fail("clear succeeded on unmodifiable multimap");
+ } catch (UnsupportedOperationException expected) {
+ }
+
+ assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+ // Test asMap().entrySet()
+ assertSetIsUnmodifiable(
+ multimap.asMap().entrySet(),
+ Maps.immutableEntry(sampleKey, sampleValueAsCollection));
+
+ // Test #values()
+
+ assertMultimapRemainsUnmodified(multimap, originalEntries);
+ if (!multimap.isEmpty()) {
+ Collection<V> values =
+ multimap.asMap().entrySet().iterator().next().getValue();
+
+ assertCollectionIsUnmodifiable(values, sampleValue);
+ }
+
+ // Test #entries()
+ assertCollectionIsUnmodifiable(
+ multimap.entries(),
+ Maps.immutableEntry(sampleKey, sampleValue));
+ assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+ // Iterate over every element in the entry set
+ for (Entry<K,V> entry : multimap.entries()) {
+ assertMapEntryIsUnmodifiable(entry);
+ }
+ assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+ // Test #keys()
+ assertMultisetIsUnmodifiable(multimap.keys(), sampleKey);
+ assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+ // Test #keySet()
+ assertSetIsUnmodifiable(multimap.keySet(), sampleKey);
+ assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+ // Test #get()
+ if (!multimap.isEmpty()) {
+ K key = multimap.keySet().iterator().next();
+ assertCollectionIsUnmodifiable(multimap.get(key), sampleValue);
+ assertMultimapRemainsUnmodified(multimap, originalEntries);
+ }
+
+ // Test #put()
+ try {
+ multimap.put(sampleKey, sampleValue);
+ fail("put succeeded on unmodifiable multimap");
+ } catch (UnsupportedOperationException expected) {
+ }
+ assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+ // Test #putAll(K, Collection<V>)
+ try {
+ multimap.putAll(sampleKey, sampleValueAsCollection);
+ fail("putAll(K, Iterable) succeeded on unmodifiable multimap");
+ } catch (UnsupportedOperationException expected) {
+ }
+ assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+ // Test #putAll(Multimap<K, V>)
+ Multimap<K, V> multimap2 = ArrayListMultimap.create();
+ multimap2.put(sampleKey, sampleValue);
+ try {
+ multimap.putAll(multimap2);
+ fail("putAll(Multimap<K, V>) succeeded on unmodifiable multimap");
+ } catch (UnsupportedOperationException expected) {
+ }
+ assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+ // Test #remove()
+ try {
+ multimap.remove(sampleKey, sampleValue);
+ fail("remove succeeded on unmodifiable multimap");
+ } catch (UnsupportedOperationException expected) {
+ }
+ assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+ // Test #removeAll()
+ try {
+ multimap.removeAll(sampleKey);
+ fail("removeAll succeeded on unmodifiable multimap");
+ } catch (UnsupportedOperationException expected) {
+ }
+ assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+ // Test #replaceValues()
+ try {
+ multimap.replaceValues(sampleKey, sampleValueAsCollection);
+ fail("replaceValues succeeded on unmodifiable multimap");
+ } catch (UnsupportedOperationException expected) {
+ }
+ assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+ // Test #asMap()
+ try {
+ multimap.asMap().remove(sampleKey);
+ fail("asMap().remove() succeeded on unmodifiable multimap");
+ } catch (UnsupportedOperationException expected) {
+ }
+ assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+ if (!multimap.isEmpty()) {
+ K presentKey = multimap.keySet().iterator().next();
+ try {
+ multimap.asMap().get(presentKey).remove(sampleValue);
+ fail("asMap().get().remove() succeeded on unmodifiable multimap");
+ } catch (UnsupportedOperationException expected) {
+ }
+ assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+ try {
+ multimap.asMap().values().iterator().next().remove(sampleValue);
+ fail("asMap().values().iterator().next().remove() succeeded on " +
+ "unmodifiable multimap");
+ } catch (UnsupportedOperationException expected) {
+ }
+
+ try {
+ ((Collection<?>) multimap.asMap().values().toArray()[0]).clear();
+ fail("asMap().values().toArray()[0].clear() succeeded on " +
+ "unmodifiable multimap");
+ } catch (UnsupportedOperationException expected) {
+ }
+ }
+
+ assertCollectionIsUnmodifiable(multimap.values(), sampleValue);
+ assertMultimapRemainsUnmodified(multimap, originalEntries);
+ }
+
+ private static <E> void assertCollectionsAreEquivalent(
+ Collection<E> expected, Collection<E> actual) {
+ assertIteratorsInOrder(expected.iterator(), actual.iterator());
+ }
+
+ private static <K, V> void assertMultimapRemainsUnmodified(
+ Multimap<K, V> expected, List<Entry<K, V>> actual) {
+ assertIteratorsInOrder(
+ expected.entries().iterator(), actual.iterator());
+ }
+}
diff --git a/test/com/google/common/testutils/EqualsTester.java b/test/com/google/common/testutils/EqualsTester.java
new file mode 100644
index 0000000..2cf36f7
--- /dev/null
+++ b/test/com/google/common/testutils/EqualsTester.java
@@ -0,0 +1,201 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.testutils;
+
+import com.google.common.annotations.GwtCompatible;
+import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Tester for equals() and hashCode() methods of a class.
+ *
+ * <p>To use, create a new EqualsTester and add equality groups where each group
+ * contains objects that are supposed to be equal to each other, and objects of
+ * different groups are expected to be unequal. For example:
+ * <pre>
+ * new EqualsTester()
+ * .addEqualityGroup("hello", "h" + "ello")
+ * .addEqualityGroup("world", "wor" + "ld")
+ * .addEqualityGroup(2, 1 + 1)
+ * .testEquals();
+ * </pre>
+ * This tests:
+ * <ul>
+ * <li>comparing each object against itself returns true
+ * <li>comparing each object against null returns false
+ * <li>comparing each object an instance of an incompatible class returns false
+ * <li>comparing each pair of objects within the same equality group returns
+ * true
+ * <li>comparing each pair of objects from different equality groups returns
+ * false
+ * <li>the hash code of any two equal objects are equal
+ * </ul>
+ * For backward compatibility, the following usage pattern is also supported:
+ * <ol>
+ * <li>Create a reference instance of the class under test and use to create a
+ * new EqualsTester.
+ *
+ * <li>Create one or more new instances of the class that should be equal to the
+ * reference instance and pass to addEqualObject(). Multiple instances can be
+ * used to test subclasses.
+ *
+ * <li>Create one or more new instances that should not be equal to the
+ * reference instance and pass to addNotEqualObject. For complete testing,
+ * you should add one instance that varies in each aspect checked by equals().
+ *
+ * <li>Invoke {@link #testEquals} on the EqualsTester.
+ * </ol>
+ *
+ * @author Jim McMaster
+ * @author Jige Yu
+ */
+@GwtCompatible
+public final class EqualsTester {
+
+ private final List<Object> defaultEqualObjects = Lists.newArrayList();
+ private final List<Object> defaultNotEqualObjects = Lists.newArrayList();
+ private final List<List<Object>> equalityGroups = Lists.newArrayList();
+
+ /**
+ * Constructs an empty EqualsTester instance
+ */
+ public EqualsTester() {
+ equalityGroups.add(defaultEqualObjects);
+ }
+
+
+ /**
+ * Constructs a new EqualsTester for a given reference object
+ *
+ * @param reference reference object for comparison
+ */
+ public EqualsTester(Object reference) {
+ this();
+ checkNotNull(reference, "Reference object cannot be null");
+ defaultEqualObjects.add(reference);
+ }
+
+ /**
+ * Adds {@code equalityGroup} with objects that are supposed to be equal to
+ * each other and not equal to any other equality groups added to this tester.
+ */
+ public EqualsTester addEqualityGroup(Object... equalityGroup) {
+ equalityGroups.add(ImmutableList.of(equalityGroup));
+ return this;
+ }
+
+ /**
+ * Add one or more objects that should be equal to the reference object
+ */
+ public EqualsTester addEqualObject(Object... equalObjects) {
+ defaultEqualObjects.addAll(list(equalObjects));
+ return this;
+ }
+
+ /**
+ * Add one or more objects that should not be equal to the reference object.
+ */
+ public EqualsTester addNotEqualObject(Object... notEqualObjects) {
+ defaultNotEqualObjects.addAll(list(notEqualObjects));
+ return this;
+ }
+
+ /**
+ * Run tests on equals method, throwing a failure on an invalid test
+ */
+ public EqualsTester testEquals() {
+ assertEquality();
+ assertInequality();
+ return this;
+ }
+
+ private void assertEquality() {
+ // Objects in defaultNotEqualObjects don't have to be equal to each other
+ // for backward compatibility
+ for (Iterable<Object> group : equalityGroups) {
+ for (Object reference : group) {
+ assertNotEqual(reference, null);
+ assertTrue(reference + " is expected to be equal to itself",
+ reference.equals(reference));
+ assertNotEqual(reference, NotAnInstance.SINGLETON);
+ for (Object right : group) {
+ if (reference != right) {
+ assertEquals(reference + " is expected to be equal to " + right,
+ reference, right);
+ assertEquals(
+ reference + " hash code is expected to be equal to "
+ + right + " hash code",
+ reference.hashCode(), right.hashCode());
+ }
+ }
+ }
+ }
+ }
+
+ private void assertInequality() {
+ // defaultNotEqualObjects should participate in inequality test with other
+ // equality groups.
+ Iterable<List<Object>> inequalityGroups = Iterables.concat(
+ equalityGroups, Collections.singletonList(defaultNotEqualObjects));
+ for (Iterable<Object> group : inequalityGroups) {
+ for (Iterable<Object> anotherGroup : inequalityGroups) {
+ // compare every two equality groups
+ if (group == anotherGroup) {
+ // same group, ignore
+ continue;
+ }
+ for (Object left : group) {
+ for (Object right : anotherGroup) {
+ // No two objects from different equality group can be equal
+ assertNotEqual(left, right);
+ }
+ }
+ }
+ }
+ }
+
+ private static void assertNotEqual(Object a, Object b) {
+ assertFalse(a + " is expected to be unequal to " + b, a.equals(b));
+ }
+
+ private static List<Object> list(Object... objects) {
+ return ImmutableList.of(objects);
+ }
+
+ /**
+ * Class used to test whether equals() correctly handles an instance
+ * of an incompatible class. Since it is a private inner class, the
+ * invoker can never pass in an instance to the tester
+ */
+ private static final class NotAnInstance {
+
+ static final NotAnInstance SINGLETON = new NotAnInstance();
+
+ @Override public String toString() {
+ return "equal_to_nothing";
+ }
+ }
+}
diff --git a/test/com/google/common/testutils/NullPointerTester.java b/test/com/google/common/testutils/NullPointerTester.java
new file mode 100644
index 0000000..a0d4ab1
--- /dev/null
+++ b/test/com/google/common/testutils/NullPointerTester.java
@@ -0,0 +1,285 @@
+/*
+ * Copyright (C) 2005 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.testutils;
+
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.collect.Iterators;
+import com.google.common.collect.Maps;
+
+import junit.framework.Assert;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Member;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Pattern;
+
+import javax.annotation.Nullable;
+
+/**
+ * A test utility that verifies that your methods throw {@link
+ * NullPointerException} or {@link UnsupportedOperationException} whenever any
+ * of their parameters are null. To use it, you must first provide valid default
+ * values for the parameter types used by the class.
+ *
+ * @author Kevin Bourrillion
+ */
+public class NullPointerTester {
+ private Map<Class<?>, Object> defaults = Maps.newHashMap();
+
+ public NullPointerTester() {
+ setCommonDefaults();
+ }
+
+ private final void setCommonDefaults() {
+ setDefault(Appendable.class, new StringBuilder());
+ setDefault(CharSequence.class, "");
+ setDefault(Class.class, Class.class);
+ setDefault(Collection.class, Collections.emptySet());
+ setDefault(Comparable.class, 0);
+ setDefault(Comparator.class, Collections.reverseOrder());
+ setDefault(Function.class, Functions.identity());
+ setDefault(Integer.class, 0);
+ setDefault(Iterable.class, Collections.emptySet());
+ setDefault(Iterator.class, Iterators.emptyIterator());
+ setDefault(List.class, Collections.emptyList());
+ setDefault(Map.class, Collections.emptyMap());
+ setDefault(Object.class, new Object());
+ setDefault(Object[].class, new Object[0]);
+ setDefault(Pattern.class, Pattern.compile(""));
+ setDefault(Predicate.class, Predicates.alwaysTrue());
+ setDefault(Set.class, Collections.emptySet());
+ setDefault(String.class, "");
+ setDefault(int.class, 0);
+ setDefault(long.class, 0L);
+ setDefault(short.class, (short) 0);
+ setDefault(char.class, 'a');
+ setDefault(byte.class, (byte) 0);
+ setDefault(float.class, 0.0f);
+ setDefault(double.class, 0.0d);
+ setDefault(boolean.class, false);
+ }
+
+ /**
+ * Sets a default value that can be used for any parameter of type
+ * {@code type}.
+ */
+ public <T> void setDefault(Class<T> type, T value) {
+ defaults.put(type, value);
+ }
+
+ /**
+ * Runs {@link #testConstructor} on every public constructor in class {@code
+ * c}.
+ */
+ public void testAllPublicConstructors(Class<?> c) throws Exception {
+ for (Constructor<?> constructor : c.getDeclaredConstructors()) {
+ if (isPublic(constructor) && !isStatic(constructor)) {
+ testConstructor(constructor);
+ }
+ }
+ }
+
+ /**
+ * Runs {@link #testMethod} on every public static method in class
+ * {@code c}.
+ */
+ public void testAllPublicStaticMethods(Class<?> c) throws Exception {
+ for (Method method : c.getDeclaredMethods()) {
+ if (isPublic(method) && isStatic(method)) {
+ testMethod(null, method);
+ }
+ }
+ }
+
+ /**
+ * Runs {@link #testMethod} on every public instance method of
+ * {@code instance}.
+ */
+ public void testAllPublicInstanceMethods(Object instance) throws Exception {
+ Class<?> c = instance.getClass();
+ for (Method method : c.getDeclaredMethods()) {
+ if (isPublic(method) && !isStatic(method)) {
+ testMethod(instance, method);
+ }
+ }
+ }
+
+ /**
+ * Verifies that {@code method} produces a {@link NullPointerException}
+ * or {@link UnsupportedOperationException} whenever <i>any</i> of its
+ * non-{@link Nullable} parameters are null.
+ *
+ * @param instance the instance to invoke {@code method} on, or null if
+ * {@code method} is static
+ */
+ public void testMethod(Object instance, Method method) throws Exception {
+ Class<?>[] types = method.getParameterTypes();
+ for (int nullIndex = 0; nullIndex < types.length; nullIndex++) {
+ testMethodParameter(instance, method, nullIndex);
+ }
+ }
+
+ /**
+ * Verifies that {@code ctor} produces a {@link NullPointerException} or
+ * {@link UnsupportedOperationException} whenever <i>any</i> of its
+ * non-{@link Nullable} parameters are null.
+ */
+ public void testConstructor(Constructor<?> ctor) throws Exception {
+ Class<?>[] types = ctor.getParameterTypes();
+ for (int nullIndex = 0; nullIndex < types.length; nullIndex++) {
+ testConstructorParameter(ctor, nullIndex);
+ }
+ }
+
+ /**
+ * Verifies that {@code method} produces a {@link NullPointerException} or
+ * {@link UnsupportedOperationException} when the parameter in position {@code
+ * paramIndex} is null. If this parameter is marked {@link Nullable}, this
+ * method does nothing.
+ *
+ * @param instance the instance to invoke {@code method} on, or null if
+ * {@code method} is static
+ */
+ public void testMethodParameter(Object instance, final Method method,
+ int paramIndex) throws Exception {
+ method.setAccessible(true);
+ testFunctorParameter(instance, new Functor() {
+ public Class<?>[] getParameterTypes() {
+ return method.getParameterTypes();
+ }
+ public Annotation[][] getParameterAnnotations() {
+ return method.getParameterAnnotations();
+ }
+ public void invoke(Object instance, Object[] params)
+ throws InvocationTargetException, IllegalAccessException {
+ method.invoke(instance, params);
+ }
+ @Override public String toString() {
+ return method.getName();
+ }
+ }, paramIndex, method.getDeclaringClass());
+ }
+
+ /**
+ * Verifies that {@code ctor} produces a {@link NullPointerException} or
+ * {@link UnsupportedOperationException} when the parameter in position {@code
+ * paramIndex} is null. If this parameter is marked {@link Nullable}, this
+ * method does nothing.
+ */
+ public void testConstructorParameter(final Constructor<?> ctor,
+ int paramIndex) throws Exception {
+ ctor.setAccessible(true);
+ testFunctorParameter(null, new Functor() {
+ public Class<?>[] getParameterTypes() {
+ return ctor.getParameterTypes();
+ }
+ public Annotation[][] getParameterAnnotations() {
+ return ctor.getParameterAnnotations();
+ }
+ public void invoke(Object instance, Object[] params)
+ throws InvocationTargetException, IllegalAccessException,
+ InstantiationException {
+ ctor.newInstance(params);
+ }
+ }, paramIndex, ctor.getDeclaringClass());
+ }
+
+ /**
+ * Verifies that {@code func} produces a {@link NullPointerException} or
+ * {@link UnsupportedOperationException} when the parameter in position {@code
+ * paramIndex} is null. If this parameter is marked {@link Nullable}, this
+ * method does nothing.
+ *
+ * @param instance the instance to invoke {@code func} on, or null if
+ * {@code func} is static
+ */
+ private void testFunctorParameter(Object instance, Functor func,
+ int paramIndex, Class<?> testedClass) throws Exception {
+ if (parameterIsPrimitiveOrNullable(func, paramIndex)) {
+ return; // there's nothing to test
+ }
+ Object[] params = buildParamList(func, paramIndex);
+ try {
+ func.invoke(instance, params);
+ Assert.fail("No exception thrown from " + func +
+ Arrays.toString(params) + " for " + testedClass);
+ } catch (InvocationTargetException e) {
+ Throwable cause = e.getCause();
+ Assert.assertTrue("wrong exception thrown from " + func + ": " + cause,
+ cause instanceof NullPointerException
+ || cause instanceof UnsupportedOperationException);
+ }
+ }
+
+ private static boolean parameterIsPrimitiveOrNullable(
+ Functor func, int paramIndex) {
+ if (func.getParameterTypes()[paramIndex].isPrimitive()) {
+ return true;
+ }
+ Annotation[] annotations = func.getParameterAnnotations()[paramIndex];
+ for (Annotation annotation : annotations) {
+ if (annotation instanceof Nullable) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private Object[] buildParamList(Functor func, int indexOfParamToSetToNull) {
+ Class<?>[] types = func.getParameterTypes();
+ Object[] params = new Object[types.length];
+
+ for (int i = 0; i < types.length; i++) {
+ if (i != indexOfParamToSetToNull) {
+ params[i] = defaults.get(types[i]);
+ if (!parameterIsPrimitiveOrNullable(func, indexOfParamToSetToNull)) {
+ Assert.assertNotNull("No default value found for "
+ + types[i].getName(), params[i]);
+ }
+ }
+ }
+ return params;
+ }
+
+ private interface Functor {
+ Class<?>[] getParameterTypes();
+ Annotation[][] getParameterAnnotations();
+ void invoke(Object o, Object[] params) throws Exception;
+ }
+
+ private static boolean isPublic(Member member) {
+ return Modifier.isPublic(member.getModifiers());
+ }
+
+ private static boolean isStatic(Member member) {
+ return Modifier.isStatic(member.getModifiers());
+ }
+}
diff --git a/test/com/google/common/testutils/SerializableTester.java b/test/com/google/common/testutils/SerializableTester.java
new file mode 100644
index 0000000..f1d0ced
--- /dev/null
+++ b/test/com/google/common/testutils/SerializableTester.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.testutils;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+/**
+ * Helper class for testing whether a class is serializable.
+ *
+ * @see java.io.Serializable
+ * @author Mike Bostock
+ */
+public final class SerializableTester {
+ private SerializableTester() {}
+
+ /**
+ * Serializes and deserializes the specified object.
+ *
+ * <p>Note that the specified object may not be known by the compiler to be a
+ * {@link java.io.Serializable} instance, and is thus declared an
+ * {@code Object}. For example, it might be declared as a {@code List}.
+ *
+ * @return the re-serialized object
+ * @throws SerializationException if the specified object was not successfully
+ * serialized or deserialized
+ */
+ @SuppressWarnings("unchecked")
+ public static <T> T reserialize(T object) {
+ checkNotNull(object);
+ ByteArrayOutputStream bytes = new ByteArrayOutputStream();
+ try {
+ ObjectOutputStream out = new ObjectOutputStream(bytes);
+ out.writeObject(object);
+ ObjectInputStream in = new ObjectInputStream(
+ new ByteArrayInputStream(bytes.toByteArray()));
+ return (T) in.readObject();
+ } catch (RuntimeException e) {
+ throw new SerializationException(e);
+ } catch (IOException e) {
+ throw new SerializationException(e);
+ } catch (ClassNotFoundException e) {
+ throw new SerializationException(e);
+ }
+ }
+
+ /**
+ * Serializes and deserializes the specified object and verifies that the
+ * re-serialized object is equal to the provided object.
+ *
+ * <p>Note that the specified object may not be known by the compiler to be a
+ * {@link java.io.Serializable} instance, and is thus declared an
+ * {@code Object}. For example, it might be declared as a {@code List}.
+ *
+ * @return the re-serialized object
+ * @throws SerializationException if the specified object was not successfully
+ * serialized or deserialized
+ * @throws AssertionError if the re-serialized object is not equal to the
+ * original object
+ */
+ public static <T> T reserializeAndAssert(T object) {
+ T copy = reserialize(object);
+ if (!copy.equals(object)) {
+ throw new AssertionError("The re-serialized object " + copy +
+ " does not equal the original object " + object);
+ }
+ return copy;
+ }
+}
diff --git a/test/com/google/common/testutils/SerializationException.java b/test/com/google/common/testutils/SerializationException.java
new file mode 100644
index 0000000..bfe267f
--- /dev/null
+++ b/test/com/google/common/testutils/SerializationException.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.testutils;
+
+/**
+ * Exception thrown when an object fails to serialize or deserialize.
+ *
+ * @see SerializableTester
+ * @author Mike Bostock
+ */
+public class SerializationException extends RuntimeException {
+ public SerializationException(Throwable cause) {
+ super(cause);
+ }
+ public SerializationException(String message, Throwable cause) {
+ super(message, cause);
+ }
+ private static final long serialVersionUID = 0;
+}
diff --git a/test/test.iml b/test/test.iml
new file mode 100644
index 0000000..4ec7f06
--- /dev/null
+++ b/test/test.iml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module relativePaths="true" type="JAVA_MODULE" version="4">
+ <component name="NewModuleRootManager" inherit-compiler-output="true">
+ <exclude-output />
+ <content url="file://$MODULE_DIR$">
+ <sourceFolder url="file://$MODULE_DIR$" isTestSource="true" />
+ </content>
+ <orderEntry type="inheritedJdk" />
+ <orderEntry type="sourceFolder" forTests="false" />
+ <orderEntry type="module" module-name="google-collect" />
+ <orderEntry type="module" module-name="testfw" />
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../lib/junit.jar!/" />
+ <root url="jar://$MODULE_DIR$/../lib/tl4j-1.1.0.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../lib/tl4j-1.1.0.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../lib/easymockclassextension-2.4.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../lib/easymock-2.4.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../lib/jsr305.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ </component>
+</module>
+
diff --git a/testfw/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java b/testfw/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java
new file mode 100644
index 0000000..7606155
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.testers.CollectionAddAllTester;
+import com.google.common.collect.testing.testers.CollectionAddTester;
+import com.google.common.collect.testing.testers.CollectionClearTester;
+import com.google.common.collect.testing.testers.CollectionContainsAllTester;
+import com.google.common.collect.testing.testers.CollectionContainsTester;
+import com.google.common.collect.testing.testers.CollectionCreationTester;
+import com.google.common.collect.testing.testers.CollectionEqualsTester;
+import com.google.common.collect.testing.testers.CollectionIsEmptyTester;
+import com.google.common.collect.testing.testers.CollectionIteratorTester;
+import com.google.common.collect.testing.testers.CollectionRemoveAllTester;
+import com.google.common.collect.testing.testers.CollectionRemoveTester;
+import com.google.common.collect.testing.testers.CollectionRetainAllTester;
+import com.google.common.collect.testing.testers.CollectionSizeTester;
+import com.google.common.collect.testing.testers.CollectionToArrayTester;
+import com.google.common.collect.testing.testers.CollectionToStringTester;
+
+import junit.framework.TestSuite;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Abstract superclass of all test-suite builders for collection interfaces.
+ *
+ * @author George van den Driessche
+ */
+public abstract class AbstractCollectionTestSuiteBuilder<
+ B extends AbstractCollectionTestSuiteBuilder<B, E>, E>
+ extends PerCollectionSizeTestSuiteBuilder<
+ B, TestCollectionGenerator<E>, Collection<E>, E> {
+ // Class parameters must be raw.
+ @SuppressWarnings("unchecked")
+ @Override protected List<Class<? extends AbstractTester>> getTesters() {
+ return Arrays.<Class<? extends AbstractTester>>asList(
+ CollectionAddAllTester.class,
+ CollectionAddTester.class,
+ CollectionClearTester.class,
+ CollectionContainsAllTester.class,
+ CollectionContainsTester.class,
+ CollectionCreationTester.class,
+ CollectionEqualsTester.class,
+ CollectionIsEmptyTester.class,
+ CollectionIteratorTester.class,
+ CollectionRemoveAllTester.class,
+ CollectionRemoveTester.class,
+ CollectionRetainAllTester.class,
+ CollectionSizeTester.class,
+ CollectionToArrayTester.class,
+ CollectionToStringTester.class
+ );
+ }
+
+ @Override List<TestSuite> createDerivedSuites(FeatureSpecificTestSuiteBuilder<
+ ?, ? extends OneSizeTestContainerGenerator<Collection<E>, E>>
+ parentBuilder) {
+ DerivedIteratorTestSuiteBuilder<?> iteratorTestSuiteBuilder =
+ new DerivedIteratorTestSuiteBuilder<E>()
+ .named(parentBuilder.getName())
+ .usingGenerator(parentBuilder.getSubjectGenerator())
+ .withFeatures(parentBuilder.getFeatures());
+
+ return Collections.singletonList(
+ iteratorTestSuiteBuilder.createTestSuite());
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/AbstractCollectionTester.java b/testfw/com/google/common/collect/testing/AbstractCollectionTester.java
new file mode 100644
index 0000000..d2bd380
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/AbstractCollectionTester.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Collection;
+
+/**
+ * Base class for collection testers.
+ *
+ * @param <E> the element type of the collection to be tested.
+ *
+ * @author Kevin Bourrillion
+ */
+public abstract class AbstractCollectionTester<E>
+ extends AbstractContainerTester<Collection<E>, E> {
+
+ // TODO(George van den Driessche): replace this with an accessor.
+ protected Collection<E> collection;
+
+ @Override protected Collection<E> actualContents() {
+ return collection;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ // TODO(George van den Driessche): dispose of this once collection
+ // is encapsulated.
+ @Override protected Collection<E> resetContainer(Collection<E> newContents) {
+ collection = super.resetContainer(newContents);
+ return collection;
+ }
+
+ /** @see AbstractContainerTester#resetContainer() */
+ protected void resetCollection() {
+ resetContainer();
+ }
+
+ /**
+ * @return an array of the proper size with {@code null} inserted into the
+ * middle element.
+ */
+ protected E[] createArrayWithNullElement() {
+ E[] array = createSamplesArray();
+ array[getNullLocation()] = null;
+ return array;
+ }
+
+ protected void initCollectionWithNullElement() {
+ E[] array = createArrayWithNullElement();
+ resetContainer(getSubjectGenerator().create(array));
+ }
+
+ /**
+ * Equivalent to {@link #expectMissing(Object[]) expectMissing}{@code (null)}
+ * except that the call to {@code contains(null)} is permitted to throw a
+ * {@code NullPointerException}.
+ *
+ * @param message message to use upon assertion failure
+ */
+ protected void expectNullMissingWhenNullUnsupported(String message) {
+ try {
+ assertFalse(message, actualContents().contains(null));
+ } catch (NullPointerException tolerated) {
+ // Tolerated
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/AbstractContainerTester.java b/testfw/com/google/common/collect/testing/AbstractContainerTester.java
new file mode 100644
index 0000000..4e9d67e
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/AbstractContainerTester.java
@@ -0,0 +1,231 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Base class for testers of classes (including {@link Collection}
+ * and {@link java.util.Map Map}) that contain elements.
+ *
+ * @param <C> the type of the container
+ * @param <E> the type of the container's contents
+ *
+ * @author George van den Driessche
+ */
+public abstract class AbstractContainerTester<C, E>
+ extends AbstractTester<OneSizeTestContainerGenerator<C, E>> {
+ protected SampleElements<E> samples;
+ protected C container;
+
+ @Override protected void setUp() throws Exception {
+ super.setUp();
+ samples = this.getSubjectGenerator().samples();
+ resetContainer();
+ }
+
+ /**
+ * @return the contents of the container under test, for use by
+ * {@link #expectContents(Object[]) expectContents(E...)} and its friends.
+ */
+ protected abstract Collection<E> actualContents();
+
+ /**
+ * Replaces the existing container under test with a new container created
+ * by the subject generator.
+ *
+ * @see #resetContainer(Object) resetContainer(C)
+ *
+ * @return the new container instance.
+ */
+ protected C resetContainer() {
+ return resetContainer(getSubjectGenerator().createTestSubject());
+ }
+
+ /**
+ * Replaces the existing container under test with a new container.
+ * This is useful when a single test method needs to create multiple
+ * containers while retaining the ability to use
+ * {@link #expectContents(Object[]) expectContents(E...)} and other
+ * convenience methods. The creation of multiple containers in a single
+ * method is discouraged in most cases, but it is vital to the iterator tests.
+ *
+ * @return the new container instance
+ * @param newValue the new container instance
+ */
+ protected C resetContainer(C newValue) {
+ container = newValue;
+ return container;
+ }
+
+ /**
+ * @see #expectContents(java.util.Collection)
+ *
+ * @param elements expected contents of {@link #container}
+ */
+ protected final void expectContents(E... elements) {
+ expectContents(Arrays.asList(elements));
+ }
+
+ /**
+ * Asserts that the collection under test contains exactly the given elements,
+ * respecting cardinality but not order. Subclasses may override this method
+ * to provide stronger assertions, e.g., to check ordering in lists, but
+ * realize that <strong>unless a test extends
+ * {@link com.google.common.collect.testing.testers.AbstractListTester
+ * AbstractListTester}, a call to {@code expectContents()} invokes this
+ * version</strong>.
+ *
+ * @param expected expected value of {@link #container}
+ */
+ /*
+ * TODO(Chris Povirk): improve this and other implementations and move out of
+ * this framework for wider use
+ *
+ * TODO(George van den Driessche): could we incorporate the overriding
+ * logic from AbstractListTester, by examining whether the features
+ * include KNOWN_ORDER?
+ */
+ protected void expectContents(Collection<E> expected) {
+ Helpers.assertEqualIgnoringOrder(expected, actualContents());
+ }
+
+ protected void expectUnchanged() {
+ expectContents(getSampleElements());
+ }
+
+ /**
+ * Asserts that the collection under test contains exactly the elements it was
+ * initialized with plus the given elements, according to
+ * {@link #expectContents(java.util.Collection)}. In other words, for the
+ * default {@code expectContents()} implementation, the number of occurrences
+ * of each given element has increased by one since the test collection was
+ * created, and the number of occurrences of all other elements has not
+ * changed.
+ * <p/>
+ * Note: This means that a test like the following will fail if
+ * {@code collection} is a {@code Set}:
+ *
+ * <pre>
+ * collection.add(existingElement);
+ * expectAdded(existingElement);</pre>
+ *
+ * In this case, {@code collection} was not modified as a result of the
+ * {@code add()} call, and the test will fail because the number of
+ * occurrences of {@code existingElement} is unchanged.
+ *
+ * @param elements expected additional contents of {@link #container}
+ */
+ protected final void expectAdded(E... elements) {
+ List<E> expected = Helpers.copyToList(getSampleElements());
+ expected.addAll(Arrays.asList(elements));
+ expectContents(expected);
+ }
+
+ protected final void expectAdded(int index, E... elements) {
+ expectAdded(index, Arrays.asList(elements));
+ }
+
+ protected final void expectAdded(int index, Collection<E> elements) {
+ List<E> expected = Helpers.copyToList(getSampleElements());
+ expected.addAll(index, elements);
+ expectContents(expected);
+ }
+
+ /*
+ * TODO(Chris Povirk): AbstractListTester could override this to check
+ * indexOf(), and here we could iterate over all elements to verify absence
+ */
+ protected void expectMissing(E... elements) {
+ for (E element : elements) {
+ assertFalse("Should not contain " + element,
+ actualContents().contains(element));
+ }
+ }
+
+ protected E[] createSamplesArray() {
+ E[] array = getSubjectGenerator().createArray(getNumElements());
+ getSampleElements().toArray(array);
+ return array;
+ }
+
+ public static class ArrayWithDuplicate<E> {
+ public final E[] elements;
+ public final E duplicate;
+
+ private ArrayWithDuplicate(E[] elements, E duplicate) {
+ this.elements = elements;
+ this.duplicate = duplicate;
+ }
+ }
+
+ /**
+ * @return an array of the proper size with a duplicate element.
+ * The size must be at least three.
+ */
+ protected ArrayWithDuplicate<E> createArrayWithDuplicateElement() {
+ E[] elements = createSamplesArray();
+ E duplicate = elements[(elements.length / 2) - 1];
+ elements[(elements.length / 2) + 1] = duplicate;
+ return new ArrayWithDuplicate<E>(elements, duplicate);
+ }
+
+ // Helper methods to improve readability of derived classes
+
+ protected int getNumElements() {
+ return getSubjectGenerator().getCollectionSize().getNumElements();
+ }
+
+ protected Collection<E> getSampleElements(int howMany) {
+ return getSubjectGenerator().getSampleElements(howMany);
+ }
+
+ protected Collection<E> getSampleElements() {
+ return getSampleElements(getNumElements());
+ }
+
+ protected List<E> getOrderedElements() {
+ List<E> list = new ArrayList<E>();
+ for (E e : getSubjectGenerator().order(
+ new ArrayList<E>(getSampleElements()))) {
+ list.add(e);
+ }
+ return Collections.unmodifiableList(list);
+ }
+
+ /**
+ * @return a suitable location for a null element, to use when initializing
+ * containers for tests that involve a null element being present.
+ */
+ protected int getNullLocation() {
+ return getNumElements() / 2;
+ }
+
+ @SuppressWarnings("unchecked")
+ protected MinimalCollection<E> createDisjointCollection() {
+ return MinimalCollection.of(samples.e3, samples.e4);
+ }
+
+ @SuppressWarnings("unchecked")
+ protected MinimalCollection<E> emptyCollection() {
+ return MinimalCollection.<E>of();
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/AbstractIteratorTester.java b/testfw/com/google/common/collect/testing/AbstractIteratorTester.java
new file mode 100644
index 0000000..70a2120
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/AbstractIteratorTester.java
@@ -0,0 +1,636 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.fail;
+import junit.framework.AssertionFailedError;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.Stack;
+
+/**
+ * Most of the logic for {@link IteratorTester} and {@link ListIteratorTester}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @param <E> the type of element returned by the iterator
+ * @param <I> the type of the iterator ({@link Iterator} or
+ * {@link ListIterator})
+ *
+ * @author Kevin Bourrillion
+ * @author Chris Povirk
+ */
+abstract class AbstractIteratorTester<E, I extends Iterator<E>> {
+ private boolean whenNextThrowsExceptionStopTestingCallsToRemove;
+ private boolean whenAddThrowsExceptionStopTesting;
+
+ /**
+ * Don't verify iterator behavior on remove() after a call to next()
+ * throws an exception.
+ *
+ * <p>JDK 6 currently has a bug where some iterators get into a undefined
+ * state when next() throws a NoSuchElementException. The correct
+ * behavior is for remove() to remove the last element returned by
+ * next, even if a subsequent next() call threw an exception; however
+ * JDK 6's HashMap and related classes throw an IllegalStateException
+ * in this case.
+ *
+ * <p>Calling this method causes the iterator tester to skip testing
+ * any remove() in a stimulus sequence after the reference iterator
+ * throws an exception in next().
+ *
+ * <p>TODO: remove this once we're on 6u5, which has the fix.
+ *
+ * @see <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6529795">
+ * Sun Java Bug 6529795</a>
+ */
+ public void ignoreSunJavaBug6529795() {
+ whenNextThrowsExceptionStopTestingCallsToRemove = true;
+ }
+
+ /**
+ * Don't verify iterator behavior after a call to add() throws an exception.
+ *
+ * <p>AbstractList's ListIterator implementation gets into a undefined state
+ * when add() throws an UnsupportedOperationException. Instead of leaving the
+ * iterator's position unmodified, it increments it, skipping an element or
+ * even moving past the end of the list.
+ *
+ * <p>Calling this method causes the iterator tester to skip testing in a
+ * stimulus sequence after the iterator under test throws an exception in
+ * add().
+ *
+ * <p>TODO: remove this once the behavior is fixed.
+ *
+ * @see <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6533203">
+ * Sun Java Bug 6533203</a>
+ */
+ public void stopTestingWhenAddThrowsException() {
+ whenAddThrowsExceptionStopTesting = true;
+ }
+
+ private Stimulus<? super I>[] stimuli;
+ private final Iterator<E> elementsToInsert;
+ private final Set<IteratorFeature> features;
+ private final List<E> expectedElements;
+ private final int startIndex;
+ private final KnownOrder knownOrder;
+
+ /**
+ * Meta-exception thrown by
+ * {@link AbstractIteratorTester.MultiExceptionListIterator} instead of
+ * throwing any particular exception type.
+ */
+ // This class is acessible but not supported in GWT.
+ private static final class PermittedMetaException extends RuntimeException {
+ final Set<? extends Class<? extends RuntimeException>> exceptionClasses;
+
+ PermittedMetaException(
+ Set<? extends Class<? extends RuntimeException>> exceptionClasses) {
+ super("one of " + exceptionClasses);
+ this.exceptionClasses = exceptionClasses;
+ }
+
+ PermittedMetaException(Class<? extends RuntimeException> exceptionClass) {
+ this(Collections.singleton(exceptionClass));
+ }
+
+ // It's not supported In GWT, it always returns true.
+ boolean isPermitted(RuntimeException exception) {
+ for (Class<? extends RuntimeException> clazz : exceptionClasses) {
+ if (clazz.isInstance(exception)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ // It's not supported in GWT, it always passes.
+ void assertPermitted(RuntimeException exception) {
+ if (!isPermitted(exception)) {
+ // TODO(Chris Povirk): use simple class names
+ String message = "Exception " + exception.getClass()
+ + " was thrown; expected " + this;
+ Helpers.fail(exception, message);
+ }
+ }
+
+ @Override public String toString() {
+ return getMessage();
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ private static final class UnknownElementException extends RuntimeException {
+ private UnknownElementException(Collection<?> expected, Object actual) {
+ super("Returned value '"
+ + actual + "' not found. Remaining elements: " + expected);
+ }
+
+ private static final long serialVersionUID = 0;
+ }
+
+ /**
+ * Quasi-implementation of {@link ListIterator} that works from a list of
+ * elements and a set of features to support (from the enclosing
+ * {@link AbstractIteratorTester} instance). Instead of throwing exceptions
+ * like {@link NoSuchElementException} at the appropriate times, it throws
+ * {@link PermittedMetaException} instances, which wrap a set of all
+ * exceptions that the iterator could throw during the invocation of that
+ * method. This is necessary because, e.g., a call to
+ * {@code iterator().remove()} of an unmodifiable list could throw either
+ * {@link IllegalStateException} or {@link UnsupportedOperationException}.
+ * Note that iterator implementations should always throw one of the
+ * exceptions in a {@code PermittedExceptions} instance, since
+ * {@code PermittedExceptions} is thrown only when a method call is invalid.
+ *
+ * <p>This class is accessible but not supported in GWT as it references
+ * {@link PermittedMetaException}.
+ */
+ protected final class MultiExceptionListIterator implements ListIterator<E> {
+ // TODO(Chris Povirk): track seen elements when order isn't guaranteed
+ // TODO(Chris Povirk): verify contents afterward
+ // TODO(Chris Povirk): something shiny and new instead of Stack
+ // TODO(Chris Povirk): test whether null is supported (create a Feature)
+ /**
+ * The elements to be returned by future calls to {@code next()}, with the
+ * first at the top of the stack.
+ */
+ final Stack<E> nextElements = new Stack<E>();
+ /**
+ * The elements to be returned by future calls to {@code previous()}, with
+ * the first at the top of the stack.
+ */
+ final Stack<E> previousElements = new Stack<E>();
+ /**
+ * {@link #nextElements} if {@code next()} was called more recently then
+ * {@code previous}, {@link #previousElements} if the reverse is true, or --
+ * overriding both of these -- {@code null} if {@code remove()} or
+ * {@code add()} has been called more recently than either. We use this to
+ * determine which stack to pop from on a call to {@code remove()} (or to
+ * pop from and push to on a call to {@code set()}.
+ */
+ Stack<E> stackWithLastReturnedElementAtTop = null;
+
+ MultiExceptionListIterator(List<E> expectedElements) {
+ Helpers.addAll(nextElements, Helpers.reverse(expectedElements));
+ for (int i = 0; i < startIndex; i++) {
+ previousElements.push(nextElements.pop());
+ }
+ }
+
+ public void add(E e) {
+ if (!features.contains(IteratorFeature.SUPPORTS_ADD)) {
+ throw new PermittedMetaException(UnsupportedOperationException.class);
+ }
+
+ previousElements.push(e);
+ stackWithLastReturnedElementAtTop = null;
+ }
+
+ public boolean hasNext() {
+ return !nextElements.isEmpty();
+ }
+
+ public boolean hasPrevious() {
+ return !previousElements.isEmpty();
+ }
+
+ public E next() {
+ return transferElement(nextElements, previousElements);
+ }
+
+ public int nextIndex() {
+ return previousElements.size();
+ }
+
+ public E previous() {
+ return transferElement(previousElements, nextElements);
+ }
+
+ public int previousIndex() {
+ return nextIndex() - 1;
+ }
+
+ public void remove() {
+ throwIfInvalid(IteratorFeature.SUPPORTS_REMOVE);
+
+ stackWithLastReturnedElementAtTop.pop();
+ stackWithLastReturnedElementAtTop = null;
+ }
+
+ public void set(E e) {
+ throwIfInvalid(IteratorFeature.SUPPORTS_SET);
+
+ stackWithLastReturnedElementAtTop.pop();
+ stackWithLastReturnedElementAtTop.push(e);
+ }
+
+ /**
+ * Moves the given element from its current position in
+ * {@link #nextElements} to the top of the stack so that it is returned by
+ * the next call to {@link Iterator#next()}. If the element is not in
+ * {@link #nextElements}, this method throws an
+ * {@link UnknownElementException}.
+ *
+ * <p>This method is used when testing iterators without a known ordering.
+ * We poll the target iterator's next element and pass it to the reference
+ * iterator through this method so it can return the same element. This
+ * enables the assertion to pass and the reference iterator to properly
+ * update its state.
+ */
+ void promoteToNext(E e) {
+ if (nextElements.remove(e)) {
+ nextElements.push(e);
+ } else {
+ throw new UnknownElementException(nextElements, e);
+ }
+ }
+
+ private E transferElement(Stack<E> source, Stack<E> destination) {
+ if (source.isEmpty()) {
+ throw new PermittedMetaException(NoSuchElementException.class);
+ }
+
+ destination.push(source.pop());
+ stackWithLastReturnedElementAtTop = destination;
+ return destination.peek();
+ }
+
+ private void throwIfInvalid(IteratorFeature methodFeature) {
+ Set<Class<? extends RuntimeException>> exceptions
+ = new HashSet<Class<? extends RuntimeException>>();
+
+ if (!features.contains(methodFeature)) {
+ exceptions.add(UnsupportedOperationException.class);
+ }
+
+ if (stackWithLastReturnedElementAtTop == null) {
+ exceptions.add(IllegalStateException.class);
+ }
+
+ if (!exceptions.isEmpty()) {
+ throw new PermittedMetaException(exceptions);
+ }
+ }
+
+ private List<E> getElements() {
+ List<E> elements = new ArrayList<E>();
+ Helpers.addAll(elements, previousElements);
+ Helpers.addAll(elements, Helpers.reverse(nextElements));
+ return elements;
+ }
+ }
+
+ public enum KnownOrder { KNOWN_ORDER, UNKNOWN_ORDER }
+
+ @SuppressWarnings("unchecked") // creating array of generic class Stimulus
+ AbstractIteratorTester(int steps, Iterable<E> elementsToInsertIterable,
+ Iterable<? extends IteratorFeature> features,
+ Iterable<E> expectedElements, KnownOrder knownOrder, int startIndex) {
+ // periodically we should manually try (steps * 3 / 2) here; all tests but
+ // one should still pass (testVerifyGetsCalled()).
+ stimuli = new Stimulus[steps];
+ if (!elementsToInsertIterable.iterator().hasNext()) {
+ throw new IllegalArgumentException();
+ }
+ elementsToInsert = Helpers.cycle(elementsToInsertIterable);
+ this.features = Helpers.copyToSet(features);
+ this.expectedElements = Helpers.copyToList(expectedElements);
+ this.knownOrder = knownOrder;
+ this.startIndex = startIndex;
+ }
+
+ /**
+ * I'd like to make this a parameter to the constructor, but I can't because
+ * the stimulus instances refer to {@code this}.
+ */
+ protected abstract Iterable<? extends Stimulus<? super I>>
+ getStimulusValues();
+
+ /**
+ * Returns a new target iterator each time it's called. This is the iterator
+ * you are trying to test. This must return an Iterator that returns the
+ * expected elements passed to the constructor in the given order. Warning: it
+ * is not enough to simply pull multiple iterators from the same source
+ * Iterable, unless that Iterator is unmodifiable.
+ */
+ protected abstract I newTargetIterator();
+
+ /**
+ * Override this to verify anything after running a list of Stimuli.
+ *
+ * <p>For example, verify that calls to remove() actually removed
+ * the correct elements.
+ *
+ * @param elements the expected elements passed to the constructor, as mutated
+ * by {@code remove()}, {@code set()}, and {@code add()} calls
+ */
+ protected void verify(List<E> elements) {}
+
+ /**
+ * Executes the test.
+ */
+ public final void test() throws Exception {
+ try {
+ recurse(0);
+ } catch (Exception e) {
+ throw new Exception(Arrays.toString(stimuli), e);
+ }
+ }
+
+ private void recurse(int level) throws Exception {
+ // We're going to reuse the stimuli array 3^steps times by overwriting it
+ // in a recursive loop. Sneaky.
+ if (level == stimuli.length) {
+ // We've filled the array.
+ compareResultsForThisListOfStimuli();
+ } else {
+ // Keep recursing to fill the array.
+ for (Stimulus<? super I> stimulus : getStimulusValues()) {
+ stimuli[level] = stimulus;
+ recurse(level + 1);
+ }
+ }
+ }
+
+ private void compareResultsForThisListOfStimuli() {
+ MultiExceptionListIterator reference =
+ new MultiExceptionListIterator(expectedElements);
+ I target = newTargetIterator();
+ boolean shouldStopTestingCallsToRemove = false;
+ for (int i = 0; i < stimuli.length; i++) {
+ Stimulus<? super I> stimulus = stimuli[i];
+ if (stimulus.equals(remove) && shouldStopTestingCallsToRemove) {
+ break;
+ }
+ try {
+ boolean threwException = stimulus.executeAndCompare(reference, target);
+ if (threwException
+ && stimulus.equals(next)
+ && whenNextThrowsExceptionStopTestingCallsToRemove) {
+ shouldStopTestingCallsToRemove = true;
+ }
+ if (threwException
+ && stimulus.equals(add)
+ && whenAddThrowsExceptionStopTesting) {
+ break;
+ }
+ List<E> elements = reference.getElements();
+ verify(elements);
+ } catch (AssertionFailedError cause) {
+ Helpers.fail(cause,
+ "failed with stimuli " + subListCopy(stimuli, i + 1));
+ }
+ }
+ }
+
+ private static List<Object> subListCopy(Object[] source, int size) {
+ final Object[] copy = new Object[size];
+ System.arraycopy(source, 0, copy, 0, size);
+ return Arrays.asList(copy);
+ }
+
+ private interface IteratorOperation {
+ Object execute(Iterator<?> iterator);
+ }
+
+ /**
+ * Apply this method to both iterators and return normally only if both
+ * produce the same response.
+ *
+ * @return {@code true} if an exception was thrown by the iterators.
+ *
+ * @see Stimulus#executeAndCompare(ListIterator, Iterator)
+ */
+ private <T extends Iterator<E>> boolean internalExecuteAndCompare(
+ T reference, T target, IteratorOperation method)
+ throws AssertionFailedError {
+
+ Object referenceReturnValue = null;
+ PermittedMetaException referenceException = null;
+ Object targetReturnValue = null;
+ RuntimeException targetException = null;
+
+ try {
+ targetReturnValue = method.execute(target);
+ } catch (RuntimeException e) {
+ targetException = e;
+ }
+
+ try {
+ if (method == NEXT_METHOD && targetException == null
+ && knownOrder == KnownOrder.UNKNOWN_ORDER) {
+ /*
+ * We already know the iterator is an Iterator<E>, and now we know that
+ * we called next(), so the returned element must be of type E.
+ */
+ @SuppressWarnings("unchecked")
+ E targetReturnValueFromNext = (E) targetReturnValue;
+ ((MultiExceptionListIterator) reference)
+ .promoteToNext(targetReturnValueFromNext);
+ }
+
+ referenceReturnValue = method.execute(reference);
+ } catch (PermittedMetaException e) {
+ referenceException = e;
+ } catch (UnknownElementException e) {
+ Helpers.fail(e, e.getMessage());
+ }
+
+ if (referenceException == null) {
+ if (targetException != null) {
+ Helpers.fail(targetException,
+ "Target threw exception when reference did not");
+ }
+
+ /*
+ * Reference iterator returned a value, so we should expect the
+ * same value from the target
+ */
+ assertEquals(referenceReturnValue, targetReturnValue);
+
+ return false;
+ }
+
+ if (targetException == null) {
+ fail("Target failed to throw " + referenceException);
+ }
+
+ /*
+ * Reference iterator threw an exception, so we should expect an acceptable
+ * exception from the target.
+ */
+ referenceException.assertPermitted(targetException);
+
+ return true;
+ }
+
+ private static final IteratorOperation REMOVE_METHOD =
+ new IteratorOperation() {
+ public Object execute(Iterator<?> iterator) {
+ iterator.remove();
+ return null;
+ }
+ };
+
+ private static final IteratorOperation NEXT_METHOD =
+ new IteratorOperation() {
+ public Object execute(Iterator<?> iterator) {
+ return iterator.next();
+ }
+ };
+
+ private static final IteratorOperation PREVIOUS_METHOD =
+ new IteratorOperation() {
+ public Object execute(Iterator<?> iterator) {
+ return ((ListIterator<?>) iterator).previous();
+ }
+ };
+
+ private final IteratorOperation newAddMethod() {
+ final Object toInsert = elementsToInsert.next();
+ return new IteratorOperation() {
+ public Object execute(Iterator<?> iterator) {
+ @SuppressWarnings("unchecked")
+ ListIterator<Object> rawIterator = (ListIterator<Object>) iterator;
+ rawIterator.add(toInsert);
+ return null;
+ }
+ };
+ }
+
+ private final IteratorOperation newSetMethod() {
+ final E toInsert = elementsToInsert.next();
+ return new IteratorOperation() {
+ public Object execute(Iterator<?> iterator) {
+ @SuppressWarnings("unchecked")
+ ListIterator<E> li = (ListIterator<E>) iterator;
+ li.set(toInsert);
+ return null;
+ }
+ };
+ }
+
+ abstract class Stimulus<T extends Iterator<?>> {
+ private final String toString;
+
+ protected Stimulus(String toString) {
+ this.toString = toString;
+ }
+
+ /**
+ * Send this stimulus to both iterators and return normally only if both
+ * produce the same response.
+ *
+ * @return {@code true} if an exception was thrown by the iterators.
+ */
+ abstract boolean executeAndCompare(ListIterator<E> reference, T target);
+
+ @Override public String toString() {
+ return toString;
+ }
+ }
+
+ Stimulus<Iterator<E>> hasNext = new Stimulus<Iterator<E>>("hasNext") {
+ @Override boolean
+ executeAndCompare(ListIterator<E> reference, Iterator<E> target) {
+ // return only if both are true or both are false
+ assertEquals(reference.hasNext(), target.hasNext());
+ return false;
+ }
+ };
+ Stimulus<Iterator<E>> next = new Stimulus<Iterator<E>>("next") {
+ @Override boolean
+ executeAndCompare(ListIterator<E> reference, Iterator<E> target) {
+ return internalExecuteAndCompare(reference, target, NEXT_METHOD);
+ }
+ };
+ Stimulus<Iterator<E>> remove = new Stimulus<Iterator<E>>("remove") {
+ @Override boolean
+ executeAndCompare(ListIterator<E> reference, Iterator<E> target) {
+ return internalExecuteAndCompare(reference, target, REMOVE_METHOD);
+ }
+ };
+
+ @SuppressWarnings("unchecked")
+ List<Stimulus<Iterator<E>>> iteratorStimuli() {
+ return Arrays.asList(hasNext, next, remove);
+ }
+
+ Stimulus<ListIterator<E>> hasPrevious =
+ new Stimulus<ListIterator<E>>("hasPrevious") {
+ @Override boolean executeAndCompare(
+ ListIterator<E> reference, ListIterator<E> target) {
+ // return only if both are true or both are false
+ assertEquals(reference.hasPrevious(), target.hasPrevious());
+ return false;
+ }
+ };
+ Stimulus<ListIterator<E>> nextIndex =
+ new Stimulus<ListIterator<E>>("nextIndex") {
+ @Override boolean executeAndCompare(
+ ListIterator<E> reference, ListIterator<E> target) {
+ assertEquals(reference.nextIndex(), target.nextIndex());
+ return false;
+ }
+ };
+ Stimulus<ListIterator<E>> previousIndex =
+ new Stimulus<ListIterator<E>>("previousIndex") {
+ @Override boolean executeAndCompare(
+ ListIterator<E> reference, ListIterator<E> target) {
+ assertEquals(reference.previousIndex(), target.previousIndex());
+ return false;
+ }
+ };
+ Stimulus<ListIterator<E>> previous =
+ new Stimulus<ListIterator<E>>("previous") {
+ @Override boolean executeAndCompare(
+ ListIterator<E> reference, ListIterator<E> target) {
+ return internalExecuteAndCompare(reference, target, PREVIOUS_METHOD);
+ }
+ };
+ Stimulus<ListIterator<E>> add = new Stimulus<ListIterator<E>>("add") {
+ @Override boolean executeAndCompare(
+ ListIterator<E> reference, ListIterator<E> target) {
+ return internalExecuteAndCompare(reference, target, newAddMethod());
+ }
+ };
+ Stimulus<ListIterator<E>> set = new Stimulus<ListIterator<E>>("set") {
+ @Override boolean executeAndCompare(
+ ListIterator<E> reference, ListIterator<E> target) {
+ return internalExecuteAndCompare(reference, target, newSetMethod());
+ }
+ };
+
+ @SuppressWarnings("unchecked")
+ List<Stimulus<ListIterator<E>>> listIteratorStimuli() {
+ return Arrays.asList(
+ hasPrevious, nextIndex, previousIndex, previous, add, set);
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/AbstractMapTester.java b/testfw/com/google/common/collect/testing/AbstractMapTester.java
new file mode 100644
index 0000000..9216a8c
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/AbstractMapTester.java
@@ -0,0 +1,227 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * Base class for map testers.
+ *
+ * @param <K> the key type of the map to be tested.
+ * @param <V> the value type of the map to be tested.
+ *
+ * @author George van den Driessche
+ *
+ * TODO(George van den Driessche): see how much of this is actually needed once
+ * Map testers are written. (It was cloned from AbstractCollectionTester.)
+ */
+public abstract class AbstractMapTester<K, V> extends
+ AbstractContainerTester<Map<K, V>, Map.Entry<K, V>> {
+ protected Map<K, V> getMap() {
+ return container;
+ }
+
+ @Override protected void setUp() throws Exception {
+ super.setUp();
+ samples = this.getSubjectGenerator().samples();
+ resetMap();
+ }
+
+ @Override protected Collection<Map.Entry<K, V>> actualContents() {
+ return getMap().entrySet();
+ }
+
+ /** @see AbstractContainerTester#resetContainer() */
+ protected void resetMap() {
+ resetContainer();
+ }
+
+ protected void expectMissingKeys(K... elements) {
+ for (K element : elements) {
+ assertFalse("Should not contain key " + element,
+ getMap().containsKey(element));
+ }
+ }
+
+ protected void expectMissingValues(V... elements) {
+ for (V element : elements) {
+ assertFalse("Should not contain value " + element,
+ getMap().containsValue(element));
+ }
+ }
+
+ /**
+ * @return an array of the proper size with {@code null} as the key of the
+ * middle element.
+ */
+ protected Map.Entry<K, V>[] createArrayWithNullKey() {
+ Map.Entry<K, V>[] array = createSamplesArray();
+ final int nullKeyLocation = getNullLocation();
+ final Map.Entry<K, V> oldEntry = array[nullKeyLocation];
+ array[nullKeyLocation] = entry(null, oldEntry.getValue());
+ return array;
+ }
+
+ protected V getValueForNullKey() {
+ return getEntryNullReplaces().getValue();
+ }
+
+ protected K getKeyForNullValue() {
+ return getEntryNullReplaces().getKey();
+ }
+
+ private Entry<K, V> getEntryNullReplaces() {
+ Iterator<Entry<K, V>> entries = getSampleElements().iterator();
+ for (int i = 0; i < getNullLocation(); i++) {
+ entries.next();
+ }
+ return entries.next();
+ }
+
+ /**
+ * @return an array of the proper size with {@code null} as the value of the
+ * middle element.
+ */
+ protected Map.Entry<K, V>[] createArrayWithNullValue() {
+ Map.Entry<K, V>[] array = createSamplesArray();
+ final int nullValueLocation = getNullLocation();
+ final Map.Entry<K, V> oldEntry = array[nullValueLocation];
+ array[nullValueLocation] = entry(oldEntry.getKey(), null);
+ return array;
+ }
+
+ protected void initMapWithNullKey() {
+ resetMap(createArrayWithNullKey());
+ }
+
+ protected void initMapWithNullValue() {
+ resetMap(createArrayWithNullValue());
+ }
+
+ /**
+ * Equivalent to {@link #expectMissingKeys(Object[]) expectMissingKeys}
+ * {@code (null)}
+ * except that the call to {@code contains(null)} is permitted to throw a
+ * {@code NullPointerException}.
+ * @param message message to use upon assertion failure
+ */
+ protected void expectNullKeyMissingWhenNullKeysUnsupported(String message) {
+ try {
+ assertFalse(message, getMap().containsKey(null));
+ } catch (NullPointerException tolerated) {
+ // Tolerated
+ }
+ }
+
+ /**
+ * Equivalent to {@link #expectMissingValues(Object[]) expectMissingValues}
+ * {@code (null)}
+ * except that the call to {@code contains(null)} is permitted to throw a
+ * {@code NullPointerException}.
+ * @param message message to use upon assertion failure
+ */
+ protected void expectNullValueMissingWhenNullValuesUnsupported(
+ String message) {
+ try {
+ assertFalse(message, getMap().containsValue(null));
+ } catch (NullPointerException tolerated) {
+ // Tolerated
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override protected MinimalCollection<Map.Entry<K, V>>
+ createDisjointCollection() {
+ return MinimalCollection.of(samples.e3, samples.e4);
+ }
+
+ protected int getNumEntries() {
+ return getNumElements();
+ }
+
+ protected Collection<Map.Entry<K, V>> getSampleEntries(int howMany) {
+ return getSampleElements(howMany);
+ }
+
+ protected Collection<Map.Entry<K, V>> getSampleEntries() {
+ return getSampleElements();
+ }
+
+ @Override protected void expectMissing(Entry<K, V>... entries) {
+ for (Entry<K, V> entry : entries) {
+ assertFalse("Should not contain entry " + entry,
+ actualContents().contains(entry));
+ assertFalse("Should not contain key " + entry.getKey(),
+ getMap().containsKey(entry.getKey()));
+ assertFalse("Should not contain value " + entry.getValue(),
+ getMap().containsValue(entry.getValue()));
+ assertNull("Should not return a mapping for key " + entry.getKey(),
+ getMap().get(entry.getKey()));
+ }
+ }
+
+ // This one-liner saves us from some ugly casts
+ protected Entry<K, V> entry(K key, V value) {
+ return Helpers.mapEntry(key, value);
+ }
+
+ @Override protected void expectContents(Collection<Entry<K, V>> expected) {
+ // TODO: move this to invariant checks once the appropriate hook exists?
+ super.expectContents(expected);
+ for (Entry<K, V> entry : expected) {
+ assertEquals("Wrong value for key " + entry.getKey(),
+ entry.getValue(), getMap().get(entry.getKey()));
+ }
+ }
+
+ protected final void expectReplacement(Entry<K, V> newEntry) {
+ List<Entry<K, V>> expected = Helpers.copyToList(getSampleElements());
+ replaceValue(expected, newEntry);
+ expectContents(expected);
+ }
+
+ private void replaceValue(List<Entry<K, V>> expected, Entry<K, V> newEntry) {
+ for (ListIterator<Entry<K, V>> i = expected.listIterator(); i.hasNext();) {
+ if (Helpers.equal(i.next().getKey(), newEntry.getKey())) {
+ i.set(newEntry);
+ return;
+ }
+ }
+
+ throw new IllegalArgumentException(String.format(
+ "key %s not found in entries %s", newEntry.getKey(), expected));
+ }
+
+ /**
+ * Wrapper for {@link Map#get(Object)} that forces the caller to pass in a key
+ * of the same type as the map. Besides being slightly shorter than code that
+ * uses {@link #getMap()}, it also ensures that callers don't pass an
+ * {@link Entry} by mistake.
+ */
+ protected V get(K key) {
+ return getMap().get(key);
+ }
+
+ protected void resetMap(Entry<K, V>[] entries) {
+ resetContainer(getSubjectGenerator().create((Object[]) entries));
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/AbstractTester.java b/testfw/com/google/common/collect/testing/AbstractTester.java
new file mode 100644
index 0000000..c1985b6
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/AbstractTester.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import junit.framework.TestCase;
+
+import java.lang.reflect.Method;
+
+/**
+ * This abstract base class for testers allows the framework to inject needed
+ * information after JUnit constructs the instances.
+ *
+ * @param <G> the type of the test generator required by this tester. An
+ * instance of G should somehow provide an instance of the class under test,
+ * plus any other information required to parameterize the test.
+ *
+ * @author George van den Driessche
+ */
+public class AbstractTester<G> extends TestCase {
+ private G subjectGenerator;
+ private String suiteName;
+
+ protected final void init(G subjectGenerator, String suiteName) {
+ this.subjectGenerator = subjectGenerator;
+ this.suiteName = suiteName;
+ }
+
+ public G getSubjectGenerator() {
+ return subjectGenerator;
+ }
+
+ /**
+ * @return the method to be invoked by this test instance
+ * @throws NoSuchMethodException if this test's name does not
+ * correspond to a method
+ */
+ public Method getTestMethod() throws NoSuchMethodException {
+ return getClass().getMethod(super.getName());
+ }
+
+ @Override public String getName() {
+ return String.format("%s[%s]", super.getName(), suiteName);
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/AnEnum.java b/testfw/com/google/common/collect/testing/AnEnum.java
new file mode 100644
index 0000000..d2ace15
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/AnEnum.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+/**
+ * A sample enumerated type we use for testing.
+ *
+ * @author Kevin Bourrillion
+ */
+public enum AnEnum {
+ A, B, C, D, E, F
+}
diff --git a/testfw/com/google/common/collect/testing/CollectionTestSuiteBuilder.java b/testfw/com/google/common/collect/testing/CollectionTestSuiteBuilder.java
new file mode 100644
index 0000000..01558bd
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/CollectionTestSuiteBuilder.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+/**
+ * Concrete instantiation of {@link AbstractCollectionTestSuiteBuilder} for
+ * testing collections that do not have a more specific tester like
+ * {@link ListTestSuiteBuilder} or {@link SetTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ */
+public class CollectionTestSuiteBuilder<E>
+ extends AbstractCollectionTestSuiteBuilder<
+ CollectionTestSuiteBuilder<E>, E> {
+ public static <E> CollectionTestSuiteBuilder<E> using(
+ TestCollectionGenerator<E> generator) {
+ return new CollectionTestSuiteBuilder<E>().usingGenerator(generator);
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/ConcurrentMapInterfaceTest.java b/testfw/com/google/common/collect/testing/ConcurrentMapInterfaceTest.java
new file mode 100644
index 0000000..bd8241c
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/ConcurrentMapInterfaceTest.java
@@ -0,0 +1,840 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * Tests representing the contract of {@link ConcurrentMap}. Concrete
+ * subclasses of this base class test conformance of concrete
+ * {@link ConcurrentMap} subclasses to that contract.
+ *
+ * <p>The tests in this class for null keys and values only check maps for
+ * which null keys and values are not allowed. There are currently no
+ * {@link ConcurrentMap} implementations that support nulls.
+ *
+ * @author Jared Levy
+ */
+public abstract class ConcurrentMapInterfaceTest<K, V>
+ extends MapInterfaceTest<K, V> {
+
+ protected ConcurrentMapInterfaceTest(boolean allowsNullKeys,
+ boolean allowsNullValues, boolean supportsPut, boolean supportsRemove,
+ boolean supportsClear) {
+ super(allowsNullKeys, allowsNullValues, supportsPut, supportsRemove,
+ supportsClear);
+ }
+
+ /**
+ * Creates a new value that is not expected to be found in
+ * {@link #makePopulatedMap()} and differs from the value returned by
+ * {@link #getValueNotInPopulatedMap()}.
+ *
+ * @return a value
+ * @throws UnsupportedOperationException if it's not possible to make a value
+ * that will not be found in the map
+ */
+ protected abstract V getSecondValueNotInPopulatedMap()
+ throws UnsupportedOperationException;
+
+ @Override protected abstract ConcurrentMap<K, V> makeEmptyMap()
+ throws UnsupportedOperationException;
+
+ @Override protected abstract ConcurrentMap<K, V> makePopulatedMap()
+ throws UnsupportedOperationException;
+
+ @Override protected ConcurrentMap<K, V> makeEitherMap() {
+ try {
+ return makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return makeEmptyMap();
+ }
+ }
+
+ public void testPutIfAbsentNewKey() {
+ final ConcurrentMap<K, V> map;
+ final K keyToPut;
+ final V valueToPut;
+ try {
+ map = makeEitherMap();
+ keyToPut = getKeyNotInPopulatedMap();
+ valueToPut = getValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ if (supportsPut) {
+ int initialSize = map.size();
+ V oldValue = map.putIfAbsent(keyToPut, valueToPut);
+ assertEquals(valueToPut, map.get(keyToPut));
+ assertTrue(map.containsKey(keyToPut));
+ assertTrue(map.containsValue(valueToPut));
+ assertEquals(initialSize + 1, map.size());
+ assertNull(oldValue);
+ } else {
+ try {
+ map.putIfAbsent(keyToPut, valueToPut);
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testPutIfAbsentExistingKey() {
+ final ConcurrentMap<K, V> map;
+ final K keyToPut;
+ final V valueToPut;
+ try {
+ map = makePopulatedMap();
+ valueToPut = getValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ keyToPut = map.keySet().iterator().next();
+ if (supportsPut) {
+ V oldValue = map.get(keyToPut);
+ int initialSize = map.size();
+ assertEquals(oldValue, map.putIfAbsent(keyToPut, valueToPut));
+ assertEquals(oldValue, map.get(keyToPut));
+ assertTrue(map.containsKey(keyToPut));
+ assertTrue(map.containsValue(oldValue));
+ assertFalse(map.containsValue(valueToPut));
+ assertEquals(initialSize, map.size());
+ } else {
+ try {
+ map.putIfAbsent(keyToPut, valueToPut);
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testPutIfAbsentNullKey() {
+ if (allowsNullKeys) {
+ return; // Not yet implemented
+ }
+ final ConcurrentMap<K, V> map;
+ final V valueToPut;
+ try {
+ map = makeEitherMap();
+ valueToPut = getValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ int initialSize = map.size();
+ if (supportsPut) {
+ try {
+ map.putIfAbsent(null, valueToPut);
+ fail("Expected NullPointerException");
+ } catch (NullPointerException e) {
+ // Expected.
+ }
+ } else {
+ try {
+ map.putIfAbsent(null, valueToPut);
+ fail("Expected UnsupportedOperationException or NullPointerException");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ } catch (NullPointerException e) {
+ // Expected.
+ }
+ }
+ assertEquals(initialSize, map.size());
+ assertInvariants(map);
+ }
+
+ public void testPutIfAbsentNewKeyNullValue() {
+ if (allowsNullValues) {
+ return; // Not yet implemented
+ }
+ final ConcurrentMap<K, V> map;
+ final K keyToPut;
+ try {
+ map = makeEitherMap();
+ keyToPut = getKeyNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ int initialSize = map.size();
+ if (supportsPut) {
+ try {
+ map.putIfAbsent(keyToPut, null);
+ fail("Expected NullPointerException");
+ } catch (NullPointerException e) {
+ // Expected.
+ }
+ } else {
+ try {
+ map.putIfAbsent(keyToPut, null);
+ fail("Expected UnsupportedOperationException or NullPointerException");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ } catch (NullPointerException e) {
+ // Expected.
+ }
+ }
+ assertEquals(initialSize, map.size());
+ assertInvariants(map);
+ }
+
+ public void testPutIfAbsentExistingKeyNullValue() {
+ if (allowsNullValues) {
+ return; // Not yet implemented
+ }
+ final ConcurrentMap<K, V> map;
+ final K keyToPut;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ keyToPut = map.keySet().iterator().next();
+ int initialSize = map.size();
+ if (supportsPut) {
+ try {
+ assertNull(map.putIfAbsent(keyToPut, null));
+ } catch (NullPointerException e) {
+ // Optional.
+ }
+ } else {
+ try {
+ map.putIfAbsent(keyToPut, null);
+ fail("Expected UnsupportedOperationException or NullPointerException");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ } catch (NullPointerException e) {
+ // Expected.
+ }
+ }
+ assertEquals(initialSize, map.size());
+ assertInvariants(map);
+ }
+
+ public void testRemoveKeyValueExisting() {
+ final ConcurrentMap<K, V> map;
+ final K keyToRemove;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ keyToRemove = map.keySet().iterator().next();
+ V oldValue = map.get(keyToRemove);
+ if (supportsRemove) {
+ int initialSize = map.size();
+ assertTrue(map.remove(keyToRemove, oldValue));
+ assertFalse(map.containsKey(keyToRemove));
+ assertEquals(initialSize - 1, map.size());
+ } else {
+ try {
+ map.remove(keyToRemove, oldValue);
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testRemoveKeyValueMissingKey() {
+ final ConcurrentMap<K, V> map;
+ final K keyToRemove;
+ final V valueToRemove;
+ try {
+ map = makePopulatedMap();
+ keyToRemove = getKeyNotInPopulatedMap();
+ valueToRemove = getValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ if (supportsRemove) {
+ int initialSize = map.size();
+ assertFalse(map.remove(keyToRemove, valueToRemove));
+ assertEquals(initialSize, map.size());
+ } else {
+ try {
+ map.remove(keyToRemove, valueToRemove);
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testRemoveKeyValueDifferentValue() {
+ final ConcurrentMap<K, V> map;
+ final K keyToRemove;
+ final V valueToRemove;
+ try {
+ map = makePopulatedMap();
+ valueToRemove = getValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ keyToRemove = map.keySet().iterator().next();
+ if (supportsRemove) {
+ int initialSize = map.size();
+ V oldValue = map.get(keyToRemove);
+ assertFalse(map.remove(keyToRemove, valueToRemove));
+ assertEquals(oldValue, map.get(keyToRemove));
+ assertTrue(map.containsKey(keyToRemove));
+ assertEquals(initialSize, map.size());
+ } else {
+ try {
+ map.remove(keyToRemove, valueToRemove);
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testRemoveKeyValueNullKey() {
+ if (allowsNullKeys) {
+ return; // Not yet implemented
+ }
+ final ConcurrentMap<K, V> map;
+ final V valueToRemove;
+ try {
+ map = makeEitherMap();
+ valueToRemove = getValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ int initialSize = map.size();
+ if (supportsRemove) {
+ try {
+ assertFalse(map.remove(null, valueToRemove));
+ } catch (NullPointerException e) {
+ // Optional.
+ }
+ } else {
+ try {
+ assertFalse(map.remove(null, valueToRemove));
+ } catch (UnsupportedOperationException e) {
+ // Optional.
+ } catch (NullPointerException e) {
+ // Optional.
+ }
+ }
+ assertEquals(initialSize, map.size());
+ assertInvariants(map);
+ }
+
+ public void testRemoveKeyValueExistingKeyNullValue() {
+ if (allowsNullValues) {
+ return; // Not yet implemented
+ }
+ final ConcurrentMap<K, V> map;
+ final K keyToRemove;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ keyToRemove = map.keySet().iterator().next();
+ int initialSize = map.size();
+ if (supportsRemove) {
+ try {
+ assertFalse(map.remove(keyToRemove, null));
+ } catch (NullPointerException e) {
+ // Optional.
+ }
+ } else {
+ try {
+ assertFalse(map.remove(keyToRemove, null));
+ } catch (UnsupportedOperationException e) {
+ // Optional.
+ } catch (NullPointerException e) {
+ // Optional.
+ }
+ }
+ assertEquals(initialSize, map.size());
+ assertInvariants(map);
+ }
+
+ public void testRemoveKeyValueMissingKeyNullValue() {
+ if (allowsNullValues) {
+ return; // Not yet implemented
+ }
+ final ConcurrentMap<K, V> map;
+ final K keyToRemove;
+ try {
+ map = makeEitherMap();
+ keyToRemove = getKeyNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ int initialSize = map.size();
+ if (supportsRemove) {
+ try {
+ assertFalse(map.remove(keyToRemove, null));
+ } catch (NullPointerException e) {
+ // Optional.
+ }
+ } else {
+ try {
+ assertFalse(map.remove(keyToRemove, null));
+ } catch (UnsupportedOperationException e) {
+ // Optional.
+ } catch (NullPointerException e) {
+ // Optional.
+ }
+ }
+ assertEquals(initialSize, map.size());
+ assertInvariants(map);
+ }
+
+ /* Replace2 tests call 2-parameter replace(key, value) */
+
+ public void testReplace2ExistingKey() {
+ final ConcurrentMap<K, V> map;
+ final K keyToReplace;
+ final V newValue;
+ try {
+ map = makePopulatedMap();
+ newValue = getValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ keyToReplace = map.keySet().iterator().next();
+ if (supportsPut) {
+ V oldValue = map.get(keyToReplace);
+ int initialSize = map.size();
+ assertEquals(oldValue, map.replace(keyToReplace, newValue));
+ assertEquals(newValue, map.get(keyToReplace));
+ assertTrue(map.containsKey(keyToReplace));
+ assertTrue(map.containsValue(newValue));
+ assertEquals(initialSize, map.size());
+ } else {
+ try {
+ map.replace(keyToReplace, newValue);
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testReplace2MissingKey() {
+ final ConcurrentMap<K, V> map;
+ final K keyToReplace;
+ final V newValue;
+ try {
+ map = makeEitherMap();
+ keyToReplace = getKeyNotInPopulatedMap();
+ newValue = getValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ if (supportsPut) {
+ int initialSize = map.size();
+ assertNull(map.replace(keyToReplace, newValue));
+ assertNull(map.get(keyToReplace));
+ assertFalse(map.containsKey(keyToReplace));
+ assertFalse(map.containsValue(newValue));
+ assertEquals(initialSize, map.size());
+ } else {
+ try {
+ map.replace(keyToReplace, newValue);
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testReplace2NullKey() {
+ if (allowsNullKeys) {
+ return; // Not yet implemented
+ }
+ final ConcurrentMap<K, V> map;
+ final V valueToReplace;
+ try {
+ map = makeEitherMap();
+ valueToReplace = getValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ int initialSize = map.size();
+ if (supportsPut) {
+ try {
+ assertNull(map.replace(null, valueToReplace));
+ } catch (NullPointerException e) {
+ // Optional.
+ }
+ } else {
+ try {
+ assertNull(map.replace(null, valueToReplace));
+ } catch (UnsupportedOperationException e) {
+ // Optional.
+ } catch (NullPointerException e) {
+ // Optional.
+ }
+ }
+ assertEquals(initialSize, map.size());
+ assertInvariants(map);
+ }
+
+ public void testReplace2ExistingKeyNullValue() {
+ if (allowsNullValues) {
+ return; // Not yet implemented
+ }
+ final ConcurrentMap<K, V> map;
+ final K keyToReplace;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ keyToReplace = map.keySet().iterator().next();
+ int initialSize = map.size();
+ if (supportsPut) {
+ try {
+ map.replace(keyToReplace, null);
+ fail("Expected NullPointerException");
+ } catch (NullPointerException e) {
+ // Expected.
+ }
+ } else {
+ try {
+ map.replace(keyToReplace, null);
+ fail("Expected UnsupportedOperationException or NullPointerException");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ } catch (NullPointerException e) {
+ // Expected.
+ }
+ }
+ assertEquals(initialSize, map.size());
+ assertInvariants(map);
+ }
+
+ public void testReplace2MissingKeyNullValue() {
+ if (allowsNullValues) {
+ return; // Not yet implemented
+ }
+ final ConcurrentMap<K, V> map;
+ final K keyToReplace;
+ try {
+ map = makeEitherMap();
+ keyToReplace = getKeyNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ int initialSize = map.size();
+ if (supportsPut) {
+ try {
+ assertNull(map.replace(keyToReplace, null));
+ } catch (NullPointerException e) {
+ // Optional.
+ }
+ } else {
+ try {
+ assertNull(map.replace(keyToReplace, null));
+ } catch (UnsupportedOperationException e) {
+ // Optional.
+ } catch (NullPointerException e) {
+ // Optional.
+ }
+ }
+ assertEquals(initialSize, map.size());
+ assertInvariants(map);
+ }
+
+ /*
+ * Replace3 tests call 3-parameter replace(key, oldValue, newValue)
+ */
+
+ public void testReplace3ExistingKeyValue() {
+ final ConcurrentMap<K, V> map;
+ final K keyToReplace;
+ final V oldValue;
+ final V newValue;
+ try {
+ map = makePopulatedMap();
+ newValue = getValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ keyToReplace = map.keySet().iterator().next();
+ oldValue = map.get(keyToReplace);
+ if (supportsPut) {
+ int initialSize = map.size();
+ assertTrue(map.replace(keyToReplace, oldValue, newValue));
+ assertEquals(newValue, map.get(keyToReplace));
+ assertTrue(map.containsKey(keyToReplace));
+ assertTrue(map.containsValue(newValue));
+ assertFalse(map.containsValue(oldValue));
+ assertEquals(initialSize, map.size());
+ } else {
+ try {
+ map.replace(keyToReplace, oldValue, newValue);
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testReplace3ExistingKeyDifferentValue() {
+ final ConcurrentMap<K, V> map;
+ final K keyToReplace;
+ final V oldValue;
+ final V newValue;
+ try {
+ map = makePopulatedMap();
+ oldValue = getValueNotInPopulatedMap();
+ newValue = getSecondValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ keyToReplace = map.keySet().iterator().next();
+ final V originalValue = map.get(keyToReplace);
+ int initialSize = map.size();
+ if (supportsPut) {
+ assertFalse(map.replace(keyToReplace, oldValue, newValue));
+ } else {
+ try {
+ map.replace(keyToReplace, oldValue, newValue);
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertTrue(map.containsKey(keyToReplace));
+ assertFalse(map.containsValue(newValue));
+ assertFalse(map.containsValue(oldValue));
+ assertEquals(originalValue, map.get(keyToReplace));
+ assertEquals(initialSize, map.size());
+ assertInvariants(map);
+ }
+
+ public void testReplace3MissingKey() {
+ final ConcurrentMap<K, V> map;
+ final K keyToReplace;
+ final V oldValue;
+ final V newValue;
+ try {
+ map = makeEitherMap();
+ keyToReplace = getKeyNotInPopulatedMap();
+ oldValue = getValueNotInPopulatedMap();
+ newValue = getSecondValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ int initialSize = map.size();
+ if (supportsPut) {
+ assertFalse(map.replace(keyToReplace, oldValue, newValue));
+ } else {
+ try {
+ map.replace(keyToReplace, oldValue, newValue);
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertFalse(map.containsKey(keyToReplace));
+ assertFalse(map.containsValue(newValue));
+ assertFalse(map.containsValue(oldValue));
+ assertEquals(initialSize, map.size());
+ assertInvariants(map);
+ }
+
+ public void testReplace3NullKey() {
+ if (allowsNullKeys) {
+ return; // Not yet implemented
+ }
+ final ConcurrentMap<K, V> map;
+ final V oldValue;
+ final V newValue;
+ try {
+ map = makeEitherMap();
+ oldValue = getValueNotInPopulatedMap();
+ newValue = getSecondValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ int initialSize = map.size();
+ if (supportsPut) {
+ try {
+ assertFalse(map.replace(null, oldValue, newValue));
+ } catch (NullPointerException e) {
+ // Optional.
+ }
+ } else {
+ try {
+ assertFalse(map.replace(null, oldValue, newValue));
+ } catch (UnsupportedOperationException e) {
+ // Optional.
+ } catch (NullPointerException e) {
+ // Optional.
+ }
+ }
+ assertEquals(initialSize, map.size());
+ assertInvariants(map);
+ }
+
+ public void testReplace3ExistingKeyNullOldValue() {
+ if (allowsNullValues) {
+ return; // Not yet implemented
+ }
+ final ConcurrentMap<K, V> map;
+ final K keyToReplace;
+ final V newValue;
+ try {
+ map = makePopulatedMap();
+ newValue = getValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ keyToReplace = map.keySet().iterator().next();
+ final V originalValue = map.get(keyToReplace);
+ int initialSize = map.size();
+ if (supportsPut) {
+ try {
+ assertFalse(map.replace(keyToReplace, null, newValue));
+ } catch (NullPointerException e) {
+ // Optional.
+ }
+ } else {
+ try {
+ assertFalse(map.replace(keyToReplace, null, newValue));
+ } catch (UnsupportedOperationException e) {
+ // Optional.
+ } catch (NullPointerException e) {
+ // Optional.
+ }
+ }
+ assertEquals(initialSize, map.size());
+ assertEquals(originalValue, map.get(keyToReplace));
+ assertInvariants(map);
+ }
+
+ public void testReplace3MissingKeyNullOldValue() {
+ if (allowsNullValues) {
+ return; // Not yet implemented
+ }
+ final ConcurrentMap<K, V> map;
+ final K keyToReplace;
+ final V newValue;
+ try {
+ map = makeEitherMap();
+ keyToReplace = getKeyNotInPopulatedMap();
+ newValue = getValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ int initialSize = map.size();
+ if (supportsPut) {
+ try {
+ assertFalse(map.replace(keyToReplace, null, newValue));
+ } catch (NullPointerException e) {
+ // Optional.
+ }
+ } else {
+ try {
+ assertFalse(map.replace(keyToReplace, null, newValue));
+ } catch (UnsupportedOperationException e) {
+ // Optional.
+ } catch (NullPointerException e) {
+ // Optional.
+ }
+ }
+ assertEquals(initialSize, map.size());
+ assertInvariants(map);
+ }
+
+ public void testReplace3MissingKeyNullNewValue() {
+ if (allowsNullValues) {
+ return; // Not yet implemented
+ }
+ final ConcurrentMap<K, V> map;
+ final K keyToReplace;
+ final V oldValue;
+ try {
+ map = makeEitherMap();
+ keyToReplace = getKeyNotInPopulatedMap();
+ oldValue = getValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ int initialSize = map.size();
+ if (supportsPut) {
+ try {
+ map.replace(keyToReplace, oldValue, null);
+ } catch (NullPointerException e) {
+ // Optional.
+ }
+ } else {
+ try {
+ map.replace(keyToReplace, oldValue, null);
+ } catch (UnsupportedOperationException e) {
+ // Optional.
+ } catch (NullPointerException e) {
+ // Optional.
+ }
+ }
+ assertEquals(initialSize, map.size());
+ assertInvariants(map);
+ }
+
+ public void testReplace3ExistingKeyValueNullNewValue() {
+ if (allowsNullValues) {
+ return; // Not yet implemented
+ }
+ final ConcurrentMap<K, V> map;
+ final K keyToReplace;
+ final V oldValue;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ keyToReplace = map.keySet().iterator().next();
+ oldValue = map.get(keyToReplace);
+ int initialSize = map.size();
+ if (supportsPut) {
+ try {
+ map.replace(keyToReplace, oldValue, null);
+ fail("Expected NullPointerException");
+ } catch (NullPointerException e) {
+ // Expected.
+ }
+ } else {
+ try {
+ map.replace(keyToReplace, oldValue, null);
+ fail("Expected UnsupportedOperationException or NullPointerException");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ } catch (NullPointerException e) {
+ // Expected.
+ }
+ }
+ assertEquals(initialSize, map.size());
+ assertEquals(oldValue, map.get(keyToReplace));
+ assertInvariants(map);
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/DerivedIteratorTestSuiteBuilder.java b/testfw/com/google/common/collect/testing/DerivedIteratorTestSuiteBuilder.java
new file mode 100644
index 0000000..c0f5a9b
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/DerivedIteratorTestSuiteBuilder.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import junit.framework.TestSuite;
+
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Given a test iterable generator, builds a test suite for the
+ * iterable's iterator, by delegating to a {@link IteratorTestSuiteBuilder}.
+ *
+ * @author George van den Driessche
+ */
+public class DerivedIteratorTestSuiteBuilder<E>
+ extends FeatureSpecificTestSuiteBuilder<
+ DerivedIteratorTestSuiteBuilder<E>,
+ TestSubjectGenerator<? extends Iterable<E>>> {
+ /**
+ * We rely entirely on the delegate builder for test creation, so this
+ * just throws UnsupportedOperationException.
+ *
+ * @return never.
+ */
+ // Class parameters must be raw.
+ @SuppressWarnings("unchecked")
+ @Override protected List<Class<? extends AbstractTester>> getTesters() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override public TestSuite createTestSuite() {
+ checkCanCreate();
+ return new IteratorTestSuiteBuilder<E>()
+ .named(getName() + " iterator")
+ .usingGenerator(new DerivedTestIteratorGenerator<E>(
+ getSubjectGenerator()))
+ .withFeatures(getFeatures())
+ .createTestSuite();
+ }
+
+ /**
+ * Adapts a test iterable generator to give a TestIteratorGenerator.
+ */
+ private static class DerivedTestIteratorGenerator<E>
+ implements TestIteratorGenerator<E> {
+ private final TestSubjectGenerator<? extends Iterable<E>>
+ collectionGenerator;
+
+ public DerivedTestIteratorGenerator(
+ TestSubjectGenerator<? extends Iterable<E>> collectionGenerator) {
+ this.collectionGenerator = collectionGenerator;
+ }
+
+ public Iterator<E> get() {
+ return collectionGenerator.createTestSubject().iterator();
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilder.java b/testfw/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilder.java
new file mode 100644
index 0000000..cb7a8de
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilder.java
@@ -0,0 +1,301 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.features.ConflictingRequirementsException;
+import com.google.common.collect.testing.features.Feature;
+import com.google.common.collect.testing.features.FeatureUtil;
+import com.google.common.collect.testing.features.TesterRequirements;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Logger;
+
+/**
+ * Creates, based on your criteria, a JUnit test suite that exhaustively tests
+ * the object generated by a G, selecting appropriate tests by matching them
+ * against specified features.
+ *
+ * @param <B> The concrete type of this builder (the 'self-type'). All the
+ * Builder methods of this class (such as {@link #named}) return this type, so
+ * that Builder methods of more derived classes can be chained onto them without
+ * casting.
+ * @param <G> The type of the generator to be passed to testers in the
+ * generated test suite. An instance of G should somehow provide an
+ * instance of the class under test, plus any other information required
+ * to parameterize the test.
+ *
+ * @author George van den Driessche
+ */
+public abstract class FeatureSpecificTestSuiteBuilder<
+ B extends FeatureSpecificTestSuiteBuilder<B, G>, G> {
+ @SuppressWarnings("unchecked")
+ protected B self() {
+ return (B) this;
+ }
+
+ // Test Data
+
+ private G subjectGenerator;
+
+ protected B usingGenerator(G subjectGenerator) {
+ this.subjectGenerator = subjectGenerator;
+ return self();
+ }
+
+ protected G getSubjectGenerator() {
+ return subjectGenerator;
+ }
+
+ // Features
+
+ private Set<Feature<?>> features;
+
+ /**
+ * Configures this builder to produce tests appropriate for the given
+ * features.
+ */
+ public B withFeatures(Feature<?>... features) {
+ return withFeatures(Arrays.asList(features));
+ }
+
+ public B withFeatures(Iterable<? extends Feature<?>> features) {
+ this.features = Helpers.copyToSet(features);
+ return self();
+ }
+
+ protected Set<Feature<?>> getFeatures() {
+ return Collections.unmodifiableSet(features);
+ }
+
+ // Name
+
+ private String name;
+
+ /** Configures this builder produce a TestSuite with the given name. */
+ public B named(String name) {
+ if (name.contains("(")) {
+ throw new IllegalArgumentException("Eclipse hides all characters after "
+ + "'('; please use '[]' or other characters instead of parentheses");
+ }
+ this.name = name;
+ return self();
+ }
+
+ protected String getName() {
+ return name;
+ }
+
+ // Test suppression
+
+ private Set<Method> suppressedTests = new HashSet<Method>();
+
+ /**
+ * Prevents the given methods from being run as part of the test suite.
+ *
+ * <em>Note:</em> in principle this should never need to be used, but it
+ * might be useful if the semantics of an implementation disagree in
+ * unforeseen ways with the semantics expected by a test, or to keep dependent
+ * builds clean in spite of an erroneous test.
+ */
+ public B suppressing(Method... methods) {
+ return suppressing(Arrays.asList(methods));
+ }
+
+ public B suppressing(Collection<Method> methods) {
+ suppressedTests.addAll(methods);
+ return self();
+ }
+
+ protected Set<Method> getSuppressedTests() {
+ return suppressedTests;
+ }
+
+ private static final Logger logger = Logger.getLogger(
+ FeatureSpecificTestSuiteBuilder.class.getName());
+
+ /**
+ * Creates a runnable JUnit test suite based on the criteria already given.
+ */
+ /*
+ * Class parameters must be raw. This annotation should go on testerClass in
+ * the for loop, but the 1.5 javac crashes on annotations in for loops:
+ * <http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6294589>
+ */
+ @SuppressWarnings("unchecked")
+ public TestSuite createTestSuite() {
+ checkCanCreate();
+
+ logger.fine(" Testing: " + name);
+ logger.fine("Features: " + formatFeatureSet(features));
+
+ FeatureUtil.addImpliedFeatures(features);
+
+ logger.fine("Expanded: " + formatFeatureSet(features));
+
+ // Class parameters must be raw.
+ @SuppressWarnings("unchecked")
+ List<Class<? extends AbstractTester>> testers = getTesters();
+
+ TestSuite suite = new TestSuite(name);
+ for (Class<? extends AbstractTester> testerClass : testers) {
+ final TestSuite testerSuite = makeSuiteForTesterClass(
+ (Class<? extends AbstractTester<?>>) testerClass);
+ if (testerSuite.countTestCases() > 0) {
+ suite.addTest(testerSuite);
+ }
+ }
+ return suite;
+ }
+
+ /**
+ * Throw {@link IllegalStateException} if {@link #createTestSuite()} can't
+ * be called yet.
+ */
+ protected void checkCanCreate() {
+ if (subjectGenerator == null) {
+ throw new IllegalStateException("Call using() before createTestSuite().");
+ }
+ if (name == null) {
+ throw new IllegalStateException("Call named() before createTestSuite().");
+ }
+ if (features == null) {
+ throw new IllegalStateException(
+ "Call withFeatures() before createTestSuite().");
+ }
+ }
+
+ // Class parameters must be raw.
+ @SuppressWarnings("unchecked")
+ protected abstract List<Class<? extends AbstractTester>>
+ getTesters();
+
+ private boolean matches(Test test) {
+ final Method method;
+ try {
+ method = extractMethod(test);
+ } catch (IllegalArgumentException e) {
+ logger.finer(String.format(
+ "%s: including by default: %s", test, e.getMessage()));
+ return true;
+ }
+ if (suppressedTests.contains(method)) {
+ logger.finer(String.format(
+ "%s: excluding because it was explicitly suppressed.", test));
+ return false;
+ }
+ final TesterRequirements requirements;
+ try {
+ requirements = FeatureUtil.getTesterRequirements(method);
+ } catch (ConflictingRequirementsException e) {
+ throw new RuntimeException(e);
+ }
+ Set<Feature<?>> missingFeatures =
+ Helpers.copyToSet(requirements.getPresentFeatures());
+ missingFeatures.removeAll(features);
+ if (!missingFeatures.isEmpty()) {
+ logger.finer(String.format("%s: skipping because these features " +
+ "are absent: %s", method, missingFeatures));
+ return false;
+ }
+ Set<Feature<?>> unwantedFeatures =
+ Helpers.copyToSet(requirements.getAbsentFeatures());
+ unwantedFeatures.retainAll(features);
+ if (!unwantedFeatures.isEmpty()) {
+ logger.finer(String.format("%s: skipping because these features " +
+ "are present: %s", method, unwantedFeatures));
+ return false;
+ }
+ return true;
+ }
+
+ private static Method extractMethod(Test test) {
+ if (test instanceof AbstractTester) {
+ AbstractTester<?> tester = (AbstractTester<?>) test;
+ try {
+ return tester.getTestMethod();
+ } catch (NoSuchMethodException e) {
+ throw new IllegalArgumentException(e);
+ }
+ } else if (test instanceof TestCase) {
+ TestCase testCase = (TestCase) test;
+ try {
+ return testCase.getClass().getMethod(testCase.getName());
+ } catch (NoSuchMethodException e) {
+ throw new IllegalArgumentException(e);
+ }
+ } else {
+ throw new IllegalArgumentException(
+ "unable to extract method from test: not a TestCase.");
+ }
+ }
+
+ protected TestSuite makeSuiteForTesterClass(
+ Class<? extends AbstractTester<?>> testerClass) {
+ final TestSuite candidateTests = new TestSuite(testerClass);
+ final TestSuite suite = filterSuite(candidateTests);
+
+ Enumeration<?> allTests = suite.tests();
+ while (allTests.hasMoreElements()) {
+ Object test = allTests.nextElement();
+ if (test instanceof AbstractTester) {
+ @SuppressWarnings("unchecked")
+ AbstractTester<? super G> tester = (AbstractTester<? super G>) test;
+ tester.init(subjectGenerator, name);
+ }
+ }
+
+ return suite;
+ }
+
+ private TestSuite filterSuite(TestSuite suite) {
+ TestSuite filtered = new TestSuite(suite.getName());
+ final Enumeration<?> tests = suite.tests();
+ while (tests.hasMoreElements()) {
+ Test test = (Test) tests.nextElement();
+ if (matches(test)) {
+ filtered.addTest(test);
+ }
+ }
+ return filtered;
+ }
+
+ @SuppressWarnings("unchecked")
+ protected static String formatFeatureSet(Set<? extends Feature<?>> features) {
+ List<String> temp = new ArrayList<String>();
+ for (Feature<?> feature : features) {
+ if (feature instanceof Enum<?>) {
+ Enum<?> f = (Enum<?>) feature;
+ temp.add(f.getDeclaringClass().getSimpleName() + "." + feature);
+ } else {
+ temp.add(feature.toString());
+ }
+ }
+ return temp.toString();
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/Helpers.java b/testfw/com/google/common/collect/testing/Helpers.java
new file mode 100644
index 0000000..1900487
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/Helpers.java
@@ -0,0 +1,208 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import junit.framework.Assert;
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+import junit.framework.AssertionFailedError;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map.Entry;
+import java.util.Set;
+
+// This class is GWT compatible.
+public class Helpers {
+ public static <T> T checkNotNull(T reference) {
+ if (reference == null) {
+ throw new NullPointerException();
+ }
+ return reference;
+ }
+
+ static boolean equal(Object a, Object b) {
+ return a == b || (a != null && a.equals(b));
+ }
+
+ public static <E> List<E> copyToList(Iterable<? extends E> elements) {
+ List<E> list = new ArrayList<E>();
+ addAll(list, elements);
+ return list;
+ }
+
+ public static <E> List<E> copyToList(E[] elements) {
+ return copyToList(Arrays.asList(elements));
+ }
+
+ public static <E> Set<E> copyToSet(Iterable<? extends E> elements) {
+ Set<E> set = new LinkedHashSet<E>();
+ addAll(set, elements);
+ return set;
+ }
+
+ public static <E> Set<E> copyToSet(E[] elements) {
+ return copyToSet(Arrays.asList(elements));
+ }
+
+ public static <K, V> Entry<K, V> mapEntry(K key, V value) {
+ return Collections.singletonMap(key, value).entrySet().iterator().next();
+ }
+
+ public static void assertEqualIgnoringOrder(
+ Iterable<?> expected, Iterable<?> actual) {
+ List<?> exp = copyToList(expected);
+ List<?> act = copyToList(actual);
+ String actString = act.toString();
+
+ // Of course we could take pains to give the complete description of the
+ // problem on any failure.
+
+ // Yeah it's n^2.
+ for (Object object : exp) {
+ if (!act.remove(object)) {
+ Assert.fail("did not contain expected element " + object + ", "
+ + "expected = " + exp + ", actual = " + actString);
+ }
+ }
+ assertTrue("unexpected elements: " + act, act.isEmpty());
+ }
+
+ public static void assertContentsAnyOrder(
+ Iterable<?> actual, Object... expected) {
+ assertEqualIgnoringOrder(Arrays.asList(expected), actual);
+ }
+
+ public static <E> boolean addAll(
+ Collection<E> addTo, Iterable<? extends E> elementsToAdd) {
+ boolean modified = false;
+ for (E e : elementsToAdd) {
+ modified |= addTo.add(e);
+ }
+ return modified;
+ }
+
+ static <T> Iterable<T> reverse(final List<T> list) {
+ return new Iterable<T>() {
+ public Iterator<T> iterator() {
+ final ListIterator<T> listIter = list.listIterator(list.size());
+ return new Iterator<T>() {
+ public boolean hasNext() {
+ return listIter.hasPrevious();
+ }
+ public T next() {
+ return listIter.previous();
+ }
+ public void remove() {
+ listIter.remove();
+ }
+ };
+ }
+ };
+ }
+
+ static <T> Iterator<T> cycle(final Iterable<T> iterable) {
+ return new Iterator<T>() {
+ Iterator<T> iterator = Collections.<T>emptySet().iterator();
+ public boolean hasNext() {
+ return true;
+ }
+ public T next() {
+ if (!iterator.hasNext()) {
+ iterator = iterable.iterator();
+ }
+ return iterator.next();
+ }
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+ };
+ }
+
+ static <T> T get(Iterator<T> iterator, int position) {
+ for (int i = 0; i < position; i++) {
+ iterator.next();
+ }
+ return iterator.next();
+ }
+
+ static void fail(Throwable cause, Object message) {
+ AssertionFailedError assertionFailedError =
+ new AssertionFailedError(String.valueOf(message));
+ assertionFailedError.initCause(cause);
+ throw assertionFailedError;
+ }
+
+ public static <T> void testComparator(
+ Comparator<? super T> comparator, T... valuesInExpectedOrder) {
+ testComparator(comparator, Arrays.asList(valuesInExpectedOrder));
+ }
+
+ public static <T> void testComparator(
+ Comparator<? super T> comparator, List<T> valuesInExpectedOrder) {
+ // This does an O(n^2) test of all pairs of values in both orders
+ for (int i = 0; i < valuesInExpectedOrder.size(); i++) {
+ T t = valuesInExpectedOrder.get(i);
+
+ for (int j = 0; j < i; j++) {
+ T lesser = valuesInExpectedOrder.get(j);
+ assertTrue(comparator + ".compare(" + lesser + ", " + t + ")",
+ comparator.compare(lesser, t) < 0);
+ }
+
+ assertEquals(comparator + ".compare(" + t + ", " + t + ")",
+ 0, comparator.compare(t, t));
+
+ for (int j = i + 1; j < valuesInExpectedOrder.size(); j++) {
+ T greater = valuesInExpectedOrder.get(j);
+ assertTrue(comparator + ".compare(" + greater + ", " + t + ")",
+ comparator.compare(greater, t) > 0);
+ }
+ }
+ }
+
+ public static <T extends Comparable<? super T>> void testCompareToAndEquals(
+ List<T> valuesInExpectedOrder) {
+ // This does an O(n^2) test of all pairs of values in both orders
+ for (int i = 0; i < valuesInExpectedOrder.size(); i++) {
+ T t = valuesInExpectedOrder.get(i);
+
+ for (int j = 0; j < i; j++) {
+ T lesser = valuesInExpectedOrder.get(j);
+ assertTrue(lesser + ".compareTo(" + t + ')', lesser.compareTo(t) < 0);
+ assertFalse(lesser.equals(t));
+ }
+
+ assertEquals(t + ".compareTo(" + t + ')', 0, t.compareTo(t));
+ assertTrue(t.equals(t));
+
+ for (int j = i + 1; j < valuesInExpectedOrder.size(); j++) {
+ T greater = valuesInExpectedOrder.get(j);
+ assertTrue(greater + ".compareTo(" + t + ')', greater.compareTo(t) > 0);
+ assertFalse(greater.equals(t));
+ }
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/IteratorFeature.java b/testfw/com/google/common/collect/testing/IteratorFeature.java
new file mode 100644
index 0000000..628e913
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/IteratorFeature.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.Iterator;
+import java.util.ListIterator;
+import java.util.Set;
+
+/**
+ * A method supported by implementations of the {@link Iterator} or
+ * {@link ListIterator} interface.
+ *
+ * <p>This enum is GWT compatible.
+ *
+ * @author Chris Povirk
+ */
+public enum IteratorFeature {
+ /**
+ * Support for {@link Iterator#remove()}.
+ */
+ SUPPORTS_REMOVE,
+ /**
+ * Support for {@link ListIterator#add(Object)}; ignored for plain
+ * {@link Iterator} implementations.
+ */
+ SUPPORTS_ADD,
+ /**
+ * Support for {@link ListIterator#set(Object)}; ignored for plain
+ * {@link Iterator} implementations.
+ */
+ SUPPORTS_SET;
+
+ /**
+ * A set containing none of the optional features of the {@link Iterator} or
+ * {@link ListIterator} interfaces.
+ */
+ public static final Set<IteratorFeature> UNMODIFIABLE =
+ Collections.emptySet();
+
+ /**
+ * A set containing all of the optional features of the {@link Iterator} and
+ * {@link ListIterator} interfaces.
+ */
+ public static final Set<IteratorFeature> MODIFIABLE =
+ Collections.unmodifiableSet(EnumSet.allOf(IteratorFeature.class));
+}
diff --git a/testfw/com/google/common/collect/testing/IteratorTestSuiteBuilder.java b/testfw/com/google/common/collect/testing/IteratorTestSuiteBuilder.java
new file mode 100644
index 0000000..11d3f60
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/IteratorTestSuiteBuilder.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Creates, based on your criteria, a JUnit test suite that exhaustively tests
+ * an Iterator implementation.
+ *
+ * At least, it will do when it's finished.
+ *
+ * @author George van den Driessche
+ */
+public class IteratorTestSuiteBuilder<E>
+ extends FeatureSpecificTestSuiteBuilder<
+ IteratorTestSuiteBuilder<E>, TestIteratorGenerator<?>> {
+
+ // Class parameters must be raw.
+ @SuppressWarnings("unchecked")
+ @Override protected List<Class<? extends AbstractTester>> getTesters() {
+ return Collections.<Class<? extends AbstractTester>>singletonList(
+ ExampleIteratorTester.class);
+ }
+
+ public static class ExampleIteratorTester<E>
+ extends AbstractTester<TestIteratorGenerator<E>> {
+ public void testSomethingAboutIterators() throws Exception {
+ assertTrue(true);
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/IteratorTester.java b/testfw/com/google/common/collect/testing/IteratorTester.java
new file mode 100644
index 0000000..2c1b879
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/IteratorTester.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Collections;
+import java.util.Iterator;
+
+/**
+ * A utility for testing an Iterator implementation by comparing its behavior to
+ * that of a "known good" reference implementation. In order to accomplish this,
+ * it's important to test a great variety of sequences of the
+ * {@link Iterator#next}, {@link Iterator#hasNext} and {@link Iterator#remove}
+ * operations. This utility takes the brute-force approach of trying <i>all</i>
+ * possible sequences of these operations, up to a given number of steps. So, if
+ * the caller specifies to use <i>n</i> steps, a total of <i>3^n</i> tests are
+ * actually performed.
+ *
+ * For instance, if <i>steps</i> is 5, one example sequence that will be tested
+ * is:
+ *
+ * <ol>
+ * <li>remove();
+ * <li>hasNext()
+ * <li>hasNext();
+ * <li>remove();
+ * <li>next();
+ * </ol>
+ *
+ * This particular order of operations may be unrealistic, and testing all 3^5
+ * of them may be thought of as overkill; however, it's difficult to determine
+ * which proper subset of this massive set would be sufficient to expose any
+ * possible bug. Brute force is simpler.
+ * <p>
+ * To use this class the concrete subclass must implement the
+ * {@link IteratorTester#newTargetIterator()} method. This is because it's
+ * impossible to test an Iterator without changing its state, so the tester
+ * needs a steady supply of fresh Iterators.
+ * <p>
+ * If your iterator supports modification through {@code remove()}, you may
+ * wish to override the verify() method, which is called <em>after</em>
+ * each sequence and is guaranteed to be called using the latest values
+ * obtained from {@link IteratorTester#newTargetIterator()}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Kevin Bourrillion
+ * @author Chris Povirk
+ */
+public abstract class IteratorTester<E> extends
+ AbstractIteratorTester<E, Iterator<E>> {
+ /**
+ * Creates an IteratorTester.
+ *
+ * @param steps how many operations to test for each tested pair of iterators
+ * @param features the features supported by the iterator
+ */
+ protected IteratorTester(int steps,
+ Iterable<? extends IteratorFeature> features,
+ Iterable<E> expectedElements, KnownOrder knownOrder) {
+ super(steps, Collections.<E>singleton(null), features, expectedElements,
+ knownOrder, 0);
+ }
+
+ @Override
+ protected final Iterable<Stimulus<Iterator<E>>> getStimulusValues() {
+ return iteratorStimuli();
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/ListIteratorTester.java b/testfw/com/google/common/collect/testing/ListIteratorTester.java
new file mode 100644
index 0000000..56e15d9
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/ListIteratorTester.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.ListIterator;
+
+/**
+ * A utility similar to {@link IteratorTester} for testing a
+ * {@link ListIterator} against a known good reference implementation. As with
+ * {@code IteratorTester}, a concrete subclass must provide target iterators on
+ * demand. It also requires three additional constructor parameters:
+ * {@code elementsToInsert}, the elements to be passed to {@code set()} and
+ * {@code add()} calls; {@code features}, the features supported by the
+ * iterator; and {@code expectedElements}, the elements the iterator should
+ * return in order.
+ * <p>
+ * The items in {@code elementsToInsert} will be repeated if {@code steps} is
+ * larger than the number of provided elements.
+ *
+ * @author Chris Povirk
+ */
+public abstract class ListIteratorTester<E> extends
+ AbstractIteratorTester<E, ListIterator<E>> {
+ protected ListIteratorTester(int steps, Iterable<E> elementsToInsert,
+ Iterable<? extends IteratorFeature> features,
+ Iterable<E> expectedElements, int startIndex) {
+ super(steps, elementsToInsert, features, expectedElements,
+ KnownOrder.KNOWN_ORDER, startIndex);
+ }
+
+ @Override
+ protected final Iterable<? extends Stimulus<? super ListIterator<E>>>
+ getStimulusValues() {
+ List<Stimulus<? super ListIterator<E>>> list =
+ new ArrayList<Stimulus<? super ListIterator<E>>>();
+ Helpers.addAll(list, iteratorStimuli());
+ Helpers.addAll(list, listIteratorStimuli());
+ return list;
+ }
+
+ @Override protected abstract ListIterator<E> newTargetIterator();
+}
diff --git a/testfw/com/google/common/collect/testing/ListTestSuiteBuilder.java b/testfw/com/google/common/collect/testing/ListTestSuiteBuilder.java
new file mode 100644
index 0000000..33a5bc0
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/ListTestSuiteBuilder.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.Feature;
+import com.google.common.collect.testing.testers.ListAddAllAtIndexTester;
+import com.google.common.collect.testing.testers.ListAddAllTester;
+import com.google.common.collect.testing.testers.ListAddAtIndexTester;
+import com.google.common.collect.testing.testers.ListAddTester;
+import com.google.common.collect.testing.testers.ListCreationTester;
+import com.google.common.collect.testing.testers.ListEqualsTester;
+import com.google.common.collect.testing.testers.ListGetTester;
+import com.google.common.collect.testing.testers.ListHashCodeTester;
+import com.google.common.collect.testing.testers.ListIndexOfTester;
+import com.google.common.collect.testing.testers.ListLastIndexOfTester;
+import com.google.common.collect.testing.testers.ListListIteratorTester;
+import com.google.common.collect.testing.testers.ListRemoveAllTester;
+import com.google.common.collect.testing.testers.ListRemoveAtIndexTester;
+import com.google.common.collect.testing.testers.ListRemoveTester;
+import com.google.common.collect.testing.testers.ListRetainAllTester;
+import com.google.common.collect.testing.testers.ListSetTester;
+import com.google.common.collect.testing.testers.ListSubListTester;
+import com.google.common.collect.testing.testers.ListToArrayTester;
+
+import junit.framework.TestSuite;
+
+import java.util.List;
+
+/**
+ * Creates, based on your criteria, a JUnit test suite that exhaustively tests
+ * a List implementation.
+ *
+ * @author George van den Driessche
+ */
+public final class ListTestSuiteBuilder<E> extends
+ AbstractCollectionTestSuiteBuilder<ListTestSuiteBuilder<E>, E> {
+ public static <E> ListTestSuiteBuilder<E> using(
+ TestListGenerator<E> generator) {
+ return new ListTestSuiteBuilder<E>().usingGenerator(generator);
+ }
+
+ // Class parameters must be raw.
+ @SuppressWarnings("unchecked")
+ @Override protected List<Class<? extends AbstractTester>> getTesters() {
+ List<Class<? extends AbstractTester>> testers
+ = Helpers.copyToList(super.getTesters());
+
+ testers.add(ListAddAllAtIndexTester.class);
+ testers.add(ListAddAllTester.class);
+ testers.add(ListAddAtIndexTester.class);
+ testers.add(ListAddTester.class);
+ testers.add(ListCreationTester.class);
+ testers.add(ListEqualsTester.class);
+ testers.add(ListGetTester.class);
+ testers.add(ListHashCodeTester.class);
+ testers.add(ListIndexOfTester.class);
+ testers.add(ListLastIndexOfTester.class);
+ testers.add(ListListIteratorTester.class);
+ testers.add(ListRemoveAllTester.class);
+ testers.add(ListRemoveAtIndexTester.class);
+ testers.add(ListRemoveTester.class);
+ testers.add(ListRetainAllTester.class);
+ testers.add(ListSetTester.class);
+ testers.add(ListSubListTester.class);
+ testers.add(ListToArrayTester.class);
+ return testers;
+ }
+
+ /**
+ * Specifies {@link CollectionFeature#KNOWN_ORDER} for all list tests, since
+ * lists have an iteration ordering corresponding to the insertion order.
+ */
+ @Override public TestSuite createTestSuite() {
+ if (!getFeatures().contains(CollectionFeature.KNOWN_ORDER)) {
+ List<Feature<?>> features = Helpers.copyToList(getFeatures());
+ features.add(CollectionFeature.KNOWN_ORDER);
+ withFeatures(features);
+ }
+ return super.createTestSuite();
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/MapInterfaceTest.java b/testfw/com/google/common/collect/testing/MapInterfaceTest.java
new file mode 100644
index 0000000..37cee16
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/MapInterfaceTest.java
@@ -0,0 +1,1536 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import static java.util.Collections.singleton;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+/**
+ * Tests representing the contract of {@link Map}. Concrete subclasses of this
+ * base class test conformance of concrete {@link Map} subclasses to that
+ * contract.
+ *
+ * TODO: Descriptive assertion messages, with hints as to probable
+ * fixes.
+ * TODO: Add another constructor parameter indicating whether the
+ * class under test is ordered, and check the order if so.
+ * TODO: Refactor to share code with SetTestBuilder &c.
+ *
+ * @param <K> the type of keys used by the maps under test
+ * @param <V> the type of mapped values used the maps under test
+ *
+ * @author George van den Driessche
+ */
+public abstract class MapInterfaceTest<K, V> extends TestCase {
+ protected final boolean supportsPut;
+ protected final boolean supportsRemove;
+ protected final boolean supportsClear;
+ protected final boolean allowsNullKeys;
+ protected final boolean allowsNullValues;
+ protected final boolean supportsIteratorRemove;
+
+ /**
+ * Creates a new, empty instance of the class under test.
+ *
+ * @return a new, empty map instance.
+ * @throws UnsupportedOperationException if it's not possible to make an
+ * empty instance of the class under test.
+ */
+ protected abstract Map<K, V> makeEmptyMap()
+ throws UnsupportedOperationException;
+
+ /**
+ * Creates a new, non-empty instance of the class under test.
+ *
+ * @return a new, non-empty map instance.
+ * @throws UnsupportedOperationException if it's not possible to make a
+ * non-empty instance of the class under test.
+ */
+ protected abstract Map<K, V> makePopulatedMap()
+ throws UnsupportedOperationException;
+
+ /**
+ * Creates a new key that is not expected to be found
+ * in {@link #makePopulatedMap()}.
+ *
+ * @return a key.
+ * @throws UnsupportedOperationException if it's not possible to make a key
+ * that will not be found in the map.
+ */
+ protected abstract K getKeyNotInPopulatedMap()
+ throws UnsupportedOperationException;
+
+ /**
+ * Creates a new value that is not expected to be found
+ * in {@link #makePopulatedMap()}.
+ *
+ * @return a value.
+ * @throws UnsupportedOperationException if it's not possible to make a value
+ * that will not be found in the map.
+ */
+ protected abstract V getValueNotInPopulatedMap()
+ throws UnsupportedOperationException;
+
+ /**
+ * Constructor that assigns {@code supportsIteratorRemove} the same value as
+ * {@code supportsRemove}.
+ */
+ protected MapInterfaceTest(
+ boolean allowsNullKeys,
+ boolean allowsNullValues,
+ boolean supportsPut,
+ boolean supportsRemove,
+ boolean supportsClear) {
+ this(allowsNullKeys, allowsNullValues, supportsPut, supportsRemove,
+ supportsClear, supportsRemove);
+ }
+
+ /**
+ * Constructor with an explicit {@code supportsIteratorRemove} parameter.
+ */
+ protected MapInterfaceTest(
+ boolean allowsNullKeys,
+ boolean allowsNullValues,
+ boolean supportsPut,
+ boolean supportsRemove,
+ boolean supportsClear,
+ boolean supportsIteratorRemove) {
+ this.supportsPut = supportsPut;
+ this.supportsRemove = supportsRemove;
+ this.supportsClear = supportsClear;
+ this.allowsNullKeys = allowsNullKeys;
+ this.allowsNullValues = allowsNullValues;
+ this.supportsIteratorRemove = supportsIteratorRemove;
+ }
+
+ /**
+ * Used by tests that require a map, but don't care whether it's
+ * populated or not.
+ *
+ * @return a new map instance.
+ */
+ protected Map<K, V> makeEitherMap() {
+ try {
+ return makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return makeEmptyMap();
+ }
+ }
+
+ protected final boolean supportsValuesHashCode(Map<K, V> map) {
+ // get the first non-null value
+ Collection<V> values = map.values();
+ for (V value : values) {
+ if (value != null) {
+ try {
+ value.hashCode();
+ } catch (Exception e) {
+ return false;
+ }
+ return true;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Checks all the properties that should always hold of a map. Also calls
+ * {@link #assertMoreInvariants} to check invariants that are peculiar to
+ * specific implementations.
+ *
+ * @see #assertMoreInvariants
+ * @param map the map to check.
+ */
+ protected final void assertInvariants(Map<K, V> map) {
+ Set<K> keySet = map.keySet();
+ Collection<V> valueCollection = map.values();
+ Set<Entry<K, V>> entrySet = map.entrySet();
+
+ assertEquals(map.size() == 0, map.isEmpty());
+ assertEquals(map.size(), keySet.size());
+ assertEquals(keySet.size() == 0, keySet.isEmpty());
+ assertEquals(!keySet.isEmpty(), keySet.iterator().hasNext());
+
+ int expectedKeySetHash = 0;
+ for (K key : keySet) {
+ V value = map.get(key);
+ expectedKeySetHash += key != null ? key.hashCode() : 0;
+ assertTrue(map.containsKey(key));
+ assertTrue(map.containsValue(value));
+ assertTrue(valueCollection.contains(value));
+ assertTrue(valueCollection.containsAll(Collections.singleton(value)));
+ assertTrue(entrySet.contains(mapEntry(key, value)));
+ assertTrue(allowsNullKeys || (key != null));
+ }
+ assertEquals(expectedKeySetHash, keySet.hashCode());
+
+ assertEquals(map.size(), valueCollection.size());
+ assertEquals(valueCollection.size() == 0, valueCollection.isEmpty());
+ assertEquals(
+ !valueCollection.isEmpty(), valueCollection.iterator().hasNext());
+ for (V value : valueCollection) {
+ assertTrue(map.containsValue(value));
+ assertTrue(allowsNullValues || (value != null));
+ }
+
+ assertEquals(map.size(), entrySet.size());
+ assertEquals(entrySet.size() == 0, entrySet.isEmpty());
+ assertEquals(!entrySet.isEmpty(), entrySet.iterator().hasNext());
+ assertFalse(entrySet.contains("foo"));
+
+ boolean supportsValuesHashCode = supportsValuesHashCode(map);
+ if (supportsValuesHashCode) {
+ int expectedEntrySetHash = 0;
+ for (Entry<K, V> entry : entrySet) {
+ assertTrue(map.containsKey(entry.getKey()));
+ assertTrue(map.containsValue(entry.getValue()));
+ int expectedHash =
+ (entry.getKey() == null ? 0 : entry.getKey().hashCode()) ^
+ (entry.getValue() == null ? 0 : entry.getValue().hashCode());
+ assertEquals(expectedHash, entry.hashCode());
+ expectedEntrySetHash += expectedHash;
+ }
+ assertEquals(expectedEntrySetHash, entrySet.hashCode());
+ assertTrue(entrySet.containsAll(new HashSet<Entry<K, V>>(entrySet)));
+ assertTrue(entrySet.equals(new HashSet<Entry<K, V>>(entrySet)));
+ }
+
+ Object[] entrySetToArray1 = entrySet.toArray();
+ assertEquals(map.size(), entrySetToArray1.length);
+ assertTrue(Arrays.asList(entrySetToArray1).containsAll(entrySet));
+
+ Entry<?, ?>[] entrySetToArray2 = new Entry<?, ?>[map.size() + 2];
+ entrySetToArray2[map.size()] = mapEntry("foo", 1);
+ assertSame(entrySetToArray2, entrySet.toArray(entrySetToArray2));
+ assertNull(entrySetToArray2[map.size()]);
+ assertTrue(Arrays.asList(entrySetToArray2).containsAll(entrySet));
+
+ Object[] valuesToArray1 = valueCollection.toArray();
+ assertEquals(map.size(), valuesToArray1.length);
+ assertTrue(Arrays.asList(valuesToArray1).containsAll(valueCollection));
+
+ Object[] valuesToArray2 = new Object[map.size() + 2];
+ valuesToArray2[map.size()] = "foo";
+ assertSame(valuesToArray2, valueCollection.toArray(valuesToArray2));
+ assertNull(valuesToArray2[map.size()]);
+ assertTrue(Arrays.asList(valuesToArray2).containsAll(valueCollection));
+
+ if (supportsValuesHashCode) {
+ int expectedHash = 0;
+ for (Entry<K, V> entry : entrySet) {
+ expectedHash += entry.hashCode();
+ }
+ assertEquals(expectedHash, map.hashCode());
+ }
+
+ assertMoreInvariants(map);
+ }
+
+ /**
+ * Override this to check invariants which should hold true for a particular
+ * implementation, but which are not generally applicable to every instance
+ * of Map.
+ *
+ * @param map the map whose additional invariants to check.
+ */
+ protected void assertMoreInvariants(Map<K, V> map) {
+ }
+
+ public void testClear() {
+ final Map<K, V> map;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ if (supportsClear) {
+ map.clear();
+ assertTrue(map.isEmpty());
+ } else {
+ try {
+ map.clear();
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testContainsKey() {
+ final Map<K, V> map;
+ final K unmappedKey;
+ try {
+ map = makePopulatedMap();
+ unmappedKey = getKeyNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ assertFalse(map.containsKey(unmappedKey));
+ assertTrue(map.containsKey(map.keySet().iterator().next()));
+ if (allowsNullKeys) {
+ map.containsKey(null);
+ } else {
+ try {
+ map.containsKey(null);
+ } catch (NullPointerException optional) {
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testContainsValue() {
+ final Map<K, V> map;
+ final V unmappedValue;
+ try {
+ map = makePopulatedMap();
+ unmappedValue = getValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ assertFalse(map.containsValue(unmappedValue));
+ assertTrue(map.containsValue(map.values().iterator().next()));
+ if (allowsNullValues) {
+ map.containsValue(null);
+ } else {
+ try {
+ map.containsKey(null);
+ } catch (NullPointerException optional) {
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testEntrySet() {
+ final Map<K, V> map;
+ final Set<Entry<K, V>> entrySet;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ assertInvariants(map);
+
+ entrySet = map.entrySet();
+ final K unmappedKey;
+ final V unmappedValue;
+ try {
+ unmappedKey = getKeyNotInPopulatedMap();
+ unmappedValue = getValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ for (Entry<K, V> entry : entrySet) {
+ assertFalse(unmappedKey.equals(entry.getKey()));
+ assertFalse(unmappedValue.equals(entry.getValue()));
+ }
+ }
+
+ public void testEntrySetForEmptyMap() {
+ final Map<K, V> map;
+ try {
+ map = makeEmptyMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ assertInvariants(map);
+ }
+
+ public void testEntrySetContainsEntryNullKeyPresent() {
+ if (!allowsNullKeys || !supportsPut) {
+ return;
+ }
+ final Map<K, V> map;
+ final Set<Entry<K, V>> entrySet;
+ try {
+ map = makeEitherMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ assertInvariants(map);
+
+ entrySet = map.entrySet();
+ final V unmappedValue;
+ try {
+ unmappedValue = getValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ map.put(null, unmappedValue);
+ Entry<K, V> entry = mapEntry(null, unmappedValue);
+ assertTrue(entrySet.contains(entry));
+ assertFalse(entrySet.contains(mapEntry(null, null)));
+ }
+
+ public void testEntrySetContainsEntryNullKeyMissing() {
+ final Map<K, V> map;
+ final Set<Entry<K, V>> entrySet;
+ try {
+ map = makeEitherMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ assertInvariants(map);
+
+ entrySet = map.entrySet();
+ final V unmappedValue;
+ try {
+ unmappedValue = getValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ Entry<K, V> entry = mapEntry(null, unmappedValue);
+ assertFalse(entrySet.contains(entry));
+ assertFalse(entrySet.contains(mapEntry(null, null)));
+ }
+
+ public void testEntrySetIteratorRemove() {
+ final Map<K, V> map;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ Set<Entry<K, V>> entrySet = map.entrySet();
+ Iterator<Entry<K, V>> iterator = entrySet.iterator();
+ if (supportsIteratorRemove) {
+ int initialSize = map.size();
+ Entry<K, V> entry = iterator.next();
+ iterator.remove();
+ assertEquals(initialSize - 1, map.size());
+ assertFalse(entrySet.contains(entry));
+ assertInvariants(map);
+ try {
+ iterator.remove();
+ fail("Expected IllegalStateException.");
+ } catch (IllegalStateException e) {
+ // Expected.
+ }
+ } else {
+ try {
+ iterator.next();
+ iterator.remove();
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testEntrySetRemove() {
+ final Map<K, V> map;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ Set<Entry<K, V>> entrySet = map.entrySet();
+ if (supportsRemove) {
+ int initialSize = map.size();
+ boolean didRemove = entrySet.remove(entrySet.iterator().next());
+ assertTrue(didRemove);
+ assertEquals(initialSize - 1, map.size());
+ } else {
+ try {
+ entrySet.remove(entrySet.iterator().next());
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testEntrySetRemoveMissingKey() {
+ final Map<K, V> map;
+ final K key;
+ try {
+ map = makeEitherMap();
+ key = getKeyNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ Set<Entry<K, V>> entrySet = map.entrySet();
+ Entry<K, V> entry
+ = mapEntry(key, getValueNotInPopulatedMap());
+ int initialSize = map.size();
+ if (supportsRemove) {
+ boolean didRemove = entrySet.remove(entry);
+ assertFalse(didRemove);
+ } else {
+ try {
+ boolean didRemove = entrySet.remove(entry);
+ assertFalse(didRemove);
+ } catch (UnsupportedOperationException optional) {}
+ }
+ assertEquals(initialSize, map.size());
+ assertFalse(map.containsKey(key));
+ assertInvariants(map);
+ }
+
+ public void testEntrySetRemoveDifferentValue() {
+ final Map<K, V> map;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ Set<Entry<K, V>> entrySet = map.entrySet();
+ K key = map.keySet().iterator().next();
+ Entry<K, V> entry
+ = mapEntry(key, getValueNotInPopulatedMap());
+ int initialSize = map.size();
+ if (supportsRemove) {
+ boolean didRemove = entrySet.remove(entry);
+ assertFalse(didRemove);
+ } else {
+ try {
+ boolean didRemove = entrySet.remove(entry);
+ assertFalse(didRemove);
+ } catch (UnsupportedOperationException optional) {}
+ }
+ assertEquals(initialSize, map.size());
+ assertTrue(map.containsKey(key));
+ assertInvariants(map);
+ }
+
+ public void testEntrySetRemoveNullKeyPresent() {
+ if (!allowsNullKeys || !supportsPut || !supportsRemove) {
+ return;
+ }
+ final Map<K, V> map;
+ final Set<Entry<K, V>> entrySet;
+ try {
+ map = makeEitherMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ assertInvariants(map);
+
+ entrySet = map.entrySet();
+ final V unmappedValue;
+ try {
+ unmappedValue = getValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ map.put(null, unmappedValue);
+ assertEquals(unmappedValue, map.get(null));
+ assertTrue(map.containsKey(null));
+ Entry<K, V> entry = mapEntry(null, unmappedValue);
+ assertTrue(entrySet.remove(entry));
+ assertNull(map.get(null));
+ assertFalse(map.containsKey(null));
+ }
+
+ public void testEntrySetRemoveNullKeyMissing() {
+ final Map<K, V> map;
+ try {
+ map = makeEitherMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ Set<Entry<K, V>> entrySet = map.entrySet();
+ Entry<K, V> entry
+ = mapEntry(null, getValueNotInPopulatedMap());
+ int initialSize = map.size();
+ if (supportsRemove) {
+ boolean didRemove = entrySet.remove(entry);
+ assertFalse(didRemove);
+ } else {
+ try {
+ boolean didRemove = entrySet.remove(entry);
+ assertFalse(didRemove);
+ } catch (UnsupportedOperationException optional) {}
+ }
+ assertEquals(initialSize, map.size());
+ assertInvariants(map);
+ }
+
+ public void testEntrySetRemoveAll() {
+ final Map<K, V> map;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ Set<Entry<K, V>> entrySet = map.entrySet();
+ Set<Entry<K, V>> entriesToRemove =
+ singleton(entrySet.iterator().next());
+ if (supportsRemove) {
+ int initialSize = map.size();
+ boolean didRemove = entrySet.removeAll(entriesToRemove);
+ assertTrue(didRemove);
+ assertEquals(initialSize - entriesToRemove.size(), map.size());
+ for (Entry<K, V> entry : entriesToRemove) {
+ assertFalse(entrySet.contains(entry));
+ }
+ } else {
+ try {
+ entrySet.removeAll(entriesToRemove);
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testEntrySetRemoveAllNullFromEmpty() {
+ final Map<K, V> map;
+ try {
+ map = makeEmptyMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ Set<Entry<K, V>> entrySet = map.entrySet();
+ if (supportsRemove) {
+ try {
+ entrySet.removeAll(null);
+ fail("Expected NullPointerException.");
+ } catch (NullPointerException e) {
+ // Expected.
+ }
+ } else {
+ try {
+ entrySet.removeAll(null);
+ fail("Expected UnsupportedOperationException or NullPointerException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ } catch (NullPointerException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testEntrySetRetainAll() {
+ final Map<K, V> map;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ Set<Entry<K, V>> entrySet = map.entrySet();
+ Set<Entry<K, V>> entriesToRetain =
+ singleton(entrySet.iterator().next());
+ if (supportsRemove) {
+ boolean shouldRemove = (entrySet.size() > entriesToRetain.size());
+ boolean didRemove = entrySet.retainAll(entriesToRetain);
+ assertEquals(shouldRemove, didRemove);
+ assertEquals(entriesToRetain.size(), map.size());
+ for (Entry<K, V> entry : entriesToRetain) {
+ assertTrue(entrySet.contains(entry));
+ }
+ } else {
+ try {
+ entrySet.retainAll(entriesToRetain);
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testEntrySetRetainAllNullFromEmpty() {
+ final Map<K, V> map;
+ try {
+ map = makeEmptyMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ Set<Entry<K, V>> entrySet = map.entrySet();
+ if (supportsRemove) {
+ try {
+ entrySet.retainAll(null);
+ // Returning successfully is not ideal, but tolerated.
+ } catch (NullPointerException e) {
+ // Expected.
+ }
+ } else {
+ try {
+ entrySet.retainAll(null);
+ // We have to tolerate a successful return (Sun bug 4802647)
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ } catch (NullPointerException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testEntrySetClear() {
+ final Map<K, V> map;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ Set<Entry<K, V>> entrySet = map.entrySet();
+ if (supportsClear) {
+ entrySet.clear();
+ assertTrue(entrySet.isEmpty());
+ } else {
+ try {
+ entrySet.clear();
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testEntrySetAddAndAddAll() {
+ final Map<K, V> map = makeEitherMap();
+
+ Set<Entry<K, V>> entrySet = map.entrySet();
+ final Entry<K, V> entryToAdd = mapEntry(null, null);
+ try {
+ entrySet.add(entryToAdd);
+ fail("Expected UnsupportedOperationException or NullPointerException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ } catch (NullPointerException e) {
+ // Expected.
+ }
+ assertInvariants(map);
+
+ try {
+ entrySet.addAll(singleton(entryToAdd));
+ fail("Expected UnsupportedOperationException or NullPointerException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ } catch (NullPointerException e) {
+ // Expected.
+ }
+ assertInvariants(map);
+ }
+
+ public void testEntrySetSetValue() {
+ // TODO: Investigate the extent to which, in practice, maps that support
+ // put() also support Entry.setValue().
+ if (!supportsPut) {
+ return;
+ }
+
+ final Map<K, V> map;
+ final V valueToSet;
+ try {
+ map = makePopulatedMap();
+ valueToSet = getValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ Set<Entry<K, V>> entrySet = map.entrySet();
+ Entry<K, V> entry = entrySet.iterator().next();
+ final V oldValue = entry.getValue();
+ final V returnedValue = entry.setValue(valueToSet);
+ assertEquals(oldValue, returnedValue);
+ assertTrue(entrySet.contains(
+ mapEntry(entry.getKey(), valueToSet)));
+ assertEquals(valueToSet, map.get(entry.getKey()));
+ assertInvariants(map);
+ }
+
+ public void testEntrySetSetValueSameValue() {
+ // TODO: Investigate the extent to which, in practice, maps that support
+ // put() also support Entry.setValue().
+ if (!supportsPut) {
+ return;
+ }
+
+ final Map<K, V> map;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ Set<Entry<K, V>> entrySet = map.entrySet();
+ Entry<K, V> entry = entrySet.iterator().next();
+ final V oldValue = entry.getValue();
+ final V returnedValue = entry.setValue(oldValue);
+ assertEquals(oldValue, returnedValue);
+ assertTrue(entrySet.contains(
+ mapEntry(entry.getKey(), oldValue)));
+ assertEquals(oldValue, map.get(entry.getKey()));
+ assertInvariants(map);
+ }
+
+ public void testEqualsForEqualMap() {
+ final Map<K, V> map;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ assertEquals(map, map);
+ assertEquals(makePopulatedMap(), map);
+ assertFalse(map.equals(Collections.emptyMap()));
+ //no-inspection ObjectEqualsNull
+ assertFalse(map.equals(null));
+ }
+
+ public void testEqualsForLargerMap() {
+ if (!supportsPut) {
+ return;
+ }
+
+ final Map<K, V> map;
+ final Map<K, V> largerMap;
+ try {
+ map = makePopulatedMap();
+ largerMap = makePopulatedMap();
+ largerMap.put(getKeyNotInPopulatedMap(), getValueNotInPopulatedMap());
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ assertFalse(map.equals(largerMap));
+ }
+
+ public void testEqualsForSmallerMap() {
+ if (!supportsRemove) {
+ return;
+ }
+
+ final Map<K, V> map;
+ final Map<K, V> smallerMap;
+ try {
+ map = makePopulatedMap();
+ smallerMap = makePopulatedMap();
+ smallerMap.remove(smallerMap.keySet().iterator().next());
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ assertFalse(map.equals(smallerMap));
+ }
+
+ public void testEqualsForEmptyMap() {
+ final Map<K, V> map;
+ try {
+ map = makeEmptyMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ assertEquals(map, map);
+ assertEquals(makeEmptyMap(), map);
+ assertEquals(Collections.emptyMap(), map);
+ assertFalse(map.equals(Collections.emptySet()));
+ //noinspection ObjectEqualsNull
+ assertFalse(map.equals(null));
+ }
+
+ public void testGet() {
+ final Map<K, V> map;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ for (Entry<K, V> entry : map.entrySet()) {
+ assertEquals(entry.getValue(), map.get(entry.getKey()));
+ }
+
+ K unmappedKey = null;
+ try {
+ unmappedKey = getKeyNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ assertNull(map.get(unmappedKey));
+ }
+
+ public void testGetForEmptyMap() {
+ final Map<K, V> map;
+ K unmappedKey = null;
+ try {
+ map = makeEmptyMap();
+ unmappedKey = getKeyNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ assertNull(map.get(unmappedKey));
+ }
+
+ public void testGetNull() {
+ Map<K, V> map = makeEitherMap();
+ if (allowsNullKeys) {
+ if (allowsNullValues) {
+ // TODO: decide what to test here.
+ } else {
+ assertEquals(map.containsKey(null), map.get(null) != null);
+ }
+ } else {
+ try {
+ map.get(null);
+ } catch (NullPointerException optional) {
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testHashCode() {
+ final Map<K, V> map;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ assertInvariants(map);
+ }
+
+ public void testHashCodeForEmptyMap() {
+ final Map<K, V> map;
+ try {
+ map = makeEmptyMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ assertInvariants(map);
+ }
+
+ public void testPutNewKey() {
+ final Map<K, V> map = makeEitherMap();
+ final K keyToPut;
+ final V valueToPut;
+ try {
+ keyToPut = getKeyNotInPopulatedMap();
+ valueToPut = getValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ if (supportsPut) {
+ int initialSize = map.size();
+ V oldValue = map.put(keyToPut, valueToPut);
+ assertEquals(valueToPut, map.get(keyToPut));
+ assertTrue(map.containsKey(keyToPut));
+ assertTrue(map.containsValue(valueToPut));
+ assertEquals(initialSize + 1, map.size());
+ assertNull(oldValue);
+ } else {
+ try {
+ map.put(keyToPut, valueToPut);
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testPutExistingKey() {
+ final Map<K, V> map;
+ final K keyToPut;
+ final V valueToPut;
+ try {
+ map = makePopulatedMap();
+ valueToPut = getValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ keyToPut = map.keySet().iterator().next();
+ if (supportsPut) {
+ int initialSize = map.size();
+ map.put(keyToPut, valueToPut);
+ assertEquals(valueToPut, map.get(keyToPut));
+ assertTrue(map.containsKey(keyToPut));
+ assertTrue(map.containsValue(valueToPut));
+ assertEquals(initialSize, map.size());
+ } else {
+ try {
+ map.put(keyToPut, valueToPut);
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testPutNullKey() {
+ if (!supportsPut) {
+ return;
+ }
+ final Map<K, V> map = makeEitherMap();
+ final V valueToPut;
+ try {
+ valueToPut = getValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ if (allowsNullKeys) {
+ final V oldValue = map.get(null);
+ final V returnedValue = map.put(null, valueToPut);
+ assertEquals(oldValue, returnedValue);
+ assertEquals(valueToPut, map.get(null));
+ assertTrue(map.containsKey(null));
+ assertTrue(map.containsValue(valueToPut));
+ } else {
+ try {
+ map.put(null, valueToPut);
+ fail("Expected RuntimeException");
+ } catch (RuntimeException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testPutNullValue() {
+ if (!supportsPut) {
+ return;
+ }
+ final Map<K, V> map = makeEitherMap();
+ final K keyToPut;
+ try {
+ keyToPut = getKeyNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ if (allowsNullValues) {
+ int initialSize = map.size();
+ final V oldValue = map.get(keyToPut);
+ final V returnedValue = map.put(keyToPut, null);
+ assertEquals(oldValue, returnedValue);
+ assertNull(map.get(keyToPut));
+ assertTrue(map.containsKey(keyToPut));
+ assertTrue(map.containsValue(null));
+ assertEquals(initialSize + 1, map.size());
+ } else {
+ try {
+ map.put(keyToPut, null);
+ fail("Expected RuntimeException");
+ } catch (RuntimeException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testPutNullValueForExistingKey() {
+ if (!supportsPut) {
+ return;
+ }
+ final Map<K, V> map;
+ final K keyToPut;
+ try {
+ map = makePopulatedMap();
+ keyToPut = map.keySet().iterator().next();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ if (allowsNullValues) {
+ int initialSize = map.size();
+ final V oldValue = map.get(keyToPut);
+ final V returnedValue = map.put(keyToPut, null);
+ assertEquals(oldValue, returnedValue);
+ assertNull(map.get(keyToPut));
+ assertTrue(map.containsKey(keyToPut));
+ assertTrue(map.containsValue(null));
+ assertEquals(initialSize, map.size());
+ } else {
+ try {
+ map.put(keyToPut, null);
+ fail("Expected RuntimeException");
+ } catch (RuntimeException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testPutAllNewKey() {
+ final Map<K, V> map = makeEitherMap();
+ final K keyToPut;
+ final V valueToPut;
+ try {
+ keyToPut = getKeyNotInPopulatedMap();
+ valueToPut = getValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ final Map<K, V> mapToPut = Collections.singletonMap(keyToPut, valueToPut);
+ if (supportsPut) {
+ int initialSize = map.size();
+ map.putAll(mapToPut);
+ assertEquals(valueToPut, map.get(keyToPut));
+ assertTrue(map.containsKey(keyToPut));
+ assertTrue(map.containsValue(valueToPut));
+ assertEquals(initialSize + 1, map.size());
+ } else {
+ try {
+ map.putAll(mapToPut);
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testPutAllExistingKey() {
+ final Map<K, V> map;
+ final K keyToPut;
+ final V valueToPut;
+ try {
+ map = makePopulatedMap();
+ valueToPut = getValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ keyToPut = map.keySet().iterator().next();
+ final Map<K, V> mapToPut = Collections.singletonMap(keyToPut, valueToPut);
+ int initialSize = map.size();
+ if (supportsPut) {
+ map.putAll(mapToPut);
+ assertEquals(valueToPut, map.get(keyToPut));
+ assertTrue(map.containsKey(keyToPut));
+ assertTrue(map.containsValue(valueToPut));
+ } else {
+ try {
+ map.putAll(mapToPut);
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertEquals(initialSize, map.size());
+ assertInvariants(map);
+ }
+
+ public void testRemove() {
+ final Map<K, V> map;
+ final K keyToRemove;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ keyToRemove = map.keySet().iterator().next();
+ if (supportsRemove) {
+ int initialSize = map.size();
+ V expectedValue = map.get(keyToRemove);
+ V oldValue = map.remove(keyToRemove);
+ assertEquals(expectedValue, oldValue);
+ assertFalse(map.containsKey(keyToRemove));
+ assertEquals(initialSize - 1, map.size());
+ } else {
+ try {
+ map.remove(keyToRemove);
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testRemoveMissingKey() {
+ final Map<K, V> map;
+ final K keyToRemove;
+ try {
+ map = makePopulatedMap();
+ keyToRemove = getKeyNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ if (supportsRemove) {
+ int initialSize = map.size();
+ assertNull(map.remove(keyToRemove));
+ assertEquals(initialSize, map.size());
+ } else {
+ try {
+ map.remove(keyToRemove);
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testSize() {
+ assertInvariants(makeEitherMap());
+ }
+
+ public void testKeySetClear() {
+ final Map<K, V> map;
+ try {
+ map = makeEitherMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ Set<K> keySet = map.keySet();
+ if (supportsClear) {
+ keySet.clear();
+ assertTrue(keySet.isEmpty());
+ } else {
+ try {
+ keySet.clear();
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testKeySetRemoveAllNullFromEmpty() {
+ final Map<K, V> map;
+ try {
+ map = makeEmptyMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ Set<K> keySet = map.keySet();
+ if (supportsRemove) {
+ try {
+ keySet.removeAll(null);
+ fail("Expected NullPointerException.");
+ } catch (NullPointerException e) {
+ // Expected.
+ }
+ } else {
+ try {
+ keySet.removeAll(null);
+ fail("Expected UnsupportedOperationException or NullPointerException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ } catch (NullPointerException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testKeySetRetainAllNullFromEmpty() {
+ final Map<K, V> map;
+ try {
+ map = makeEmptyMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ Set<K> keySet = map.keySet();
+ if (supportsRemove) {
+ try {
+ keySet.retainAll(null);
+ // Returning successfully is not ideal, but tolerated.
+ } catch (NullPointerException e) {
+ // Expected.
+ }
+ } else {
+ try {
+ keySet.retainAll(null);
+ // We have to tolerate a successful return (Sun bug 4802647)
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ } catch (NullPointerException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testValues() {
+ final Map<K, V> map;
+ final Collection<V> valueCollection;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ assertInvariants(map);
+
+ valueCollection = map.values();
+ final V unmappedValue;
+ try {
+ unmappedValue = getValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ for (V value : valueCollection) {
+ assertFalse(unmappedValue.equals(value));
+ }
+ }
+
+ public void testValuesIteratorRemove() {
+ final Map<K, V> map;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ Collection<V> valueCollection = map.values();
+ Iterator<V> iterator = valueCollection.iterator();
+ if (supportsIteratorRemove) {
+ int initialSize = map.size();
+ iterator.next();
+ iterator.remove();
+ assertEquals(initialSize - 1, map.size());
+ // (We can't assert that the values collection no longer contains the
+ // removed value, because the underlying map can have multiple mappings
+ // to the same value.)
+ assertInvariants(map);
+ try {
+ iterator.remove();
+ fail("Expected IllegalStateException.");
+ } catch (IllegalStateException e) {
+ // Expected.
+ }
+ } else {
+ try {
+ iterator.next();
+ iterator.remove();
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testValuesRemove() {
+ final Map<K, V> map;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ Collection<V> valueCollection = map.values();
+ if (supportsRemove) {
+ int initialSize = map.size();
+ valueCollection.remove(valueCollection.iterator().next());
+ assertEquals(initialSize - 1, map.size());
+ // (We can't assert that the values collection no longer contains the
+ // removed value, because the underlying map can have multiple mappings
+ // to the same value.)
+ } else {
+ try {
+ valueCollection.remove(valueCollection.iterator().next());
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testValuesRemoveMissing() {
+ final Map<K, V> map;
+ final V valueToRemove;
+ try {
+ map = makeEitherMap();
+ valueToRemove = getValueNotInPopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ Collection<V> valueCollection = map.values();
+ int initialSize = map.size();
+ if (supportsRemove) {
+ assertFalse(valueCollection.remove(valueToRemove));
+ } else {
+ try {
+ assertFalse(valueCollection.remove(valueToRemove));
+ } catch (UnsupportedOperationException e) {
+ // Tolerated.
+ }
+ }
+ assertEquals(initialSize, map.size());
+ assertInvariants(map);
+ }
+
+ public void testValuesRemoveAll() {
+ final Map<K, V> map;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ Collection<V> valueCollection = map.values();
+ Set<V> valuesToRemove = singleton(valueCollection.iterator().next());
+ if (supportsRemove) {
+ valueCollection.removeAll(valuesToRemove);
+ for (V value : valuesToRemove) {
+ assertFalse(valueCollection.contains(value));
+ }
+ for (V value : valueCollection) {
+ assertFalse(valuesToRemove.contains(value));
+ }
+ } else {
+ try {
+ valueCollection.removeAll(valuesToRemove);
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testValuesRemoveAllNullFromEmpty() {
+ final Map<K, V> map;
+ try {
+ map = makeEmptyMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ Collection<V> values = map.values();
+ if (supportsRemove) {
+ try {
+ values.removeAll(null);
+ // Returning successfully is not ideal, but tolerated.
+ } catch (NullPointerException e) {
+ // Expected.
+ }
+ } else {
+ try {
+ values.removeAll(null);
+ // We have to tolerate a successful return (Sun bug 4802647)
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ } catch (NullPointerException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testValuesRetainAll() {
+ final Map<K, V> map;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ Collection<V> valueCollection = map.values();
+ Set<V> valuesToRetain = singleton(valueCollection.iterator().next());
+ if (supportsRemove) {
+ valueCollection.retainAll(valuesToRetain);
+ for (V value : valuesToRetain) {
+ assertTrue(valueCollection.contains(value));
+ }
+ for (V value : valueCollection) {
+ assertTrue(valuesToRetain.contains(value));
+ }
+ } else {
+ try {
+ valueCollection.retainAll(valuesToRetain);
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testValuesRetainAllNullFromEmpty() {
+ final Map<K, V> map;
+ try {
+ map = makeEmptyMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ Collection<V> values = map.values();
+ if (supportsRemove) {
+ try {
+ values.retainAll(null);
+ // Returning successfully is not ideal, but tolerated.
+ } catch (NullPointerException e) {
+ // Expected.
+ }
+ } else {
+ try {
+ values.retainAll(null);
+ // We have to tolerate a successful return (Sun bug 4802647)
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ } catch (NullPointerException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ public void testValuesClear() {
+ final Map<K, V> map;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+
+ Collection<V> valueCollection = map.values();
+ if (supportsClear) {
+ valueCollection.clear();
+ assertTrue(valueCollection.isEmpty());
+ } else {
+ try {
+ valueCollection.clear();
+ fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ // Expected.
+ }
+ }
+ assertInvariants(map);
+ }
+
+ private static <K, V> Entry<K, V> mapEntry(K key, V value) {
+ return Collections.singletonMap(key, value).entrySet().iterator().next();
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/MapTestSuiteBuilder.java b/testfw/com/google/common/collect/testing/MapTestSuiteBuilder.java
new file mode 100644
index 0000000..3eaedea
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/MapTestSuiteBuilder.java
@@ -0,0 +1,316 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.Feature;
+import com.google.common.collect.testing.features.MapFeature;
+import com.google.common.collect.testing.features.SetFeature;
+import com.google.common.collect.testing.testers.MapClearTester;
+import com.google.common.collect.testing.testers.MapContainsKeyTester;
+import com.google.common.collect.testing.testers.MapContainsValueTester;
+import com.google.common.collect.testing.testers.MapCreationTester;
+import com.google.common.collect.testing.testers.MapEqualsTester;
+import com.google.common.collect.testing.testers.MapGetTester;
+import com.google.common.collect.testing.testers.MapHashCodeTester;
+import com.google.common.collect.testing.testers.MapIsEmptyTester;
+import com.google.common.collect.testing.testers.MapPutAllTester;
+import com.google.common.collect.testing.testers.MapPutTester;
+import com.google.common.collect.testing.testers.MapRemoveTester;
+import com.google.common.collect.testing.testers.MapSizeTester;
+
+import junit.framework.TestSuite;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+/**
+ * Creates, based on your criteria, a JUnit test suite that exhaustively tests
+ * a Map implementation.
+ *
+ * @author George van den Driessche
+ */
+public class MapTestSuiteBuilder<K, V>
+ extends PerCollectionSizeTestSuiteBuilder<
+ MapTestSuiteBuilder<K, V>,
+ TestMapGenerator<K, V>, Map<K, V>, Map.Entry<K, V>> {
+ public static <K, V> MapTestSuiteBuilder<K, V> using(
+ TestMapGenerator<K, V> generator) {
+ return new MapTestSuiteBuilder<K, V>().usingGenerator(generator);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override protected List<Class<? extends AbstractTester>> getTesters() {
+ return Arrays.<Class<? extends AbstractTester>>asList(
+ MapClearTester.class,
+ MapContainsKeyTester.class,
+ MapContainsValueTester.class,
+ MapCreationTester.class,
+ MapEqualsTester.class,
+ MapGetTester.class,
+ MapHashCodeTester.class,
+ MapIsEmptyTester.class,
+ MapPutTester.class,
+ MapPutAllTester.class,
+ MapRemoveTester.class,
+ MapSizeTester.class
+ );
+ }
+
+ @Override List<TestSuite> createDerivedSuites(
+ FeatureSpecificTestSuiteBuilder<
+ ?,
+ ? extends OneSizeTestContainerGenerator<Map<K, V>, Map.Entry<K, V>>>
+ parentBuilder) {
+ // TODO(George van den Driessche): Once invariant support is added, supply
+ // invariants to each of the derived suites, to check that mutations to
+ // the derived collections are reflected in the underlying map.
+
+ List<TestSuite> derivedSuites = super.createDerivedSuites(parentBuilder);
+
+ derivedSuites.add(SetTestSuiteBuilder.using(
+ new MapEntrySetGenerator<K, V>(parentBuilder.getSubjectGenerator()))
+ .withFeatures(computeEntrySetFeatures(parentBuilder.getFeatures()))
+ .named(parentBuilder.getName() + " entrySet")
+ .suppressing(parentBuilder.getSuppressedTests())
+ .createTestSuite());
+
+ derivedSuites.add(SetTestSuiteBuilder.using(
+ new MapKeySetGenerator<K, V>(parentBuilder.getSubjectGenerator()))
+ .withFeatures(computeKeySetFeatures(parentBuilder.getFeatures()))
+ .named(parentBuilder.getName() + " keys")
+ .suppressing(parentBuilder.getSuppressedTests())
+ .createTestSuite());
+
+ derivedSuites.add(CollectionTestSuiteBuilder.using(
+ new MapValueCollectionGenerator<K, V>(
+ parentBuilder.getSubjectGenerator()))
+ .named(parentBuilder.getName() + " values")
+ .withFeatures(computeValuesCollectionFeatures(
+ parentBuilder.getFeatures()))
+ .suppressing(parentBuilder.getSuppressedTests())
+ .createTestSuite());
+
+ return derivedSuites;
+ }
+
+ private static Set<Feature<?>> computeEntrySetFeatures(
+ Set<Feature<?>> mapFeatures) {
+ return computeCommonDerivedCollectionFeatures(mapFeatures);
+ }
+
+ private static Set<Feature<?>> computeKeySetFeatures(
+ Set<Feature<?>> mapFeatures) {
+ Set<Feature<?>> keySetFeatures =
+ computeCommonDerivedCollectionFeatures(mapFeatures);
+
+ if (mapFeatures.contains(MapFeature.ALLOWS_NULL_KEYS)) {
+ keySetFeatures.add(CollectionFeature.ALLOWS_NULL_VALUES);
+ }
+
+ return keySetFeatures;
+ }
+
+ private static Set<Feature<?>> computeValuesCollectionFeatures(
+ Set<Feature<?>> mapFeatures) {
+ Set<Feature<?>> valuesCollectionFeatures =
+ computeCommonDerivedCollectionFeatures(mapFeatures);
+
+ if (mapFeatures.contains(MapFeature.ALLOWS_NULL_VALUES)) {
+ valuesCollectionFeatures.add(CollectionFeature.ALLOWS_NULL_VALUES);
+ }
+
+ return valuesCollectionFeatures;
+ }
+
+ private static Set<Feature<?>> computeCommonDerivedCollectionFeatures(
+ Set<Feature<?>> mapFeatures) {
+ Set<Feature<?>> derivedFeatures = new HashSet<Feature<?>>();
+ if (mapFeatures.contains(MapFeature.SUPPORTS_REMOVE)) {
+ derivedFeatures.add(CollectionFeature.SUPPORTS_REMOVE);
+ derivedFeatures.add(CollectionFeature.SUPPORTS_REMOVE_ALL);
+ derivedFeatures.add(CollectionFeature.SUPPORTS_RETAIN_ALL);
+ }
+ if (mapFeatures.contains(MapFeature.SUPPORTS_CLEAR)) {
+ derivedFeatures.add(CollectionFeature.SUPPORTS_CLEAR);
+ }
+ if (mapFeatures.contains(MapFeature.REJECTS_DUPLICATES_AT_CREATION)) {
+ derivedFeatures.add(SetFeature.REJECTS_DUPLICATES_AT_CREATION);
+ }
+ // add the intersection of CollectionSize.values() and mapFeatures
+ for (CollectionSize size : CollectionSize.values()) {
+ if (mapFeatures.contains(size)) {
+ derivedFeatures.add(size);
+ }
+ }
+ return derivedFeatures;
+ }
+
+ private static class MapEntrySetGenerator<K, V>
+ implements TestSetGenerator<Map.Entry<K, V>> {
+ private final OneSizeTestContainerGenerator<Map<K, V>, Map.Entry<K, V>>
+ mapGenerator;
+
+ public MapEntrySetGenerator(
+ OneSizeTestContainerGenerator<
+ Map<K, V>, Map.Entry<K, V>> mapGenerator) {
+ this.mapGenerator = mapGenerator;
+ }
+
+ public SampleElements<Map.Entry<K, V>> samples() {
+ return mapGenerator.samples();
+ }
+
+ public Set<Map.Entry<K, V>> create(Object... elements) {
+ return mapGenerator.create(elements).entrySet();
+ }
+
+ public Map.Entry<K, V>[] createArray(int length) {
+ return mapGenerator.createArray(length);
+ }
+
+ public Iterable<Map.Entry<K, V>> order(
+ List<Map.Entry<K, V>> insertionOrder) {
+ return mapGenerator.order(insertionOrder);
+ }
+ }
+
+ // TODO(George van den Driessche): investigate some API changes to
+ // SampleElements that would tidy up parts of the following classes.
+
+ private static class MapKeySetGenerator<K, V> implements TestSetGenerator<K> {
+ private final OneSizeTestContainerGenerator<Map<K, V>, Map.Entry<K, V>>
+ mapGenerator;
+ private final SampleElements<K> samples;
+
+ public MapKeySetGenerator(
+ OneSizeTestContainerGenerator<Map<K, V>, Map.Entry<K, V>>
+ mapGenerator) {
+ this.mapGenerator = mapGenerator;
+ final SampleElements<Map.Entry<K, V>> mapSamples =
+ this.mapGenerator.samples();
+ this.samples = new SampleElements<K>(
+ mapSamples.e0.getKey(),
+ mapSamples.e1.getKey(),
+ mapSamples.e2.getKey(),
+ mapSamples.e3.getKey(),
+ mapSamples.e4.getKey());
+ }
+
+ public SampleElements<K> samples() {
+ return samples;
+ }
+
+ public Set<K> create(Object... elements) {
+ @SuppressWarnings("unchecked")
+ K[] keysArray = (K[]) elements;
+
+ // Start with a suitably shaped collection of entries
+ Collection<Map.Entry<K, V>> originalEntries =
+ mapGenerator.getSampleElements(elements.length);
+
+ // Create a copy of that, with the desired value for each key
+ Collection<Map.Entry<K, V>> entries =
+ new ArrayList<Entry<K, V>>(elements.length);
+ int i = 0;
+ for (Map.Entry<K, V> entry : originalEntries) {
+ entries.add(Helpers.mapEntry(keysArray[i++], entry.getValue()));
+ }
+
+ return mapGenerator.create(entries.toArray()).keySet();
+ }
+
+ public K[] createArray(int length) {
+ // TODO(George): with appropriate refactoring of OneSizeGenerator, we
+ // can perhaps tidy this up and get rid of the casts here and in
+ // MapValueCollectionGenerator.
+
+ //noinspection UnnecessaryLocalVariable
+ @SuppressWarnings("unchecked")
+ final K[] ks = ((TestMapGenerator<K, V>) mapGenerator.getInnerGenerator())
+ .createKeyArray(length);
+ return ks;
+ }
+
+ public Iterable<K> order(List<K> insertionOrder) {
+ return insertionOrder;
+ }
+ }
+
+ private static class MapValueCollectionGenerator<K, V>
+ implements TestCollectionGenerator<V> {
+ private final OneSizeTestContainerGenerator<Map<K, V>, Map.Entry<K, V>>
+ mapGenerator;
+ private final SampleElements<V> samples;
+
+ public MapValueCollectionGenerator(
+ OneSizeTestContainerGenerator<
+ Map<K, V>, Map.Entry<K, V>> mapGenerator) {
+ this.mapGenerator = mapGenerator;
+ final SampleElements<Map.Entry<K, V>> mapSamples =
+ this.mapGenerator.samples();
+ this.samples = new SampleElements<V>(
+ mapSamples.e0.getValue(),
+ mapSamples.e1.getValue(),
+ mapSamples.e2.getValue(),
+ mapSamples.e3.getValue(),
+ mapSamples.e4.getValue());
+ }
+
+ public SampleElements<V> samples() {
+ return samples;
+ }
+
+ public Collection<V> create(Object... elements) {
+ @SuppressWarnings("unchecked")
+ V[] valuesArray = (V[]) elements;
+
+ // Start with a suitably shaped collection of entries
+ Collection<Map.Entry<K, V>> originalEntries =
+ mapGenerator.getSampleElements(elements.length);
+
+ // Create a copy of that, with the desired value for each value
+ Collection<Map.Entry<K, V>> entries =
+ new ArrayList<Entry<K, V>>(elements.length);
+ int i = 0;
+ for (Map.Entry<K, V> entry : originalEntries) {
+ entries.add(Helpers.mapEntry(entry.getKey(), valuesArray[i++]));
+ }
+
+ return mapGenerator.create(entries.toArray()).values();
+ }
+
+ public V[] createArray(int length) {
+ //noinspection UnnecessaryLocalVariable
+ @SuppressWarnings("unchecked")
+ final V[] vs = ((TestMapGenerator<K, V>) mapGenerator.getInnerGenerator())
+ .createValueArray(length);
+ return vs;
+ }
+
+ public Iterable<V> order(List<V> insertionOrder) {
+ return insertionOrder;
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/MinimalCollection.java b/testfw/com/google/common/collect/testing/MinimalCollection.java
new file mode 100644
index 0000000..5a0e368
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/MinimalCollection.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.AbstractCollection;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+
+/**
+ * A simplistic collection which implements only the bare minimum allowed by the
+ * spec, and throws exceptions whenever it can.
+ *
+ * @author Kevin Bourrillion
+ */
+public class MinimalCollection<E> extends AbstractCollection<E> {
+ // TODO: expose allow nulls parameter?
+
+ public static <E> MinimalCollection<E> of(E... contents) {
+ return new MinimalCollection<E>(Object.class, true, contents);
+ }
+
+ // TODO: use this
+ public static <E> MinimalCollection<E> ofClassAndContents(
+ Class<? super E> type, E... contents) {
+ return new MinimalCollection<E>(type, true, contents);
+ }
+
+ private final E[] contents;
+ private final Class<? super E> type;
+ private final boolean allowNulls;
+
+ // Package-private so that it can be extended.
+ MinimalCollection(Class<? super E> type, boolean allowNulls, E... contents) {
+ // TODO: consider making it shuffle the contents to test iteration order.
+ this.contents = contents.clone();
+ this.type = type;
+ this.allowNulls = allowNulls;
+
+ if (!allowNulls) {
+ for (Object element : contents) {
+ Helpers.checkNotNull(element);
+ }
+ }
+ }
+
+ @Override public int size() {
+ return contents.length;
+ }
+
+ @Override public boolean contains(Object object) {
+ if (!allowNulls) {
+ Helpers.checkNotNull(object); // behave badly
+ }
+ type.cast(object); // behave badly
+ return Arrays.asList(contents).contains(object);
+ }
+
+ @Override public boolean containsAll(Collection<?> collection) {
+ if (!allowNulls) {
+ for (Object object : collection) {
+ Helpers.checkNotNull(object); // behave badly
+ }
+ }
+ return super.containsAll(collection);
+ }
+
+ @Override public Iterator<E> iterator() {
+ return Arrays.asList(contents).iterator();
+ }
+
+ @Override public Object[] toArray() {
+ Object[] result = new Object[contents.length];
+ System.arraycopy(contents, 0, result, 0, contents.length);
+ return result;
+ }
+
+ /*
+ * a "type A" unmodifiable collection freaks out proactively, even if there
+ * wasn't going to be any actual work to do anyway
+ */
+
+ @Override public boolean addAll(Collection<? extends E> elementsToAdd) {
+ throw up();
+ }
+ @Override public boolean removeAll(Collection<?> elementsToRemove) {
+ throw up();
+ }
+ @Override public boolean retainAll(Collection<?> elementsToRetain) {
+ throw up();
+ }
+ @Override public void clear() {
+ throw up();
+ }
+ private static UnsupportedOperationException up() {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/MinimalIterable.java b/testfw/com/google/common/collect/testing/MinimalIterable.java
new file mode 100644
index 0000000..592273f
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/MinimalIterable.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+
+/**
+ * An implementation of {@code Iterable} which throws an exception on all
+ * invocations of the {@link #iterator()} method after the first, and whose
+ * iterator is always unmodifiable.
+ *
+ * <p>The {@code Iterable} specification does not make it absolutely clear what
+ * should happen on a second invocation, so implementors have made various
+ * choices, including:
+ *
+ * <ul>
+ * <li>returning the same iterator again
+ * <li>throwing an exception of some kind
+ * <li>or the usual, <i>robust</i> behavior, which all known {@link Collection}
+ * implementations have, of returning a new, independent iterator
+ * </ul>
+ *
+ * Because of this situation, any public method accepting an iterable should
+ * invoke the {@code iterator} method only once, and should be tested using this
+ * class. Exceptions to this rule should be clearly documented.
+ *
+ * <p>Note that although your APIs should be liberal in what they accept, your
+ * methods which <i>return</i> iterables should make every attempt to return
+ * ones of the robust variety.
+ *
+ * <p>This testing utility is not thread-safe.
+ *
+ * @author Kevin Bourrillion
+ */
+public final class MinimalIterable<E> implements Iterable<E> {
+ /**
+ * Returns an iterable whose iterator returns the given elements in order.
+ */
+ public static <E> MinimalIterable<E> of(E... elements) {
+ // Make sure to get an unmodifiable iterator
+ return new MinimalIterable<E>(Arrays.asList(elements).iterator());
+ }
+
+ /**
+ * Returns an iterable whose iterator returns the given elements in order.
+ * The elements are copied out of the source collection at the time this
+ * method is called.
+ */
+ @SuppressWarnings("unchecked") // Es come in, Es go out
+ public static <E> MinimalIterable<E> from(final Collection<E> elements) {
+ return (MinimalIterable) of(elements.toArray());
+ }
+
+ private Iterator<E> iterator;
+
+ private MinimalIterable(Iterator<E> iterator) {
+ this.iterator = iterator;
+ }
+
+ public Iterator<E> iterator() {
+ if (iterator == null) {
+ // TODO: throw something else? Do we worry that people's code and tests
+ // might be relying on this particular type of exception?
+ throw new IllegalStateException();
+ }
+ try {
+ return iterator;
+ } finally {
+ iterator = null;
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/MinimalSet.java b/testfw/com/google/common/collect/testing/MinimalSet.java
new file mode 100644
index 0000000..ed7a7e4
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/MinimalSet.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * A simplistic set which implements the bare minimum so that it can be used in
+ * tests without relying on any specific Set implementations. Slow. Explicitly
+ * allows null elements so that they can be used in the testers.
+ *
+ * @author Regina O'Dell
+ */
+public class MinimalSet<E> extends MinimalCollection<E> implements Set<E> {
+ public static <E> MinimalSet<E> of(E... contents) {
+ return ofClassAndContents(Object.class, Arrays.asList(contents));
+ }
+
+ public static <E> MinimalSet<E> from(Collection<? extends E> contents) {
+ return ofClassAndContents(Object.class, contents);
+ }
+
+ @SuppressWarnings("unchecked") // array creation
+ public static <E> MinimalSet<E> ofClassAndContents(Class<? super E> type,
+ Iterable<? extends E> contents) {
+ List<E> setContents = new ArrayList<E>();
+ for (E e : contents) {
+ if (!setContents.contains(e)) {
+ setContents.add(e);
+ }
+ }
+ E[] emptyArray = (E[]) Array.newInstance(type, 0);
+ return new MinimalSet<E>(type, setContents.toArray(emptyArray));
+ }
+
+ private MinimalSet(Class<? super E> type, E... contents) {
+ super(type, true, contents);
+ }
+
+ /*
+ * equals() and hashCode() are more specific in the Set contract.
+ */
+
+ @Override public boolean equals(Object object) {
+ if (object instanceof Set) {
+ Set<?> that = (Set<?>) object;
+ return (this.size() == that.size()) && this.containsAll(that);
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ int hashCodeSum = 0;
+ for (Object o : this) {
+ hashCodeSum += (o == null) ? 0 : o.hashCode();
+ }
+ return hashCodeSum;
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/OneSizeTestContainerGenerator.java b/testfw/com/google/common/collect/testing/OneSizeTestContainerGenerator.java
new file mode 100644
index 0000000..aaba313
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/OneSizeTestContainerGenerator.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.util.Collection;
+
+/**
+ * The subject-generator interface accepted by Collection testers, for testing
+ * a Collection at one particular {@link CollectionSize}.
+ *
+ * This interface should not be implemented outside this package;
+ * {@link PerCollectionSizeTestSuiteBuilder} constructs instances of it from
+ * a more general {@link TestCollectionGenerator}.
+ *
+ * @author George van den Driessche
+ */
+public interface OneSizeTestContainerGenerator<T, E>
+ extends TestSubjectGenerator<T>, TestContainerGenerator<T, E> {
+ TestContainerGenerator<T, E> getInnerGenerator();
+
+ Collection<E> getSampleElements(int howMany);
+
+ CollectionSize getCollectionSize();
+}
diff --git a/testfw/com/google/common/collect/testing/PerCollectionSizeTestSuiteBuilder.java b/testfw/com/google/common/collect/testing/PerCollectionSizeTestSuiteBuilder.java
new file mode 100644
index 0000000..52f3478
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/PerCollectionSizeTestSuiteBuilder.java
@@ -0,0 +1,190 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.Feature;
+import com.google.common.collect.testing.features.FeatureUtil;
+
+import junit.framework.TestSuite;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Logger;
+
+/**
+ * This builder creates a composite test suite, containing a separate test suite
+ * for each {@link CollectionSize} present in the features specified
+ * by {@link #withFeatures(Feature...)}.
+ *
+ * @param <B> The concrete type of this builder (the 'self-type'). All the
+ * Builder methods of this class (such as {@link #named(String)}) return this
+ * type, so that Builder methods of more derived classes can be chained onto
+ * them without casting.
+ * @param <G> The type of the generator to be passed to testers in the
+ * generated test suite. An instance of G should somehow provide an
+ * instance of the class under test, plus any other information required
+ * to parameterize the test.
+ *
+ * @see FeatureSpecificTestSuiteBuilder
+ *
+ * @author George van den Driessche
+ */
+public abstract class PerCollectionSizeTestSuiteBuilder<
+ B extends PerCollectionSizeTestSuiteBuilder<B, G, T, E>,
+ G extends TestContainerGenerator<T, E>,
+ T,
+ E>
+ extends FeatureSpecificTestSuiteBuilder<B, G> {
+ private static final Logger logger = Logger.getLogger(
+ PerCollectionSizeTestSuiteBuilder.class.getName());
+
+ /**
+ * Creates a runnable JUnit test suite based on the criteria already given.
+ */
+ @Override public TestSuite createTestSuite() {
+ checkCanCreate();
+
+ String name = getName();
+ // Copy this set, so we can modify it.
+ Set<Feature<?>> features = Helpers.copyToSet(getFeatures());
+ @SuppressWarnings("unchecked")
+ List<Class<? extends AbstractTester>> testers = getTesters();
+
+ logger.fine(" Testing: " + name);
+
+ // Split out all the specified sizes.
+ Set<Feature<?>> sizesToTest =
+ Helpers.<Feature<?>>copyToSet(CollectionSize.values());
+ sizesToTest.retainAll(features);
+ features.removeAll(sizesToTest);
+
+ FeatureUtil.addImpliedFeatures(sizesToTest);
+ sizesToTest.retainAll(Arrays.asList(
+ CollectionSize.ZERO, CollectionSize.ONE, CollectionSize.SEVERAL));
+
+ logger.fine(" Sizes: " + formatFeatureSet(sizesToTest));
+
+ if (sizesToTest.isEmpty()) {
+ throw new IllegalStateException(name
+ + ": no CollectionSizes specified (check the argument to "
+ + "FeatureSpecificTestSuiteBuilder.withFeatures().)");
+ }
+
+ TestSuite suite = new TestSuite(name);
+ for (Feature<?> collectionSize : sizesToTest) {
+ String oneSizeName = String.format("%s [collection size: %s]",
+ name, collectionSize.toString().toLowerCase());
+ OneSizeGenerator<T, E> oneSizeGenerator = new OneSizeGenerator<T, E>(
+ getSubjectGenerator(), (CollectionSize) collectionSize);
+ Set<Feature<?>> oneSizeFeatures = Helpers.copyToSet(features);
+ oneSizeFeatures.add(collectionSize);
+ Set<Method> oneSizeSuppressedTests = getSuppressedTests();
+
+ OneSizeTestSuiteBuilder<T, E> oneSizeBuilder =
+ new OneSizeTestSuiteBuilder<T, E>(testers)
+ .named(oneSizeName)
+ .usingGenerator(oneSizeGenerator)
+ .withFeatures(oneSizeFeatures)
+ .suppressing(oneSizeSuppressedTests);
+ TestSuite oneSizeSuite = oneSizeBuilder.createTestSuite();
+ suite.addTest(oneSizeSuite);
+
+ for (TestSuite derivedSuite : createDerivedSuites(oneSizeBuilder)) {
+ oneSizeSuite.addTest(derivedSuite);
+ }
+ }
+ return suite;
+ }
+
+ List<TestSuite> createDerivedSuites(FeatureSpecificTestSuiteBuilder<
+ ?, ? extends OneSizeTestContainerGenerator<T, E>> parentBuilder) {
+ return new ArrayList<TestSuite>();
+ }
+
+ /** Builds a test suite for one particular {@link CollectionSize}. */
+ // Class parameters must be raw.
+ @SuppressWarnings("unchecked")
+ private static final class OneSizeTestSuiteBuilder<T, E> extends
+ FeatureSpecificTestSuiteBuilder<
+ OneSizeTestSuiteBuilder<T, E>, OneSizeGenerator<T, E>> {
+ private final List<Class<? extends AbstractTester>> testers;
+
+ public OneSizeTestSuiteBuilder(
+ List<Class<? extends AbstractTester>> testers) {
+ this.testers = testers;
+ }
+
+ @Override protected List<Class<? extends AbstractTester>> getTesters() {
+ return testers;
+ }
+ }
+
+ private static class OneSizeGenerator<T, E>
+ implements OneSizeTestContainerGenerator<T, E> {
+ private final TestContainerGenerator<T, E> generator;
+ private final CollectionSize collectionSize;
+
+ public OneSizeGenerator(TestContainerGenerator<T, E> generator,
+ CollectionSize collectionSize) {
+ this.generator = generator;
+ this.collectionSize = collectionSize;
+ }
+
+ public TestContainerGenerator<T, E> getInnerGenerator() {
+ return generator;
+ }
+
+ public SampleElements<E> samples() {
+ return generator.samples();
+ }
+
+ public T create(Object... elements) {
+ return generator.create(elements);
+ }
+
+ public E[] createArray(int length) {
+ return generator.createArray(length);
+ }
+
+ public T createTestSubject() {
+ Collection<E> elements = getSampleElements(
+ getCollectionSize().getNumElements());
+ return generator.create(elements.toArray());
+ }
+
+ public Collection<E> getSampleElements(int howMany) {
+ SampleElements<E> samples = samples();
+ @SuppressWarnings("unchecked")
+ List<E> allSampleElements = Arrays.asList(
+ samples.e0, samples.e1, samples.e2, samples.e3, samples.e4);
+ return new ArrayList<E>(allSampleElements.subList(0, howMany));
+ }
+
+ public CollectionSize getCollectionSize() {
+ return collectionSize;
+ }
+
+ public Iterable<E> order(List<E> insertionOrder) {
+ return generator.order(insertionOrder);
+ }
+ }
+} \ No newline at end of file
diff --git a/testfw/com/google/common/collect/testing/QueueTestSuiteBuilder.java b/testfw/com/google/common/collect/testing/QueueTestSuiteBuilder.java
new file mode 100644
index 0000000..b0ebf6d
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/QueueTestSuiteBuilder.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.testers.QueueElementTester;
+import com.google.common.collect.testing.testers.QueueOfferTester;
+import com.google.common.collect.testing.testers.QueuePeekTester;
+import com.google.common.collect.testing.testers.QueuePollTester;
+import com.google.common.collect.testing.testers.QueueRemoveTester;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Creates, based on your criteria, a JUnit test suite that exhaustively tests
+ * a queue implementation.
+ *
+ * @author Jared Levy
+ */
+public final class QueueTestSuiteBuilder<E>
+ extends AbstractCollectionTestSuiteBuilder<QueueTestSuiteBuilder<E>, E> {
+ public static <E> QueueTestSuiteBuilder<E> using(
+ TestQueueGenerator<E> generator) {
+ return new QueueTestSuiteBuilder<E>().usingGenerator(generator);
+ }
+
+ private boolean runCollectionTests = true;
+
+ /**
+ * Specify whether to skip the general collection tests. Call this method when
+ * testing a collection that's both a queue and a list, to avoid running the
+ * common collection tests twice. By default, collection tests do run.
+ */
+ public QueueTestSuiteBuilder<E> skipCollectionTests() {
+ runCollectionTests = false;
+ return this;
+ }
+
+ // Class parameters must be raw.
+ @SuppressWarnings("unchecked")
+ @Override protected List<Class<? extends AbstractTester>> getTesters() {
+ List<Class<? extends AbstractTester>> testers =
+ new ArrayList<Class<? extends AbstractTester>>();
+ if (runCollectionTests) {
+ testers.addAll(super.getTesters());
+ }
+
+ testers.add(QueueElementTester.class);
+ testers.add(QueueOfferTester.class);
+ testers.add(QueuePeekTester.class);
+ testers.add(QueuePollTester.class);
+ testers.add(QueueRemoveTester.class);
+ return testers;
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/ReserializingTestCollectionGenerator.java b/testfw/com/google/common/collect/testing/ReserializingTestCollectionGenerator.java
new file mode 100644
index 0000000..d06278c
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/ReserializingTestCollectionGenerator.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Reserializes the sets created by another test set generator.
+ *
+ * TODO: make CollectionTestSuiteBuilder test reserialized collections
+ *
+ * @author Jesse Wilson
+ */
+public class ReserializingTestCollectionGenerator<E>
+ implements TestCollectionGenerator<E> {
+ private final TestCollectionGenerator<E> delegate;
+
+ ReserializingTestCollectionGenerator(TestCollectionGenerator<E> delegate) {
+ this.delegate = delegate;
+ }
+
+ public static <E> ReserializingTestCollectionGenerator<E> newInstance(
+ TestCollectionGenerator<E> delegate) {
+ return new ReserializingTestCollectionGenerator<E>(delegate);
+ }
+
+ public Collection<E> create(Object... elements) {
+ return reserialize(delegate.create(elements));
+ }
+
+ @SuppressWarnings("unchecked")
+ static <T> T reserialize(T object) {
+ try {
+ ByteArrayOutputStream bytes = new ByteArrayOutputStream();
+ ObjectOutputStream out = new ObjectOutputStream(bytes);
+ out.writeObject(object);
+ ObjectInputStream in = new ObjectInputStream(
+ new ByteArrayInputStream(bytes.toByteArray()));
+ return (T) in.readObject();
+ } catch (IOException e) {
+ Helpers.fail(e, e.getMessage());
+ } catch (ClassNotFoundException e) {
+ Helpers.fail(e, e.getMessage());
+ }
+ throw new AssertionError("not reachable");
+ }
+
+ public SampleElements<E> samples() {
+ return delegate.samples();
+ }
+
+ public E[] createArray(int length) {
+ return delegate.createArray(length);
+ }
+
+ public Iterable<E> order(List<E> insertionOrder) {
+ return delegate.order(insertionOrder);
+ }
+} \ No newline at end of file
diff --git a/testfw/com/google/common/collect/testing/ReserializingTestSetGenerator.java b/testfw/com/google/common/collect/testing/ReserializingTestSetGenerator.java
new file mode 100644
index 0000000..7b83005
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/ReserializingTestSetGenerator.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Set;
+
+/**
+ * Reserializes the sets created by another test set generator.
+ *
+ * TODO: make CollectionTestSuiteBuilder test reserialized collections
+ *
+ * @author Jesse Wilson
+ */
+public class ReserializingTestSetGenerator<E>
+ extends ReserializingTestCollectionGenerator<E>
+ implements TestSetGenerator<E> {
+
+ ReserializingTestSetGenerator(TestSetGenerator<E> delegate) {
+ super(delegate);
+ }
+
+ public static <E> TestSetGenerator<E> newInstance(
+ TestSetGenerator<E> delegate) {
+ return new ReserializingTestSetGenerator<E>(delegate);
+ }
+
+ @Override public Set<E> create(Object... elements) {
+ return (Set<E>) super.create(elements);
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/SampleElements.java b/testfw/com/google/common/collect/testing/SampleElements.java
new file mode 100644
index 0000000..4f41f0b
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/SampleElements.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Map;
+
+/**
+ * A container class for the five sample elements we need for testing.
+ *
+ * @author Kevin Bourrillion
+ */
+public class SampleElements<E> {
+ // TODO(Chris Povirk): rename e3, e4 => missing1, missing2
+ public final E e0;
+ public final E e1;
+ public final E e2;
+ public final E e3;
+ public final E e4;
+
+ public SampleElements(E e0, E e1, E e2, E e3, E e4) {
+ this.e0 = e0;
+ this.e1 = e1;
+ this.e2 = e2;
+ this.e3 = e3;
+ this.e4 = e4;
+ }
+
+ public static class Strings extends SampleElements<String> {
+ public Strings() {
+ // elements aren't sorted, to better test SortedSet iteration ordering
+ super("b", "a", "c", "d", "e");
+ }
+
+ // for testing SortedSet and SortedMap methods
+ public static final String BEFORE_FIRST = "\0";
+ public static final String MIN_ELEMENT = "a";
+ public static final String AFTER_LAST = "z";
+ }
+
+ public static class Enums extends SampleElements<AnEnum> {
+ public Enums() {
+ // elements aren't sorted, to better test SortedSet iteration ordering
+ super(AnEnum.B, AnEnum.A, AnEnum.C, AnEnum.D, AnEnum.E);
+ }
+ }
+
+ public static <K, V> SampleElements<Map.Entry<K, V>> mapEntries(
+ SampleElements<K> keys, SampleElements<V> values) {
+ return new SampleElements<Map.Entry<K, V>>(
+ Helpers.mapEntry(keys.e0, values.e0),
+ Helpers.mapEntry(keys.e1, values.e1),
+ Helpers.mapEntry(keys.e2, values.e2),
+ Helpers.mapEntry(keys.e3, values.e3),
+ Helpers.mapEntry(keys.e4, values.e4));
+ }
+
+ public static class Unhashables extends SampleElements<UnhashableObject> {
+ public Unhashables() {
+ super(new UnhashableObject(1),
+ new UnhashableObject(2),
+ new UnhashableObject(3),
+ new UnhashableObject(4),
+ new UnhashableObject(5));
+ }
+ }
+
+ public static class Colliders extends SampleElements<Object> {
+ public Colliders() {
+ super(new Collider(1),
+ new Collider(2),
+ new Collider(3),
+ new Collider(4),
+ new Collider(5));
+ }
+ }
+
+ private static class Collider {
+ final int value;
+
+ Collider(int value) {
+ this.value = value;
+ }
+
+ @Override public boolean equals(Object obj) {
+ return obj instanceof Collider && ((Collider) obj).value == value;
+ }
+
+ @Override public int hashCode() {
+ return 1; // evil!
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/SetTestSuiteBuilder.java b/testfw/com/google/common/collect/testing/SetTestSuiteBuilder.java
new file mode 100644
index 0000000..106cb94
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/SetTestSuiteBuilder.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.testers.SetAddAllTester;
+import com.google.common.collect.testing.testers.SetAddTester;
+import com.google.common.collect.testing.testers.SetCreationTester;
+import com.google.common.collect.testing.testers.SetEqualsTester;
+import com.google.common.collect.testing.testers.SetHashCodeTester;
+import com.google.common.collect.testing.testers.SetRemoveTester;
+
+import java.util.List;
+
+/**
+ * Creates, based on your criteria, a JUnit test suite that exhaustively tests
+ * a Set implementation.
+ *
+ * @author George van den Driessche
+ */
+public final class SetTestSuiteBuilder<E>
+ extends AbstractCollectionTestSuiteBuilder<SetTestSuiteBuilder<E>, E> {
+ public static <E> SetTestSuiteBuilder<E> using(
+ TestSetGenerator<E> generator) {
+ return new SetTestSuiteBuilder<E>().usingGenerator(generator);
+ }
+
+ // Class parameters must be raw.
+ @SuppressWarnings("unchecked")
+ @Override protected List<Class<? extends AbstractTester>> getTesters() {
+ List<Class<? extends AbstractTester>> testers
+ = Helpers.copyToList(super.getTesters());
+
+ testers.add(SetAddAllTester.class);
+ testers.add(SetAddTester.class);
+ testers.add(SetCreationTester.class);
+ testers.add(SetHashCodeTester.class);
+ testers.add(SetEqualsTester.class);
+ testers.add(SetRemoveTester.class);
+ // SetRemoveAllTester doesn't exist because, Sets not permitting
+ // duplicate elements, there are no tests for Set.removeAll() that aren't
+ // covered by CollectionRemoveAllTester.
+ return testers;
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/SortedMapInterfaceTest.java b/testfw/com/google/common/collect/testing/SortedMapInterfaceTest.java
new file mode 100644
index 0000000..5f6aa75
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/SortedMapInterfaceTest.java
@@ -0,0 +1,217 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.NoSuchElementException;
+import java.util.SortedMap;
+
+/**
+ * Tests representing the contract of {@link SortedMap}. Concrete subclasses of
+ * this base class test conformance of concrete {@link SortedMap} subclasses to
+ * that contract.
+ *
+ * @author Jared Levy
+ */
+// TODO: Use this class to test classes besides ImmutableSortedMap.
+public abstract class SortedMapInterfaceTest<K, V>
+ extends MapInterfaceTest<K, V> {
+ protected SortedMapInterfaceTest(boolean allowsNullKeys,
+ boolean allowsNullValues, boolean supportsPut, boolean supportsRemove,
+ boolean supportsClear) {
+ super(allowsNullKeys, allowsNullValues, supportsPut, supportsRemove,
+ supportsClear);
+ }
+
+ @Override protected abstract SortedMap<K, V> makeEmptyMap()
+ throws UnsupportedOperationException;
+
+ @Override protected abstract SortedMap<K, V> makePopulatedMap()
+ throws UnsupportedOperationException;
+
+ @Override protected SortedMap<K, V> makeEitherMap() {
+ try {
+ return makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return makeEmptyMap();
+ }
+ }
+
+ @SuppressWarnings("unchecked") // Needed for null comparator
+ public void testOrdering() {
+ final SortedMap<K, V> map;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ Iterator<K> iterator = map.keySet().iterator();
+ K prior = iterator.next();
+ Comparator<? super K> comparator = map.comparator();
+ while (iterator.hasNext()) {
+ K current = iterator.next();
+ if (comparator == null) {
+ Comparable comparable = (Comparable) prior;
+ assertTrue(comparable.compareTo(current) < 0);
+ } else {
+ assertTrue(map.comparator().compare(prior, current) < 0);
+ }
+ current = prior;
+ }
+ }
+
+ public void testFirstKeyEmpty() {
+ final SortedMap<K, V> map;
+ try {
+ map = makeEmptyMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ try {
+ map.firstKey();
+ fail("Expected NoSuchElementException");
+ } catch (NoSuchElementException expected) {}
+ assertInvariants(map);
+ }
+
+ public void testFirstKeyNonEmpty() {
+ final SortedMap<K, V> map;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ K expected = map.keySet().iterator().next();
+ assertEquals(expected, map.firstKey());
+ assertInvariants(map);
+ }
+
+ public void testLastKeyEmpty() {
+ final SortedMap<K, V> map;
+ try {
+ map = makeEmptyMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ try {
+ map.lastKey();
+ fail("Expected NoSuchElementException");
+ } catch (NoSuchElementException expected) {}
+ assertInvariants(map);
+ }
+
+ public void testLastKeyNonEmpty() {
+ final SortedMap<K, V> map;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ K expected = null;
+ for (K key : map.keySet()) {
+ expected = key;
+ }
+ assertEquals(expected, map.lastKey());
+ assertInvariants(map);
+ }
+
+ private static <E> List<E> toList(Collection<E> collection) {
+ return new ArrayList<E>(collection);
+ }
+
+ private static <E> List<E> subListSnapshot(
+ List<E> list, int fromIndex, int toIndex) {
+ List<E> subList = new ArrayList<E>();
+ for (int i = fromIndex; i < toIndex; i++) {
+ subList.add(list.get(i));
+ }
+ return Collections.unmodifiableList(subList);
+ }
+
+ public void testHeadMap() {
+ final SortedMap<K, V> map;
+ try {
+ map = makeEitherMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ List<Entry<K, V>> list = toList(map.entrySet());
+ for (int i = 0; i < list.size(); i++) {
+ List<Entry<K, V>> expected = subListSnapshot(list, 0, i);
+ SortedMap<K, V> headMap = map.headMap(list.get(i).getKey());
+ assertEquals(expected, toList(headMap.entrySet()));
+ }
+ }
+
+ public void testTailMap() {
+ final SortedMap<K, V> map;
+ try {
+ map = makeEitherMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ List<Entry<K, V>> list = toList(map.entrySet());
+ for (int i = 0; i < list.size(); i++) {
+ List<Entry<K, V>> expected = subListSnapshot(list, i, list.size());
+ SortedMap<K, V> tailMap = map.tailMap(list.get(i).getKey());
+ assertEquals(expected, toList(tailMap.entrySet()));
+ }
+ }
+
+ public void testSubMap() {
+ final SortedMap<K, V> map;
+ try {
+ map = makeEitherMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ List<Entry<K, V>> list = toList(map.entrySet());
+ for (int i = 0; i < list.size(); i++) {
+ for (int j = i; j < list.size(); j++) {
+ List<Entry<K, V>> expected = subListSnapshot(list, i, j);
+ SortedMap<K, V> subMap
+ = map.subMap(list.get(i).getKey(), list.get(j).getKey());
+ assertEquals(expected, toList(subMap.entrySet()));
+ }
+ }
+ }
+
+ public void testSubMapIllegal() {
+ final SortedMap<K, V> map;
+ try {
+ map = makePopulatedMap();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ if (map.size() < 2) {
+ return;
+ }
+ Iterator<K> iterator = map.keySet().iterator();
+ K first = iterator.next();
+ K second = iterator.next();
+ try {
+ map.subMap(second, first);
+ fail("Expected IllegalArgumentException");
+ } catch (IllegalArgumentException expected) {}
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/TestCollectionGenerator.java b/testfw/com/google/common/collect/testing/TestCollectionGenerator.java
new file mode 100644
index 0000000..7c1fa54
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/TestCollectionGenerator.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Collection;
+
+/**
+ * Creates collections, containing sample elements, to be tested.
+ *
+ * @author Kevin Bourrillion
+ */
+public interface TestCollectionGenerator<E>
+ extends TestContainerGenerator<Collection<E>, E> {
+}
diff --git a/testfw/com/google/common/collect/testing/TestCollidingSetGenerator.java b/testfw/com/google/common/collect/testing/TestCollidingSetGenerator.java
new file mode 100644
index 0000000..5fab3ea
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/TestCollidingSetGenerator.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.SampleElements.Colliders;
+
+import java.util.List;
+
+/**
+ * A generator using sample elements whose hash codes all collide badly.
+ *
+ * @author Kevin Bourrillion
+ */
+public abstract class TestCollidingSetGenerator
+ implements TestSetGenerator<Object> {
+ public SampleElements<Object> samples() {
+ return new Colliders();
+ }
+
+ public Object[] createArray(int length) {
+ return new Object[length];
+ }
+
+ /** Returns the original element list, unchanged. */
+ public List<Object> order(List<Object> insertionOrder) {
+ return insertionOrder;
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/TestContainerGenerator.java b/testfw/com/google/common/collect/testing/TestContainerGenerator.java
new file mode 100644
index 0000000..5596881
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/TestContainerGenerator.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * To be implemented by test generators of things that can contain
+ * elements. Such things include both {@link Collection} and {@link Map}; since
+ * there isn't an established collective noun that encompasses both of these,
+ * 'container' is used.
+ *
+ * @author George van den Driessche
+ */
+public interface TestContainerGenerator<T, E> {
+ /**
+ * Returns the sample elements that this generate populates its container
+ * with.
+ */
+ SampleElements<E> samples();
+
+ /**
+ * Creates a new container containing the given elements. TODO: would be nice
+ * to figure out how to use E... or E[] as a parameter type, but this doesn't
+ * seem to work because Java creates an array of the erased type.
+ */
+ T create(Object ... elements);
+
+ /**
+ * Helper method to create an array of the appropriate type used by this
+ * generator. The returned array will contain only nulls.
+ */
+ E[] createArray(int length);
+
+ /**
+ * Returns the iteration ordering of elements, given the order in
+ * which they were added to the container. This method may return the
+ * original list unchanged, the original list modified in place, or a
+ * different list.
+ *
+ * <p>This method runs only when {@link CollectionFeature#KNOWN_ORDER} is
+ * specified when creating the test suite. It should never run when testing
+ * containers such as {@link java.util.HashSet}, which have a
+ * non-deterministic iteration order.
+ */
+ Iterable<E> order(List<E> insertionOrder);
+}
diff --git a/testfw/com/google/common/collect/testing/TestEnumMapGenerator.java b/testfw/com/google/common/collect/testing/TestEnumMapGenerator.java
new file mode 100644
index 0000000..1623d08
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/TestEnumMapGenerator.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * Implementation helper for {@link TestMapGenerator} for use with enum maps.
+ *
+ * @author Kevin Bourrillion
+ */
+public abstract class TestEnumMapGenerator
+ implements TestMapGenerator<AnEnum, String> {
+
+ public SampleElements<Entry<AnEnum, String>> samples() {
+ return new SampleElements<Entry<AnEnum, String>>(
+ Helpers.mapEntry(AnEnum.A, "January"),
+ Helpers.mapEntry(AnEnum.B, "February"),
+ Helpers.mapEntry(AnEnum.C, "March"),
+ Helpers.mapEntry(AnEnum.D, "April"),
+ Helpers.mapEntry(AnEnum.E, "May")
+ );
+ }
+
+ public final Map<AnEnum, String> create(Object... entries) {
+ @SuppressWarnings("unchecked")
+ Entry<AnEnum, String>[] array = new Entry[entries.length];
+ int i = 0;
+ for (Object o : entries) {
+ @SuppressWarnings("unchecked")
+ Entry<AnEnum, String> e = (Entry<AnEnum, String>) o;
+ array[i++] = e;
+ }
+ return create(array);
+ }
+
+ protected abstract Map<AnEnum, String> create(
+ Entry<AnEnum, String>[] entries);
+
+ @SuppressWarnings("unchecked")
+ public final Entry<AnEnum, String>[] createArray(int length) {
+ return new Entry[length];
+ }
+
+ public final AnEnum[] createKeyArray(int length) {
+ return new AnEnum[length];
+ }
+
+ public final String[] createValueArray(int length) {
+ return new String[length];
+ }
+
+ /** Returns the original element list, unchanged. */
+ public Iterable<Entry<AnEnum, String>> order(
+ List<Entry<AnEnum, String>> insertionOrder) {
+ return insertionOrder;
+ }
+} \ No newline at end of file
diff --git a/testfw/com/google/common/collect/testing/TestEnumSetGenerator.java b/testfw/com/google/common/collect/testing/TestEnumSetGenerator.java
new file mode 100644
index 0000000..b96b47c
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/TestEnumSetGenerator.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.SampleElements.Enums;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * An abstract TestSetGenerator for generating sets containing enum values.
+ *
+ * @author Kevin Bourrillion
+ */
+public abstract class TestEnumSetGenerator implements TestSetGenerator<AnEnum> {
+ public SampleElements<AnEnum> samples() {
+ return new Enums();
+ }
+
+ public Set<AnEnum> create(Object... elements) {
+ AnEnum[] array = new AnEnum[elements.length];
+ int i = 0;
+ for (Object e : elements) {
+ array[i++] = (AnEnum) e;
+ }
+ return create(array);
+ }
+
+ protected abstract Set<AnEnum> create(AnEnum[] elements);
+
+ public AnEnum[] createArray(int length) {
+ return new AnEnum[length];
+ }
+
+ /**
+ * Sorts the enums according to their natural ordering.
+ */
+ public List<AnEnum> order(List<AnEnum> insertionOrder) {
+ Collections.sort(insertionOrder);
+ return insertionOrder;
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/TestIteratorGenerator.java b/testfw/com/google/common/collect/testing/TestIteratorGenerator.java
new file mode 100644
index 0000000..e22955e
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/TestIteratorGenerator.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Iterator;
+
+/**
+ * Creates iterators to be tested.
+ *
+ * @param <E> the element type of the iterator.
+ *
+ * @author George van den Driessche
+ */
+public interface TestIteratorGenerator<E> {
+ Iterator<E> get();
+}
diff --git a/testfw/com/google/common/collect/testing/TestListGenerator.java b/testfw/com/google/common/collect/testing/TestListGenerator.java
new file mode 100644
index 0000000..e7499d6
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/TestListGenerator.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.List;
+
+/**
+ * Creates sets, containing sample elements, to be tested.
+ *
+ * @author Kevin Bourrillion
+ */
+public interface TestListGenerator<E> extends TestCollectionGenerator<E> {
+ List<E> create(Object... elements);
+}
diff --git a/testfw/com/google/common/collect/testing/TestMapEntrySetGenerator.java b/testfw/com/google/common/collect/testing/TestMapEntrySetGenerator.java
new file mode 100644
index 0000000..04d16e4
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/TestMapEntrySetGenerator.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Creates map entries using sample keys and sample values.
+ *
+ * @author Jesse Wilson
+ */
+public abstract class TestMapEntrySetGenerator<K, V>
+ implements TestSetGenerator<Map.Entry<K, V>> {
+ private final SampleElements<K> keys;
+ private final SampleElements<V> values;
+
+ protected TestMapEntrySetGenerator(
+ SampleElements<K> keys, SampleElements<V> values) {
+ this.keys = keys;
+ this.values = values;
+ }
+
+ public SampleElements<Map.Entry<K, V>> samples() {
+ return SampleElements.mapEntries(keys, values);
+ }
+
+ public Set<Map.Entry<K, V>> create(Object... elements) {
+ Map.Entry<K, V>[] entries = createArray(elements.length);
+ System.arraycopy(elements, 0, entries, 0, elements.length);
+ return createFromEntries(entries);
+ }
+
+ public abstract Set<Map.Entry<K, V>> createFromEntries(
+ Map.Entry<K, V>[] entries);
+
+ @SuppressWarnings("unchecked") // generic arrays make typesafety sad
+ public Map.Entry<K, V>[] createArray(int length) {
+ return new Map.Entry[length];
+ }
+
+ /** Returns the original element list, unchanged. */
+ public List<Map.Entry<K, V>> order(List<Map.Entry<K, V>> insertionOrder) {
+ return insertionOrder;
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/TestMapGenerator.java b/testfw/com/google/common/collect/testing/TestMapGenerator.java
new file mode 100644
index 0000000..bccd7ae
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/TestMapGenerator.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Map;
+
+/**
+ * Creates maps, containing sample elements, to be tested.
+ *
+ * @author George van den Driessche
+ */
+public interface TestMapGenerator<K, V>
+ extends TestContainerGenerator<Map<K, V>, Map.Entry<K, V>> {
+ K[] createKeyArray(int length);
+
+ V[] createValueArray(int length);
+}
diff --git a/testfw/com/google/common/collect/testing/TestQueueGenerator.java b/testfw/com/google/common/collect/testing/TestQueueGenerator.java
new file mode 100644
index 0000000..414124e
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/TestQueueGenerator.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Queue;
+
+/**
+ * Creates queues, containing sample elements, to be tested.
+ *
+ * @author Jared Levy
+ */
+public interface TestQueueGenerator<E> extends TestCollectionGenerator<E> {
+ Queue<E> create(Object... elements);
+}
diff --git a/testfw/com/google/common/collect/testing/TestSetGenerator.java b/testfw/com/google/common/collect/testing/TestSetGenerator.java
new file mode 100644
index 0000000..03286a5
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/TestSetGenerator.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Set;
+
+/**
+ * Creates sets, containing sample elements, to be tested.
+ *
+ * @author Kevin Bourrillion
+ */
+public interface TestSetGenerator<E> extends TestCollectionGenerator<E> {
+ Set<E> create(Object... elements);
+}
diff --git a/testfw/com/google/common/collect/testing/TestStringCollectionGenerator.java b/testfw/com/google/common/collect/testing/TestStringCollectionGenerator.java
new file mode 100644
index 0000000..1d03220
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/TestStringCollectionGenerator.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.SampleElements.Strings;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * String creation for testing arbitrary collections.
+ *
+ * @author Jared Levy
+ */
+public abstract class TestStringCollectionGenerator
+ implements TestCollectionGenerator<String> {
+ public SampleElements<String> samples() {
+ return new Strings();
+ }
+
+ public Collection<String> create(Object... elements) {
+ String[] array = new String[elements.length];
+ int i = 0;
+ for (Object e : elements) {
+ array[i++] = (String) e;
+ }
+ return create(array);
+ }
+
+ protected abstract Collection<String> create(String[] elements);
+
+ public String[] createArray(int length) {
+ return new String[length];
+ }
+
+ /** Returns the original element list, unchanged. */
+ public List<String> order(List<String> insertionOrder) {
+ return insertionOrder;
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/TestStringListGenerator.java b/testfw/com/google/common/collect/testing/TestStringListGenerator.java
new file mode 100644
index 0000000..3717414
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/TestStringListGenerator.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.SampleElements.Strings;
+
+import java.util.List;
+
+/**
+ * TODO: javadoc.
+ *
+ * @author Kevin Bourrillion
+ */
+public abstract class TestStringListGenerator
+ implements TestListGenerator<String> {
+ public SampleElements<String> samples() {
+ return new Strings();
+ }
+
+ public List<String> create(Object... elements) {
+ String[] array = new String[elements.length];
+ int i = 0;
+ for (Object e : elements) {
+ array[i++] = (String) e;
+ }
+ return create(array);
+ }
+
+ /**
+ * Creates a new collection containing the given elements; implement this
+ * method instead of {@link #create(Object...)}.
+ */
+ protected abstract List<String> create(String[] elements);
+
+ public String[] createArray(int length) {
+ return new String[length];
+ }
+
+ /** Returns the original element list, unchanged. */
+ public List<String> order(List<String> insertionOrder) {
+ return insertionOrder;
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/TestStringMapGenerator.java b/testfw/com/google/common/collect/testing/TestStringMapGenerator.java
new file mode 100644
index 0000000..9cc6959
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/TestStringMapGenerator.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * Implementation helper for {@link TestMapGenerator} for use with maps of
+ * strings.
+ *
+ * @author Chris Povirk
+ * @author Jared Levy
+ * @author George van den Driessche
+ */
+public abstract class TestStringMapGenerator
+ implements TestMapGenerator<String, String> {
+
+ public SampleElements<Map.Entry<String, String>> samples() {
+ return new SampleElements<Map.Entry<String, String>>(
+ Helpers.mapEntry("one", "January"),
+ Helpers.mapEntry("two", "February"),
+ Helpers.mapEntry("three", "March"),
+ Helpers.mapEntry("four", "April"),
+ Helpers.mapEntry("five", "May")
+ );
+ }
+
+ public final Map<String, String> create(Object... entries) {
+ @SuppressWarnings("unchecked")
+ Entry<String, String>[] array = new Entry[entries.length];
+ int i = 0;
+ for (Object o : entries) {
+ @SuppressWarnings("unchecked")
+ Entry<String, String> e = (Entry<String, String>) o;
+ array[i++] = e;
+ }
+ return create(array);
+ }
+
+ protected abstract Map<String, String> create(
+ Entry<String, String>[] entries);
+
+ @SuppressWarnings("unchecked")
+ public final Entry<String, String>[] createArray(int length) {
+ return new Entry[length];
+ }
+
+ public final String[] createKeyArray(int length) {
+ return new String[length];
+ }
+
+ public final String[] createValueArray(int length) {
+ return new String[length];
+ }
+
+ /** Returns the original element list, unchanged. */
+ public Iterable<Entry<String, String>> order(
+ List<Entry<String, String>> insertionOrder) {
+ return insertionOrder;
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/TestStringQueueGenerator.java b/testfw/com/google/common/collect/testing/TestStringQueueGenerator.java
new file mode 100644
index 0000000..e73ff55
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/TestStringQueueGenerator.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.SampleElements.Strings;
+
+import java.util.List;
+import java.util.Queue;
+
+/**
+ * Create queue of strings for tests.
+ *
+ * @author Jared Levy
+ */
+public abstract class TestStringQueueGenerator
+ implements TestQueueGenerator<String>
+{
+ public SampleElements<String> samples() {
+ return new Strings();
+ }
+
+ public Queue<String> create(Object... elements) {
+ String[] array = new String[elements.length];
+ int i = 0;
+ for (Object e : elements) {
+ array[i++] = (String) e;
+ }
+ return create(array);
+ }
+
+ protected abstract Queue<String> create(String[] elements);
+
+ public String[] createArray(int length) {
+ return new String[length];
+ }
+
+ /** Returns the original element list, unchanged. */
+ public List<String> order(List<String> insertionOrder) {
+ return insertionOrder;
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/TestStringSetGenerator.java b/testfw/com/google/common/collect/testing/TestStringSetGenerator.java
new file mode 100644
index 0000000..1216e6e
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/TestStringSetGenerator.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.SampleElements.Strings;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Create string sets for collection tests.
+ *
+ * @author Kevin Bourrillion
+ */
+public abstract class TestStringSetGenerator implements TestSetGenerator<String>
+{
+ public SampleElements<String> samples() {
+ return new Strings();
+ }
+
+ public Set<String> create(Object... elements) {
+ String[] array = new String[elements.length];
+ int i = 0;
+ for (Object e : elements) {
+ array[i++] = (String) e;
+ }
+ return create(array);
+ }
+
+ protected abstract Set<String> create(String[] elements);
+
+ public String[] createArray(int length) {
+ return new String[length];
+ }
+
+ /** Returns the original element list, unchanged. */
+ public List<String> order(List<String> insertionOrder) {
+ return insertionOrder;
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/TestStringSortedSetGenerator.java b/testfw/com/google/common/collect/testing/TestStringSortedSetGenerator.java
new file mode 100644
index 0000000..1bb06f0
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/TestStringSortedSetGenerator.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.SortedSet;
+
+/**
+ * Create string sets for testing collections that are sorted by natural
+ * ordering.
+ *
+ * @author Jared Levy
+ */
+public abstract class TestStringSortedSetGenerator
+ extends TestStringSetGenerator {
+ @Override protected abstract SortedSet<String> create(String[] elements);
+
+ /** Sorts the elements by their natural ordering. */
+ @Override public List<String> order(List<String> insertionOrder) {
+ Collections.sort(insertionOrder);
+ return insertionOrder;
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/TestSubjectGenerator.java b/testfw/com/google/common/collect/testing/TestSubjectGenerator.java
new file mode 100644
index 0000000..b996c99
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/TestSubjectGenerator.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+/**
+ * To be implemented by test generators that can produce test subjects without
+ * requiring any parameters.
+ *
+ * @param <T> the type created by this generator.
+ *
+ * @author George van den Driessche
+ */
+public interface TestSubjectGenerator<T> {
+ T createTestSubject();
+}
diff --git a/testfw/com/google/common/collect/testing/TestUnhashableCollectionGenerator.java b/testfw/com/google/common/collect/testing/TestUnhashableCollectionGenerator.java
new file mode 100644
index 0000000..78e1396
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/TestUnhashableCollectionGenerator.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.SampleElements.Unhashables;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Creates collections containing unhashable sample elements, to be tested.
+ *
+ * @author Regina O'Dell
+ */
+public abstract class
+ TestUnhashableCollectionGenerator<T extends Collection<UnhashableObject>>
+ implements TestCollectionGenerator<UnhashableObject> {
+ public SampleElements<UnhashableObject> samples() {
+ return new Unhashables();
+ }
+
+ public T create(Object... elements) {
+ UnhashableObject[] array = createArray(elements.length);
+ int i = 0;
+ for (Object e : elements) {
+ array[i++] = (UnhashableObject) e;
+ }
+ return create(array);
+ }
+
+ /**
+ * Creates a new collection containing the given elements; implement this
+ * method instead of {@link #create(Object...)}.
+ */
+ protected abstract T create(UnhashableObject[] elements);
+
+ public UnhashableObject[] createArray(int length) {
+ return new UnhashableObject[length];
+ }
+
+ public Iterable<UnhashableObject> order(
+ List<UnhashableObject> insertionOrder) {
+ return insertionOrder;
+ }
+} \ No newline at end of file
diff --git a/testfw/com/google/common/collect/testing/TestsForListsInJavaUtil.java b/testfw/com/google/common/collect/testing/TestsForListsInJavaUtil.java
new file mode 100644
index 0000000..e89a0f0
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/TestsForListsInJavaUtil.java
@@ -0,0 +1,277 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.ListFeature;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import java.lang.reflect.Method;
+import java.util.AbstractList;
+import java.util.AbstractSequentialList;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+/**
+ * Generates a test suite covering the {@link List} implementations in the
+ * {@link java.util} package. Can be subclassed to specify tests that should
+ * be suppressed.
+ *
+ * @author Kevin Bourrillion
+ */
+public class TestsForListsInJavaUtil {
+ public static Test suite() {
+ return new TestsForListsInJavaUtil().allTests();
+ }
+
+ public Test allTests() {
+ TestSuite suite = new TestSuite("java.util Lists");
+ suite.addTest(testsForEmptyList());
+ suite.addTest(testsForSingletonList());
+ suite.addTest(testsForArraysAsList());
+ suite.addTest(testsForArrayList());
+ suite.addTest(testsForLinkedList());
+ suite.addTest(testsForCopyOnWriteArrayList());
+ suite.addTest(testsForUnmodifiableList());
+ suite.addTest(testsForCheckedList());
+ suite.addTest(testsForAbstractList());
+ suite.addTest(testsForAbstractSequentialList());
+ return suite;
+ }
+
+ protected Collection<Method> suppressForEmptyList() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForSingletonList() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForArraysAsList() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForArrayList() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForLinkedList() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForCopyOnWriteArrayList() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForUnmodifiableList() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForCheckedList() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForAbstractList() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForAbstractSequentialList() {
+ return Collections.emptySet();
+ }
+
+ public Test testsForEmptyList() {
+ return ListTestSuiteBuilder
+ .using(new TestStringListGenerator() {
+ @Override public List<String> create(String[] elements) {
+ return Collections.emptyList();
+ }
+ })
+ .named("emptyList")
+ .withFeatures(
+ CollectionFeature.NONE,
+ CollectionSize.ZERO)
+ .suppressing(suppressForEmptyList())
+ .createTestSuite();
+ }
+
+ public Test testsForSingletonList() {
+ return ListTestSuiteBuilder
+ .using(new TestStringListGenerator() {
+ @Override public List<String> create(String[] elements) {
+ return Collections.singletonList(elements[0]);
+ }
+ })
+ .named("singletonList")
+ .withFeatures(
+ CollectionFeature.NONE,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionSize.ONE)
+ .suppressing(suppressForSingletonList())
+ .createTestSuite();
+ }
+
+ public Test testsForArraysAsList() {
+ return ListTestSuiteBuilder
+ .using(new TestStringListGenerator() {
+ @Override public List<String> create(String[] elements) {
+ return Arrays.asList(elements.clone());
+ }
+ })
+ .named("Arrays.asList")
+ .withFeatures(
+ ListFeature.SUPPORTS_SET,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionSize.ANY)
+ .suppressing(suppressForArraysAsList())
+ .createTestSuite();
+ }
+
+ public Test testsForArrayList() {
+ return ListTestSuiteBuilder
+ .using(new TestStringListGenerator() {
+ @Override public List<String> create(String[] elements) {
+ return new ArrayList<String>(MinimalCollection.of(elements));
+ }
+ })
+ .named("ArrayList")
+ .withFeatures(
+ ListFeature.GENERAL_PURPOSE,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionSize.ANY)
+ .suppressing(suppressForArrayList())
+ .createTestSuite();
+ }
+
+ public Test testsForLinkedList() {
+ return ListTestSuiteBuilder
+ .using(new TestStringListGenerator() {
+ @Override public List<String> create(String[] elements) {
+ return new LinkedList<String>(MinimalCollection.of(elements));
+ }
+ })
+ .named("LinkedList")
+ .withFeatures(
+ ListFeature.GENERAL_PURPOSE,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionSize.ANY)
+ .suppressing(suppressForLinkedList())
+ .createTestSuite();
+ }
+
+ public Test testsForCopyOnWriteArrayList() {
+ return ListTestSuiteBuilder
+ .using(new TestStringListGenerator() {
+ @Override public List<String> create(String[] elements) {
+ return new CopyOnWriteArrayList<String>(
+ MinimalCollection.of(elements));
+ }
+ })
+ .named("CopyOnWriteArrayList")
+ .withFeatures(
+ ListFeature.GENERAL_PURPOSE,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionSize.ANY)
+ .suppressing(suppressForCopyOnWriteArrayList())
+ .createTestSuite();
+ }
+
+ public Test testsForUnmodifiableList() {
+ return ListTestSuiteBuilder
+ .using(new TestStringListGenerator() {
+ @Override public List<String> create(String[] elements) {
+ List<String> innerList = new ArrayList<String>();
+ Collections.addAll(innerList, elements);
+ return Collections.unmodifiableList(innerList);
+ }
+ })
+ .named("unmodifiableList/ArrayList")
+ .withFeatures(
+ CollectionFeature.NONE,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionSize.ANY)
+ .suppressing(suppressForUnmodifiableList())
+ .createTestSuite();
+ }
+
+ public Test testsForCheckedList() {
+ return ListTestSuiteBuilder
+ .using(new TestStringListGenerator() {
+ @Override public List<String> create(String[] elements) {
+ List<String> innerList = new ArrayList<String>();
+ Collections.addAll(innerList, elements);
+ return Collections.checkedList(innerList, String.class);
+ }
+ })
+ .named("checkedList/ArrayList")
+ .withFeatures(
+ ListFeature.GENERAL_PURPOSE,
+ CollectionFeature.RESTRICTS_ELEMENTS,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionSize.ANY)
+ .suppressing(suppressForCheckedList())
+ .createTestSuite();
+ }
+
+ public Test testsForAbstractList() {
+ return ListTestSuiteBuilder
+ .using(new TestStringListGenerator () {
+ @Override protected List<String> create(final String[] elements) {
+ return new AbstractList<String>() {
+ @Override public int size() {
+ return elements.length;
+ }
+ @Override public String get(int index) {
+ return elements[index];
+ }
+ };
+ }
+ })
+ .named("AbstractList")
+ .withFeatures(
+ CollectionFeature.NONE,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionSize.ANY)
+ .suppressing(suppressForAbstractList())
+ .createTestSuite();
+ }
+
+ public Test testsForAbstractSequentialList() {
+ return ListTestSuiteBuilder
+ .using(new TestStringListGenerator () {
+ @Override protected List<String> create(final String[] elements) {
+ // For this test we trust ArrayList works
+ final List<String> list = new ArrayList<String>();
+ Collections.addAll(list, elements);
+ return new AbstractSequentialList<String>() {
+ @Override public int size() {
+ return list.size();
+ }
+ @Override public ListIterator<String> listIterator(int index) {
+ return list.listIterator(index);
+ }
+ };
+ }
+ })
+ .named("AbstractSequentialList")
+ .withFeatures(
+ ListFeature.GENERAL_PURPOSE,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionSize.ANY)
+ .suppressing(suppressForAbstractSequentialList())
+ .createTestSuite();
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/TestsForMapsInJavaUtil.java b/testfw/com/google/common/collect/testing/TestsForMapsInJavaUtil.java
new file mode 100644
index 0000000..c04dbe1
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/TestsForMapsInJavaUtil.java
@@ -0,0 +1,235 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.MapFeature;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import java.lang.reflect.Method;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.EnumMap;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.TreeMap;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Generates a test suite covering the {@link Map} implementations in the
+ * {@link java.util} package. Can be subclassed to specify tests that should
+ * be suppressed.
+ *
+ * @author Kevin Bourrillion
+ */
+public class TestsForMapsInJavaUtil {
+ public static Test suite() {
+ return new TestsForMapsInJavaUtil().allTests();
+ }
+
+ public Test allTests() {
+ TestSuite suite = new TestSuite("java.util Maps");
+ suite.addTest(testsForEmptyMap());
+ suite.addTest(testsForSingletonMap());
+ suite.addTest(testsForHashMap());
+ suite.addTest(testsForLinkedHashMap());
+ suite.addTest(testsForTreeMap());
+ suite.addTest(testsForEnumMap());
+ suite.addTest(testsForConcurrentHashMap());
+ return suite;
+ }
+
+ protected Collection<Method> suppressForEmptyMap() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForSingletonMap() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForHashMap() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForLinkedHashMap() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForTreeMap() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForEnumMap() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForConcurrentHashMap() {
+ return Collections.emptySet();
+ }
+
+ public Test testsForEmptyMap() {
+ return MapTestSuiteBuilder
+ .using(new TestStringMapGenerator() {
+ @Override protected Map<String, String> create(
+ Entry<String, String>[] entries) {
+ return Collections.emptyMap();
+ }
+ })
+ .named("emptyMap")
+ .withFeatures(
+ CollectionFeature.NONE,
+ CollectionSize.ZERO)
+ .suppressing(suppressForEmptyMap())
+ .createTestSuite();
+ }
+
+ public Test testsForSingletonMap() {
+ return MapTestSuiteBuilder
+ .using(new TestStringMapGenerator() {
+ @Override protected Map<String, String> create(
+ Entry<String, String>[] entries) {
+ return Collections.singletonMap(
+ entries[0].getKey(), entries[0].getValue());
+ }
+ })
+ .named("singletonMap")
+ .withFeatures(
+ MapFeature.ALLOWS_NULL_KEYS,
+ MapFeature.ALLOWS_NULL_VALUES,
+ CollectionSize.ONE)
+ .suppressing(suppressForSingletonMap())
+ .createTestSuite();
+ }
+
+ public Test testsForHashMap() {
+ return MapTestSuiteBuilder
+ .using(new TestStringMapGenerator() {
+ @Override protected Map<String, String> create(
+ Entry<String, String>[] entries) {
+ return toHashMap(entries);
+ }
+ })
+ .named("HashMap")
+ .withFeatures(
+ MapFeature.GENERAL_PURPOSE,
+ MapFeature.ALLOWS_NULL_KEYS,
+ MapFeature.ALLOWS_NULL_VALUES,
+ CollectionSize.ANY)
+ .suppressing(suppressForHashMap())
+ .createTestSuite();
+ }
+
+ public Test testsForLinkedHashMap() {
+ return MapTestSuiteBuilder
+ .using(new TestStringMapGenerator() {
+ @Override protected Map<String, String> create(
+ Entry<String, String>[] entries) {
+ return populate(new LinkedHashMap<String, String>(), entries);
+ }
+ })
+ .named("LinkedHashMap")
+ .withFeatures(
+ MapFeature.GENERAL_PURPOSE,
+ MapFeature.ALLOWS_NULL_KEYS,
+ MapFeature.ALLOWS_NULL_VALUES,
+ CollectionFeature.KNOWN_ORDER,
+ CollectionSize.ANY)
+ .suppressing(suppressForLinkedHashMap())
+ .createTestSuite();
+ }
+
+ public Test testsForTreeMap() {
+ return MapTestSuiteBuilder
+ .using(new TestStringMapGenerator() {
+ @Override protected Map<String, String> create(
+ Entry<String, String>[] entries) {
+ return populate(new TreeMap<String, String>(
+ arbitraryNullFriendlyComparator()), entries);
+ }
+ })
+ .named("TreeMap")
+ .withFeatures(
+ MapFeature.GENERAL_PURPOSE,
+ MapFeature.ALLOWS_NULL_KEYS,
+ MapFeature.ALLOWS_NULL_VALUES,
+ CollectionFeature.KNOWN_ORDER,
+ CollectionSize.ANY)
+ .suppressing(suppressForTreeMap())
+ .createTestSuite();
+ }
+
+ public Test testsForEnumMap() {
+ return MapTestSuiteBuilder
+ .using(new TestEnumMapGenerator() {
+ @Override protected Map<AnEnum, String> create(
+ Entry<AnEnum, String>[] entries) {
+ return populate(
+ new EnumMap<AnEnum, String>(AnEnum.class), entries);
+ }
+ })
+ .named("EnumMap")
+ .withFeatures(
+ MapFeature.GENERAL_PURPOSE,
+ MapFeature.ALLOWS_NULL_VALUES,
+ MapFeature.RESTRICTS_KEYS,
+ CollectionFeature.KNOWN_ORDER,
+ CollectionSize.ANY)
+ .suppressing(suppressForEnumMap())
+ .createTestSuite();
+ }
+
+ public Test testsForConcurrentHashMap() {
+ return MapTestSuiteBuilder
+ .using(new TestStringMapGenerator() {
+ @Override protected Map<String, String> create(
+ Entry<String, String>[] entries) {
+ return populate(new ConcurrentHashMap<String, String>(), entries);
+ }
+ })
+ .named("ConcurrentHashMap")
+ .withFeatures(
+ MapFeature.GENERAL_PURPOSE,
+ CollectionSize.ANY)
+ .suppressing(suppressForConcurrentHashMap())
+ .createTestSuite();
+ }
+
+ // TODO: IdentityHashMap, AbstractMap
+
+ private static Map<String, String> toHashMap(
+ Entry<String, String>[] entries) {
+ return populate(new HashMap<String, String>(), entries);
+ }
+
+ // TODO: call conversion constructors or factory methods instead of using
+ // populate() on an empty map
+ private static <T> Map<T, String> populate(
+ Map<T, String> map, Entry<T, String>[] entries) {
+ for (Entry<T, String> entry : entries) {
+ map.put(entry.getKey(), entry.getValue());
+ }
+ return map;
+ }
+
+ static <T> Comparator<T> arbitraryNullFriendlyComparator() {
+ return new Comparator<T>() {
+ public int compare(T left, T right) {
+ return String.valueOf(left).compareTo(String.valueOf(right));
+ }
+ };
+ }
+} \ No newline at end of file
diff --git a/testfw/com/google/common/collect/testing/TestsForQueuesInJavaUtil.java b/testfw/com/google/common/collect/testing/TestsForQueuesInJavaUtil.java
new file mode 100644
index 0000000..2b149a6
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/TestsForQueuesInJavaUtil.java
@@ -0,0 +1,182 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import java.lang.reflect.Method;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.PriorityQueue;
+import java.util.Queue;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.PriorityBlockingQueue;
+
+/**
+ * Generates a test suite covering the {@link Queue} implementations in the
+ * {@link java.util} package. Can be subclassed to specify tests that should
+ * be suppressed.
+ *
+ * @author Jared Levy
+ */
+public class TestsForQueuesInJavaUtil {
+ public static Test suite() {
+ return new TestsForQueuesInJavaUtil().allTests();
+ }
+
+ public Test allTests() {
+ TestSuite suite = new TestSuite();
+ suite.addTest(testsForLinkedList());
+ suite.addTest(testsForArrayBlockingQueue());
+ suite.addTest(testsForConcurrentLinkedQueue());
+ suite.addTest(testsForLinkedBlockingQueue());
+ suite.addTest(testsForPriorityBlockingQueue());
+ suite.addTest(testsForPriorityQueue());
+ return suite;
+ }
+
+ protected Collection<Method> suppressForLinkedList() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForArrayBlockingQueue() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForConcurrentLinkedQueue() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForLinkedBlockingQueue() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForPriorityBlockingQueue() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForPriorityQueue() {
+ return Collections.emptySet();
+ }
+
+ public Test testsForLinkedList() {
+ return QueueTestSuiteBuilder
+ .using(new TestStringQueueGenerator() {
+ @Override public Queue<String> create(String[] elements) {
+ return new LinkedList<String>(MinimalCollection.of(elements));
+ }
+ })
+ .named("LinkedList")
+ .withFeatures(
+ CollectionFeature.GENERAL_PURPOSE,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionFeature.KNOWN_ORDER,
+ CollectionSize.ANY)
+ .skipCollectionTests() // already covered in TestsForListsInJavaUtil
+ .suppressing(suppressForLinkedList())
+ .createTestSuite();
+ }
+
+ public Test testsForArrayBlockingQueue() {
+ return QueueTestSuiteBuilder
+ .using(new TestStringQueueGenerator() {
+ @Override public Queue<String> create(String[] elements) {
+ return new ArrayBlockingQueue<String>(
+ 100, false, MinimalCollection.of(elements));
+ }
+ })
+ .named("ArrayBlockingQueue")
+ .withFeatures(
+ CollectionFeature.GENERAL_PURPOSE,
+ CollectionFeature.KNOWN_ORDER,
+ CollectionSize.ANY)
+ .suppressing(suppressForArrayBlockingQueue())
+ .createTestSuite();
+ }
+
+ public Test testsForConcurrentLinkedQueue() {
+ return QueueTestSuiteBuilder
+ .using(new TestStringQueueGenerator() {
+ @Override public Queue<String> create(String[] elements) {
+ return new ConcurrentLinkedQueue<String>(
+ MinimalCollection.of(elements));
+ }
+ })
+ .named("ConcurrentLinkedQueue")
+ .withFeatures(
+ CollectionFeature.GENERAL_PURPOSE,
+ CollectionFeature.KNOWN_ORDER,
+ CollectionSize.ANY)
+ .suppressing(suppressForConcurrentLinkedQueue())
+ .createTestSuite();
+ }
+
+ public Test testsForLinkedBlockingQueue() {
+ return QueueTestSuiteBuilder
+ .using(new TestStringQueueGenerator() {
+ @Override public Queue<String> create(String[] elements) {
+ return new LinkedBlockingQueue<String>(
+ MinimalCollection.of(elements));
+ }
+ })
+ .named("LinkedBlockingQueue")
+ .withFeatures(
+ CollectionFeature.GENERAL_PURPOSE,
+ CollectionFeature.KNOWN_ORDER,
+ CollectionSize.ANY)
+ .suppressing(suppressForLinkedBlockingQueue())
+ .createTestSuite();
+ }
+
+ // Not specifying KNOWN_ORDER for PriorityQueue and PriorityBlockingQueue
+ // even though they do have it, because our tests interpret KNOWN_ORDER to
+ // also mean that the iterator returns the head element first, which those
+ // don't.
+
+ public Test testsForPriorityBlockingQueue() {
+ return QueueTestSuiteBuilder
+ .using(new TestStringQueueGenerator() {
+ @Override public Queue<String> create(String[] elements) {
+ return new PriorityBlockingQueue<String>(
+ MinimalCollection.of(elements));
+ }
+ })
+ .named("PriorityBlockingQueue")
+ .withFeatures(
+ CollectionFeature.GENERAL_PURPOSE,
+ CollectionSize.ANY)
+ .suppressing(suppressForPriorityBlockingQueue())
+ .createTestSuite();
+ }
+
+ public Test testsForPriorityQueue() {
+ return QueueTestSuiteBuilder
+ .using(new TestStringQueueGenerator() {
+ @Override public Queue<String> create(String[] elements) {
+ return new PriorityQueue<String>(MinimalCollection.of(elements));
+ }
+ })
+ .named("PriorityQueue")
+ .withFeatures(
+ CollectionFeature.GENERAL_PURPOSE,
+ CollectionSize.ANY)
+ .suppressing(suppressForPriorityQueue())
+ .createTestSuite();
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/TestsForSetsInJavaUtil.java b/testfw/com/google/common/collect/testing/TestsForSetsInJavaUtil.java
new file mode 100644
index 0000000..28998e4
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/TestsForSetsInJavaUtil.java
@@ -0,0 +1,332 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.SetFeature;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import java.lang.reflect.Method;
+import java.util.AbstractSet;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.EnumSet;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+/**
+ * Generates a test suite covering the {@link Set} implementations in the
+ * {@link java.util} package. Can be subclassed to specify tests that should
+ * be suppressed.
+ *
+ * @author Kevin Bourrillion
+ */
+public class TestsForSetsInJavaUtil {
+ public static Test suite() {
+ return new TestsForSetsInJavaUtil().allTests();
+ }
+
+ public Test allTests() {
+ TestSuite suite = new TestSuite("java.util Sets");
+ suite.addTest(testsForEmptySet());
+ suite.addTest(testsForSingletonSet());
+ suite.addTest(testsForHashSet());
+ suite.addTest(testsForLinkedHashSet());
+ suite.addTest(testsForEnumSet());
+ suite.addTest(testsForTreeSetNatural());
+ suite.addTest(testsForTreeSetWithComparator());
+ suite.addTest(testsForCopyOnWriteArraySet());
+ suite.addTest(testsForUnmodifiableSet());
+ suite.addTest(testsForCheckedSet());
+ suite.addTest(testsForAbstractSet());
+ suite.addTest(testsForBadlyCollidingHashSet());
+
+ return suite;
+ }
+
+ protected Collection<Method> suppressForEmptySet() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForSingletonSet() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForHashSet() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForLinkedHashSet() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForEnumSet() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForTreeSetNatural() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForTreeSetWithComparator() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForCopyOnWriteArraySet() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForUnmodifiableSet() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForCheckedSet() {
+ return Collections.emptySet();
+ }
+ protected Collection<Method> suppressForAbstractSet() {
+ return Collections.emptySet();
+ }
+
+ public Test testsForEmptySet() {
+ return SetTestSuiteBuilder
+ .using(new TestStringSetGenerator() {
+ @Override public Set<String> create(String[] elements) {
+ return Collections.emptySet();
+ }
+ })
+ .named("emptySet")
+ .withFeatures(
+ CollectionFeature.NONE,
+ CollectionSize.ZERO)
+ .suppressing(suppressForEmptySet())
+ .createTestSuite();
+ }
+
+ public Test testsForSingletonSet() {
+ return SetTestSuiteBuilder
+ .using(new TestStringSetGenerator() {
+ @Override public Set<String> create(String[] elements) {
+ return Collections.singleton(elements[0]);
+ }
+ })
+ .named("singleton")
+ .withFeatures(
+ CollectionFeature.NONE,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionSize.ONE)
+ .suppressing(suppressForSingletonSet())
+ .createTestSuite();
+ }
+
+ public Test testsForHashSet() {
+ return SetTestSuiteBuilder
+ .using(new TestStringSetGenerator() {
+ @Override public Set<String> create(String[] elements) {
+ return new HashSet<String>(MinimalCollection.of(elements));
+ }
+ })
+ .named("HashSet")
+ .withFeatures(
+ SetFeature.GENERAL_PURPOSE,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionSize.ANY)
+ .suppressing(suppressForHashSet())
+ .createTestSuite();
+ }
+
+ public Test testsForLinkedHashSet() {
+ return SetTestSuiteBuilder
+ .using(new TestStringSetGenerator() {
+ @Override public Set<String> create(String[] elements) {
+ return new LinkedHashSet<String>(MinimalCollection.of(elements));
+ }
+ })
+ .named("LinkedHashSet")
+ .withFeatures(
+ SetFeature.GENERAL_PURPOSE,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionFeature.KNOWN_ORDER,
+ CollectionSize.ANY)
+ .suppressing(suppressForLinkedHashSet())
+ .createTestSuite();
+ }
+
+ public Test testsForEnumSet() {
+ return SetTestSuiteBuilder
+ .using(new TestEnumSetGenerator() {
+ @Override public Set<AnEnum> create(AnEnum[] elements) {
+ return (elements.length == 0)
+ ? EnumSet.noneOf(AnEnum.class)
+ : EnumSet.copyOf(MinimalCollection.of(elements));
+ }
+ })
+ .named("EnumSet")
+ .withFeatures(
+ SetFeature.GENERAL_PURPOSE,
+ CollectionFeature.KNOWN_ORDER,
+ CollectionFeature.RESTRICTS_ELEMENTS,
+ CollectionSize.ANY)
+ .suppressing(suppressForEnumSet())
+ .createTestSuite();
+ }
+
+ public Test testsForTreeSetNatural() {
+ return SetTestSuiteBuilder
+ .using(new TestStringSortedSetGenerator() {
+ @Override public SortedSet<String> create(String[] elements) {
+ return new TreeSet<String>(MinimalCollection.of(elements));
+ }
+ })
+ .named("TreeSet, natural")
+ .withFeatures(
+ SetFeature.GENERAL_PURPOSE,
+ CollectionFeature.KNOWN_ORDER,
+ CollectionSize.ANY)
+ .suppressing(suppressForTreeSetNatural())
+ .createTestSuite();
+ }
+
+ public Test testsForTreeSetWithComparator() {
+ return SetTestSuiteBuilder
+ .using(new TestStringSortedSetGenerator() {
+ @Override public SortedSet<String> create(String[] elements) {
+ SortedSet<String> set
+ = new TreeSet<String>(arbitraryNullFriendlyComparator());
+ Collections.addAll(set, elements);
+ return set;
+ }
+ })
+ .named("TreeSet, with comparator")
+ .withFeatures(
+ SetFeature.GENERAL_PURPOSE,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionFeature.KNOWN_ORDER,
+ CollectionSize.ANY)
+ .suppressing(suppressForTreeSetWithComparator())
+ .createTestSuite();
+ }
+
+ public Test testsForCopyOnWriteArraySet() {
+ return SetTestSuiteBuilder
+ .using(new TestStringSetGenerator() {
+ @Override public Set<String> create(String[] elements) {
+ return new CopyOnWriteArraySet<String>(
+ MinimalCollection.of(elements));
+ }
+ })
+ .named("CopyOnWriteArraySet")
+ .withFeatures(
+ SetFeature.GENERAL_PURPOSE,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionFeature.KNOWN_ORDER,
+ CollectionSize.ANY)
+ .suppressing(suppressForCopyOnWriteArraySet())
+ .createTestSuite();
+ }
+
+ public Test testsForUnmodifiableSet() {
+ return SetTestSuiteBuilder
+ .using(new TestStringSetGenerator() {
+ @Override public Set<String> create(String[] elements) {
+ Set<String> innerSet = new HashSet<String>();
+ Collections.addAll(innerSet, elements);
+ return Collections.unmodifiableSet(innerSet);
+ }
+ })
+ .named("unmodifiableSet/HashSet")
+ .withFeatures(
+ CollectionFeature.NONE,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionSize.ANY)
+ .suppressing(suppressForUnmodifiableSet())
+ .createTestSuite();
+ }
+
+ public Test testsForCheckedSet() {
+ return SetTestSuiteBuilder
+ .using(new TestStringSetGenerator() {
+ @Override public Set<String> create(String[] elements) {
+ Set<String> innerSet = new HashSet<String>();
+ Collections.addAll(innerSet, elements);
+ return Collections.checkedSet(innerSet, String.class);
+ }
+ })
+ .named("checkedSet/HashSet")
+ .withFeatures(
+ SetFeature.GENERAL_PURPOSE,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionFeature.RESTRICTS_ELEMENTS,
+ CollectionSize.ANY)
+ .suppressing(suppressForCheckedSet())
+ .createTestSuite();
+ }
+
+ public Test testsForAbstractSet() {
+ return SetTestSuiteBuilder
+ .using(new TestStringSetGenerator () {
+ @Override protected Set<String> create(String[] elements) {
+ final String[] deduped = dedupe(elements);
+ return new AbstractSet<String>() {
+ @Override public int size() {
+ return deduped.length;
+ }
+ @Override public Iterator<String> iterator() {
+ return MinimalCollection.of(deduped).iterator();
+ }
+ };
+ }
+ })
+ .named("AbstractSet")
+ .withFeatures(
+ CollectionFeature.NONE,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionFeature.KNOWN_ORDER, // in this case, anyway
+ CollectionSize.ANY)
+ .suppressing(suppressForAbstractSet())
+ .createTestSuite();
+ }
+
+ public Test testsForBadlyCollidingHashSet() {
+ return SetTestSuiteBuilder
+ .using(new TestCollidingSetGenerator() {
+ public Set<Object> create(Object... elements) {
+ return new HashSet<Object>(MinimalCollection.of(elements));
+ }
+ })
+ .named("badly colliding HashSet")
+ .withFeatures(
+ SetFeature.GENERAL_PURPOSE,
+ CollectionFeature.ALLOWS_NULL_VALUES,
+ CollectionSize.SEVERAL)
+ .suppressing(suppressForHashSet())
+ .createTestSuite();
+ }
+
+ private static String[] dedupe(String[] elements) {
+ Set<String> tmp = new LinkedHashSet<String>();
+ Collections.addAll(tmp, elements);
+ return tmp.toArray(new String[0]);
+ }
+
+ static <T> Comparator<T> arbitraryNullFriendlyComparator() {
+ return new Comparator<T>() {
+ public int compare(T left, T right) {
+ return String.valueOf(left).compareTo(String.valueOf(right));
+ }
+ };
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/UnhashableObject.java b/testfw/com/google/common/collect/testing/UnhashableObject.java
new file mode 100644
index 0000000..5684074
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/UnhashableObject.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+/**
+ * An unhashable object to be used in testing as values in our collections.
+ *
+ * @author Regina O'Dell
+ */
+public class UnhashableObject implements Comparable<UnhashableObject> {
+ private final int value;
+
+ public UnhashableObject(int value) {
+ this.value = value;
+ }
+
+ @Override public boolean equals(Object object) {
+ if (object instanceof UnhashableObject) {
+ UnhashableObject that = (UnhashableObject) object;
+ return this.value == that.value;
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ throw new UnsupportedOperationException();
+ }
+
+ // needed because otherwise Object.toString() calls hashCode()
+ @Override public String toString() {
+ return "DontHashMe" + value;
+ }
+
+ public int compareTo(UnhashableObject o) {
+ return (this.value < o.value) ? -1 : (this.value > o.value) ? 1 : 0;
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/WrongType.java b/testfw/com/google/common/collect/testing/WrongType.java
new file mode 100644
index 0000000..5e6137c
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/WrongType.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing;
+
+/**
+ * A type which will never be used as the element type of any collection in our
+ * tests, and so can be used to test how a Collection behaves when given input
+ * of the wrong type.
+ */
+public enum WrongType {
+ VALUE
+}
diff --git a/testfw/com/google/common/collect/testing/features/CollectionFeature.java b/testfw/com/google/common/collect/testing/features/CollectionFeature.java
new file mode 100644
index 0000000..c2985e1
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/features/CollectionFeature.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.features;
+
+import com.google.common.collect.testing.Helpers;
+
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.Collection;
+import java.util.LinkedHashSet;
+import java.util.Set;
+import java.util.SortedSet;
+
+/**
+ * Optional features of classes derived from {@code Collection}.
+ *
+ * @author George van den Driessche
+ */
+// Enum values use constructors with generic varargs.
+@SuppressWarnings("unchecked")
+public enum CollectionFeature implements Feature<Collection> {
+ ALLOWS_NULL_VALUES,
+
+ /**
+ * Indicates that a collection disallows certain elements (other than
+ * {@code null}, whose validity as an element is indicated by the presence
+ * or absence of {@link #ALLOWS_NULL_VALUES}).
+ * From the documentation for {@link Collection}:
+ * <blockquote>"Some collection implementations have restrictions on the
+ * elements that they may contain. For example, some implementations
+ * prohibit null elements, and some have restrictions on the types of their
+ * elements."</blockquote>
+ */
+ RESTRICTS_ELEMENTS,
+
+ /**
+ * Indicates that a collection has a well-defined ordering of its elements.
+ * The ordering may depend on the element values, such as a {@link SortedSet},
+ * or on the insertion ordering, such as a {@link LinkedHashSet}. All list
+ * tests automatically specify this feature.
+ */
+ KNOWN_ORDER,
+
+ /**
+ * Indicates that a collection has a different {@link Object#toString}
+ * representation than most collections. If not specified, the collection
+ * tests will examine the value returned by {@link Object#toString}.
+ */
+ NON_STANDARD_TOSTRING,
+
+ SUPPORTS_ADD,
+ SUPPORTS_REMOVE,
+ SUPPORTS_ADD_ALL,
+ SUPPORTS_REMOVE_ALL,
+ SUPPORTS_RETAIN_ALL,
+ SUPPORTS_CLEAR,
+
+ /**
+ * Features supported by general-purpose collections -
+ * everything but {@link #RESTRICTS_ELEMENTS}.
+ * @see java.util.Collection the definition of general-purpose collections.
+ */
+ GENERAL_PURPOSE(
+ SUPPORTS_ADD,
+ SUPPORTS_REMOVE,
+ SUPPORTS_ADD_ALL,
+ SUPPORTS_REMOVE_ALL,
+ SUPPORTS_RETAIN_ALL,
+ SUPPORTS_CLEAR),
+
+ /** Features supported by collections where only removal is allowed. */
+ REMOVE_OPERATIONS(
+ SUPPORTS_REMOVE,
+ SUPPORTS_REMOVE_ALL,
+ SUPPORTS_RETAIN_ALL,
+ SUPPORTS_CLEAR),
+
+ /**
+ * For documenting collections that support no optional features, such as
+ * {@link java.util.Collections#emptySet}
+ */
+ NONE();
+
+ private final Set<Feature<? super Collection>> implied;
+
+ CollectionFeature(Feature<? super Collection> ... implied) {
+ this.implied = Helpers.copyToSet(implied);
+ }
+
+ public Set<Feature<? super Collection>> getImpliedFeatures() {
+ return implied;
+ }
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @Inherited
+ @TesterAnnotation
+ public @interface Require {
+ CollectionFeature[] value() default {};
+ CollectionFeature[] absent() default {};
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/features/CollectionSize.java b/testfw/com/google/common/collect/testing/features/CollectionSize.java
new file mode 100644
index 0000000..0826283
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/features/CollectionSize.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.features;
+
+import com.google.common.collect.testing.Helpers;
+
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Set;
+
+/**
+ * When describing the features of the collection produced by a given generator
+ * (i.e. in a call to {@link
+ * com.google.common.collect.testing.AbstractCollectionTestSuiteBuilder#
+ * withFeatures(Feature...)}),
+ * this annotation specifies each of the different sizes for which a test suite
+ * should be built. (In a typical case, the features should include {@link
+ * CollectionSize#ANY}.) These semantics are thus a little different
+ * from those of other Collection-related features such as {@link
+ * CollectionFeature} or {@link SetFeature}.
+ * <p>
+ * However, when {@link CollectionSize.Require} is used to annotate a test it
+ * behaves normally (i.e. it requires the collection instance under test to be
+ * a certain size for the test to run). Note that this means a test should not
+ * require more than one CollectionSize, since a particular collection instance
+ * can only be one size at once.
+ *
+ * @author George van den Driessche
+ */
+// Enum values use constructors with generic varargs.
+@SuppressWarnings("unchecked")
+public enum CollectionSize implements Feature<Collection>,
+ Comparable<CollectionSize> {
+ /** Test an empty collection. */
+ ZERO(0),
+ /** Test a one-element collection. */
+ ONE(1),
+ /** Test a three-element collection. */
+ SEVERAL(3),
+ /*
+ * TODO(Chris Povirk): VERY_LARGE, but note that we currently assume that the
+ * fourth sample element is not in any collection
+ */
+
+ ANY(
+ ZERO,
+ ONE,
+ SEVERAL
+ );
+
+ private final Set<Feature<? super Collection>> implied;
+ private final Integer numElements;
+
+ CollectionSize(int numElements) {
+ this.implied = Collections.emptySet();
+ this.numElements = numElements;
+ }
+
+ CollectionSize(Feature<? super Collection> ... implied) {
+ // Keep the order here, so that PerCollectionSizeTestSuiteBuilder
+ // gives a predictable order of test suites.
+ this.implied = Helpers.copyToSet(implied);
+ this.numElements = null;
+ }
+
+ public Set<Feature<? super Collection>> getImpliedFeatures() {
+ return implied;
+ }
+
+ public int getNumElements() {
+ if (numElements == null) {
+ throw new IllegalStateException(
+ "A compound CollectionSize doesn't specify a number of elements.");
+ }
+ return numElements;
+ }
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @Inherited
+ @TesterAnnotation
+ public @interface Require {
+ CollectionSize[] value() default {};
+ CollectionSize[] absent() default {};
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/features/ConflictingRequirementsException.java b/testfw/com/google/common/collect/testing/features/ConflictingRequirementsException.java
new file mode 100644
index 0000000..e05d78b
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/features/ConflictingRequirementsException.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.features;
+
+import java.util.Set;
+
+/**
+ * Thrown when requirements on a tester method or class conflict with
+ * each other.
+ * @author George van den Driessche
+*/
+public class ConflictingRequirementsException extends Exception {
+ private Set<Feature<?>> conflicts;
+ private Object source;
+
+ public ConflictingRequirementsException(
+ String message, Set<Feature<?>> conflicts, Object source) {
+ super(message);
+ this.conflicts = conflicts;
+ this.source = source;
+ }
+
+ public Set<Feature<?>> getConflicts() {
+ return conflicts;
+ }
+
+ public Object getSource() {
+ return source;
+ }
+
+ @Override public String getMessage() {
+ return String.format("%s (source: %s)", super.getMessage(), source);
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/testfw/com/google/common/collect/testing/features/Feature.java b/testfw/com/google/common/collect/testing/features/Feature.java
new file mode 100644
index 0000000..b8e4513
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/features/Feature.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.features;
+
+import java.util.Set;
+
+/**
+ * Base class for enumerating the features of an interface to be tested.
+ * @param <T> The interface whose features are to be enumerated.
+ * @author George van den Driessche
+ */
+public interface Feature<T> {
+ /** Returns the set of features that are implied by this feature. */
+ Set<Feature<? super T>> getImpliedFeatures();
+}
diff --git a/testfw/com/google/common/collect/testing/features/FeatureUtil.java b/testfw/com/google/common/collect/testing/features/FeatureUtil.java
new file mode 100644
index 0000000..6b77faa
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/features/FeatureUtil.java
@@ -0,0 +1,290 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.features;
+
+import com.google.common.collect.testing.Helpers;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Utilities for collecting and validating tester requirements from annotations.
+ * @author George van den Driessche
+ */
+public class FeatureUtil {
+ /**
+ * Given a set of features, add to it all the features directly or indirectly
+ * implied by any of them, and return it.
+ * @param features the set of features to expand
+ * @return the same set of features, expanded with all implied features
+ */
+ public static Set<Feature<?>> addImpliedFeatures(Set<Feature<?>> features) {
+ // The base case of the recursion is an empty set of features, which will
+ // occur when the previous set contained only simple features.
+ if (!features.isEmpty()) {
+ features.addAll(impliedFeatures(features));
+ }
+ return features;
+ }
+
+ /**
+ * Given a set of features, return a new set of all features directly or
+ * indirectly implied by any of them.
+ * @param features the set of features whose implications to find
+ * @return the implied set of features
+ */
+ public static Set<Feature<?>> impliedFeatures(Set<Feature<?>> features) {
+ Set<Feature<?>> implied = new LinkedHashSet<Feature<?>>();
+ for (Feature<?> feature : features) {
+ implied.addAll(feature.getImpliedFeatures());
+ }
+ addImpliedFeatures(implied);
+ return implied;
+ }
+
+ /**
+ * Get the full set of requirements for a tester class.
+ * @param testerClass a tester class
+ * @return all the constraints implicitly or explicitly required by the class
+ * or any of its superclasses.
+ * @throws ConflictingRequirementsException if the requirements are mutually
+ * inconsistent.
+ */
+ public static TesterRequirements getTesterRequirements(Class<?> testerClass)
+ throws ConflictingRequirementsException {
+ // TODO memoise this.
+ return buildTesterRequirements(testerClass);
+ }
+
+ /**
+ * Get the full set of requirements for a tester class.
+ * @param testerMethod a test method of a tester class
+ * @return all the constraints implicitly or explicitly required by the
+ * method, its declaring class, or any of its superclasses.
+ * @throws ConflictingRequirementsException if the requirements are
+ * mutually inconsistent.
+ */
+ public static TesterRequirements getTesterRequirements(Method testerMethod)
+ throws ConflictingRequirementsException {
+ // TODO memoise this.
+ return buildTesterRequirements(testerMethod);
+ }
+
+ /**
+ * Construct the full set of requirements for a tester class.
+ * @param testerClass a tester class
+ * @return all the constraints implicitly or explicitly required by the class
+ * or any of its superclasses.
+ * @throws ConflictingRequirementsException if the requirements are mutually
+ * inconsistent.
+ */
+ static TesterRequirements buildTesterRequirements(Class<?> testerClass)
+ throws ConflictingRequirementsException {
+ final TesterRequirements declaredRequirements =
+ buildDeclaredTesterRequirements(testerClass);
+ Class<?> baseClass = testerClass.getSuperclass();
+ if (baseClass == null) {
+ return declaredRequirements;
+ } else {
+ final TesterRequirements clonedBaseRequirements =
+ new TesterRequirements(getTesterRequirements(baseClass));
+ return incorporateRequirements(
+ clonedBaseRequirements, declaredRequirements, testerClass);
+ }
+ }
+
+ /**
+ * Construct the full set of requirements for a tester method.
+ * @param testerMethod a test method of a tester class
+ * @return all the constraints implicitly or explicitly required by the
+ * method, its declaring class, or any of its superclasses.
+ * @throws ConflictingRequirementsException if the requirements are mutually
+ * inconsistent.
+ */
+ static TesterRequirements buildTesterRequirements(Method testerMethod)
+ throws ConflictingRequirementsException {
+ TesterRequirements clonedClassRequirements = new TesterRequirements(
+ getTesterRequirements(testerMethod.getDeclaringClass()));
+ TesterRequirements declaredRequirements =
+ buildDeclaredTesterRequirements(testerMethod);
+ return incorporateRequirements(
+ clonedClassRequirements, declaredRequirements, testerMethod);
+ }
+
+ /**
+ * Construct the set of requirements specified by annotations
+ * directly on a tester class or method.
+ * @param classOrMethod a tester class or a test method thereof
+ * @return all the constraints implicitly or explicitly required by
+ * annotations on the class or method.
+ * @throws ConflictingRequirementsException if the requirements are mutually
+ * inconsistent.
+ */
+ public static TesterRequirements buildDeclaredTesterRequirements(
+ AnnotatedElement classOrMethod)
+ throws ConflictingRequirementsException {
+ TesterRequirements requirements = new TesterRequirements();
+
+ Iterable<Annotation> testerAnnotations =
+ getTesterAnnotations(classOrMethod);
+ for (Annotation testerAnnotation : testerAnnotations) {
+ TesterRequirements moreRequirements =
+ buildTesterRequirements(testerAnnotation);
+ incorporateRequirements(
+ requirements, moreRequirements, testerAnnotation);
+ }
+
+ return requirements;
+ }
+
+ /**
+ * Find all the tester annotations declared on a tester class or method.
+ * @param classOrMethod a class or method whose tester annotations to find
+ * @return an iterable sequence of tester annotations on the class
+ */
+ public static Iterable<Annotation> getTesterAnnotations(
+ AnnotatedElement classOrMethod) {
+ List<Annotation> result = new ArrayList<Annotation>();
+ for (Annotation annotation : classOrMethod.getDeclaredAnnotations()) {
+ Class<? extends Annotation> annotationClass = annotation.annotationType();
+ if (annotationClass.isAnnotationPresent(TesterAnnotation.class)) {
+ result.add(annotation);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Find all the constraints explicitly or implicitly specified by a single
+ * tester annotation.
+ * @param testerAnnotation a tester annotation
+ * @return the requirements specified by the annotation
+ * @throws ConflictingRequirementsException if the requirements are mutually
+ * inconsistent.
+ */
+ public static TesterRequirements buildTesterRequirements(
+ Annotation testerAnnotation)
+ throws ConflictingRequirementsException {
+ Class<? extends Annotation> annotationClass = testerAnnotation.getClass();
+ final Feature<?>[] presentFeatures;
+ final Feature<?>[] absentFeatures;
+ try {
+ presentFeatures = (Feature[]) annotationClass.getMethod("value")
+ .invoke(testerAnnotation);
+ absentFeatures = (Feature[]) annotationClass.getMethod("absent")
+ .invoke(testerAnnotation);
+ } catch (Exception e) {
+ throw new IllegalArgumentException(
+ "Error extracting features from tester annotation.", e);
+ }
+ Set<Feature<?>> allPresentFeatures =
+ addImpliedFeatures(Helpers.<Feature<?>>copyToSet(presentFeatures));
+ Set<Feature<?>> allAbsentFeatures =
+ addImpliedFeatures(Helpers.<Feature<?>>copyToSet(absentFeatures));
+ Set<Feature<?>> conflictingFeatures =
+ intersection(allPresentFeatures, allAbsentFeatures);
+ if (!conflictingFeatures.isEmpty()) {
+ throw new ConflictingRequirementsException("Annotation explicitly or " +
+ "implicitly requires one or more features to be both present " +
+ "and absent.",
+ conflictingFeatures, testerAnnotation);
+ }
+ return new TesterRequirements(allPresentFeatures, allAbsentFeatures);
+ }
+
+ /**
+ * Incorporate additional requirements into an existing requirements object.
+ * @param requirements the existing requirements object
+ * @param moreRequirements more requirements to incorporate
+ * @param source the source of the additional requirements
+ * (used only for error reporting)
+ * @return the existing requirements object, modified to include the
+ * additional requirements
+ * @throws ConflictingRequirementsException if the additional requirements
+ * are inconsistent with the existing requirements
+ */
+ private static TesterRequirements incorporateRequirements(
+ TesterRequirements requirements, TesterRequirements moreRequirements,
+ Object source) throws ConflictingRequirementsException {
+ Set<Feature<?>> presentFeatures = requirements.getPresentFeatures();
+ Set<Feature<?>> absentFeatures = requirements.getAbsentFeatures();
+ Set<Feature<?>> morePresentFeatures = moreRequirements.getPresentFeatures();
+ Set<Feature<?>> moreAbsentFeatures = moreRequirements.getAbsentFeatures();
+ checkConflict(
+ "absent", absentFeatures,
+ "present", morePresentFeatures, source);
+ checkConflict(
+ "present", presentFeatures,
+ "absent", moreAbsentFeatures, source);
+ presentFeatures.addAll(morePresentFeatures);
+ absentFeatures.addAll(moreAbsentFeatures);
+ return requirements;
+ }
+
+ // Used by incorporateRequirements() only
+ private static void checkConflict(
+ String earlierRequirement, Set<Feature<?>> earlierFeatures,
+ String newRequirement, Set<Feature<?>> newFeatures,
+ Object source) throws ConflictingRequirementsException {
+ Set<Feature<?>> conflictingFeatures;
+ conflictingFeatures = intersection(newFeatures, earlierFeatures);
+ if (!conflictingFeatures.isEmpty()) {
+ throw new ConflictingRequirementsException(String.format(
+ "Annotation requires to be %s features that earlier " +
+ "annotations required to be %s.",
+ newRequirement, earlierRequirement),
+ conflictingFeatures, source);
+ }
+ }
+
+ /**
+ * Construct a new {@link java.util.Set} that is the intersection
+ * of the given sets.
+ */
+ // Calls generic varargs method.
+ @SuppressWarnings("unchecked")
+ public static <T> Set<T> intersection(
+ Set<? extends T> set1, Set<? extends T> set2) {
+ return intersection(new Set[] {set1, set2});
+ }
+
+ /**
+ * Construct a new {@link java.util.Set} that is the intersection
+ * of all the given sets.
+ * @param sets the sets to intersect
+ * @return the intersection of the sets
+ * @throws java.lang.IllegalArgumentException if there are no sets to
+ * intersect
+ */
+ public static <T> Set<T> intersection(Set<? extends T> ... sets) {
+ if (sets.length == 0) {
+ throw new IllegalArgumentException(
+ "Can't intersect no sets; would have to return the universe.");
+ }
+ Set<T> results = Helpers.copyToSet(sets[0]);
+ for (int i = 1; i < sets.length; i++) {
+ Set<? extends T> set = sets[i];
+ results.retainAll(set);
+ }
+ return results;
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/features/ListFeature.java b/testfw/com/google/common/collect/testing/features/ListFeature.java
new file mode 100644
index 0000000..d5254e2
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/features/ListFeature.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.features;
+
+import com.google.common.collect.testing.Helpers;
+
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Optional features of classes derived from {@code List}.
+ * @author George van den Driessche
+ */
+// Enum values use constructors with generic varargs.
+@SuppressWarnings("unchecked")
+public enum ListFeature implements Feature<List> {
+ SUPPORTS_SET,
+ SUPPORTS_ADD_WITH_INDEX,
+ SUPPORTS_ADD_ALL_WITH_INDEX,
+ SUPPORTS_REMOVE_WITH_INDEX,
+
+ GENERAL_PURPOSE(
+ CollectionFeature.GENERAL_PURPOSE,
+ SUPPORTS_SET,
+ SUPPORTS_ADD_WITH_INDEX,
+ SUPPORTS_ADD_ALL_WITH_INDEX,
+ SUPPORTS_REMOVE_WITH_INDEX
+ ),
+
+ /** Features supported by lists where only removal is allowed. */
+ REMOVE_OPERATIONS(
+ CollectionFeature.REMOVE_OPERATIONS,
+ SUPPORTS_REMOVE_WITH_INDEX
+ );
+
+ private final Set<Feature<? super List>> implied;
+
+ ListFeature(Feature<? super List> ... implied) {
+ this.implied = Helpers.copyToSet(implied);
+ }
+
+ public Set<Feature<? super List>> getImpliedFeatures() {
+ return implied;
+ }
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @Inherited
+ @TesterAnnotation
+ public @interface Require {
+ ListFeature[] value() default {};
+ ListFeature[] absent() default {};
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/features/MapFeature.java b/testfw/com/google/common/collect/testing/features/MapFeature.java
new file mode 100644
index 0000000..851975d
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/features/MapFeature.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.features;
+
+import com.google.common.collect.testing.Helpers;
+
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Optional features of classes derived from {@code Map}.
+ *
+ * @author George van den Driessche
+ */
+// Enum values use constructors with generic varargs.
+@SuppressWarnings("unchecked")
+public enum MapFeature implements Feature<Map> {
+ ALLOWS_NULL_KEYS,
+ ALLOWS_NULL_VALUES,
+ RESTRICTS_KEYS,
+ RESTRICTS_VALUES,
+ SUPPORTS_PUT,
+ SUPPORTS_PUT_ALL,
+ SUPPORTS_REMOVE,
+ SUPPORTS_CLEAR,
+ /**
+ * Indicates that the constructor or factory method of a map, usually an
+ * immutable map, throws an {@link IllegalArgumentException} when presented
+ * with duplicate keys instead of discarding all but one.
+ */
+ REJECTS_DUPLICATES_AT_CREATION,
+
+ GENERAL_PURPOSE(
+ SUPPORTS_PUT,
+ SUPPORTS_PUT_ALL,
+ SUPPORTS_REMOVE,
+ SUPPORTS_CLEAR
+ ),
+
+ /** Features supported by maps where only removal is allowed. */
+ REMOVE_OPERATIONS(
+ SUPPORTS_REMOVE,
+ SUPPORTS_CLEAR
+ );
+
+ private final Set<Feature<? super Map>> implied;
+
+ MapFeature(Feature<? super Map> ... implied) {
+ this.implied = Helpers.copyToSet(implied);
+ }
+
+ public Set<Feature<? super Map>> getImpliedFeatures() {
+ return implied;
+ }
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @Inherited
+ @TesterAnnotation
+ public @interface Require {
+ public abstract MapFeature[] value() default {};
+ public abstract MapFeature[] absent() default {};
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/features/SetFeature.java b/testfw/com/google/common/collect/testing/features/SetFeature.java
new file mode 100644
index 0000000..27e8613
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/features/SetFeature.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.features;
+
+import com.google.common.collect.testing.Helpers;
+
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.Set;
+
+/**
+ * Optional features of classes derived from {@code Set}.
+ * @author George van den Driessche
+ */
+// Enum values use constructors with generic varargs.
+@SuppressWarnings("unchecked")
+public enum SetFeature implements Feature<Set> {
+ /**
+ * Indicates that the constructor or factory method of a set, usually an
+ * immutable set, throws an {@link IllegalArgumentException} when presented
+ * with duplicate elements instead of collapsing them to a single element.
+ */
+ REJECTS_DUPLICATES_AT_CREATION,
+
+ GENERAL_PURPOSE(
+ CollectionFeature.GENERAL_PURPOSE
+ );
+
+ private final Set<Feature<? super Set>> implied;
+
+ SetFeature(Feature<? super Set> ... implied) {
+ this.implied = Helpers.copyToSet(implied);
+ }
+
+ public Set<Feature<? super Set>> getImpliedFeatures() {
+ return implied;
+ }
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @Inherited
+ @TesterAnnotation
+ public @interface Require {
+ public abstract SetFeature[] value() default {};
+ public abstract SetFeature[] absent() default {};
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/features/TesterAnnotation.java b/testfw/com/google/common/collect/testing/features/TesterAnnotation.java
new file mode 100644
index 0000000..196a3e0
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/features/TesterAnnotation.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.features;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Use this to meta-annotate XxxFeature.Require annotations, so that those
+ * annotations can be used to decide whether to apply a test to a given
+ * class-under-test.
+ * <br>
+ * This is needed because annotations can't implement interfaces, which is also
+ * why reflection is used to extract values from the properties of the various
+ * annotations.
+ *
+ * @see CollectionFeature.Require
+ *
+ * @author George van den Driessche
+ */
+@Target(value = {java.lang.annotation.ElementType.ANNOTATION_TYPE})
+@Retention(value = RetentionPolicy.RUNTIME)
+@Documented
+public @interface TesterAnnotation {
+}
diff --git a/testfw/com/google/common/collect/testing/features/TesterRequirements.java b/testfw/com/google/common/collect/testing/features/TesterRequirements.java
new file mode 100644
index 0000000..7e4a114
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/features/TesterRequirements.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.features;
+
+import com.google.common.collect.testing.Helpers;
+
+import java.util.Collections;
+import java.util.Set;
+
+/**
+ * Encapsulates the constraints that a class under test must satisfy in order
+ * for a tester method to be run against that class.
+ * @author George van den Driessche
+*/
+public final class TesterRequirements {
+ private final Set<Feature<?>> presentFeatures;
+ private final Set<Feature<?>> absentFeatures;
+
+ public TesterRequirements(
+ Set<Feature<?>> presentFeatures, Set<Feature<?>> absentFeatures) {
+ this.presentFeatures = Helpers.copyToSet(presentFeatures);
+ this.absentFeatures = Helpers.copyToSet(absentFeatures);
+ }
+
+ public TesterRequirements(TesterRequirements tr) {
+ this(tr.getPresentFeatures(), tr.getAbsentFeatures());
+ }
+
+ public TesterRequirements() {
+ this(Collections.<Feature<?>>emptySet(),
+ Collections.<Feature<?>>emptySet());
+ }
+
+ public final Set<Feature<?>> getPresentFeatures() {
+ return presentFeatures;
+ }
+
+ public final Set<Feature<?>> getAbsentFeatures() {
+ return absentFeatures;
+ }
+
+ @Override public boolean equals(Object object) {
+ if (object == this) {
+ return true;
+ }
+ if (object instanceof TesterRequirements) {
+ TesterRequirements that = (TesterRequirements) object;
+ return this.presentFeatures.equals(that.presentFeatures)
+ && this.absentFeatures.equals(that.absentFeatures);
+ }
+ return false;
+ }
+
+ @Override public int hashCode() {
+ return presentFeatures.hashCode() * 31 + absentFeatures.hashCode();
+ }
+
+ @Override public String toString() {
+ return String.format("{TesterRequirements: present=%s, absent=%s}",
+ presentFeatures, absentFeatures);
+ }
+
+ private static final long serialVersionUID = 0;
+}
diff --git a/testfw/com/google/common/collect/testing/testers/AbstractListIndexOfTester.java b/testfw/com/google/common/collect/testing/testers/AbstractListIndexOfTester.java
new file mode 100644
index 0000000..a683b2b
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/AbstractListIndexOfTester.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.WrongType;
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+/**
+ * Common parent class for {@link ListIndexOfTester} and
+ * {@link ListLastIndexOfTester}.
+ *
+ * @author Chris Povirk
+ */
+public abstract class AbstractListIndexOfTester<E>
+ extends AbstractListTester<E> {
+ /** Override to call {@code indexOf()} or {@code lastIndexOf()}. */
+ protected abstract int find(Object o);
+
+ /**
+ * Override to return "indexOf" or "lastIndexOf()" for use in failure
+ * messages.
+ */
+ protected abstract String getMethodName();
+
+ @CollectionSize.Require(absent = ZERO)
+ public void testFind_yes() {
+ assertEquals(getMethodName() + "(firstElement) should return 0",
+ 0, find(samples.e0));
+ }
+
+ public void testFind_no() {
+ assertEquals(getMethodName() + "(notPresent) should return -1",
+ -1, find(samples.e3));
+ }
+
+ @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+ public void testFind_nullNotContainedButSupported() {
+ assertEquals(getMethodName() + "(nullNotPresent) should return -1",
+ -1, find(null));
+ }
+
+ @CollectionFeature.Require(absent = ALLOWS_NULL_VALUES)
+ public void testFind_nullNotContainedAndUnsupported() {
+ try {
+ assertEquals(
+ getMethodName() + "(nullNotPresent) should return -1 or throw",
+ -1, find(null));
+ } catch (NullPointerException tolerated) {
+ }
+ }
+
+ @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+ @CollectionSize.Require(absent = ZERO)
+ public void testFind_nonNullWhenNullContained() {
+ initCollectionWithNullElement();
+ assertEquals(getMethodName() + "(notPresent) should return -1",
+ -1, find(samples.e3));
+ }
+
+ @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+ @CollectionSize.Require(absent = ZERO)
+ public void testFind_nullContained() {
+ initCollectionWithNullElement();
+ assertEquals(getMethodName() + "(null) should return " + getNullLocation(),
+ getNullLocation(), find(null));
+ }
+
+ public void testFind_wrongType() {
+ try {
+ assertEquals(getMethodName() + "(wrongType) should return -1 or throw",
+ -1, find(WrongType.VALUE));
+ } catch (ClassCastException tolerated) {
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/AbstractListTester.java b/testfw/com/google/common/collect/testing/testers/AbstractListTester.java
new file mode 100644
index 0000000..1409de5
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/AbstractListTester.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.Helpers;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Base class for list testers.
+ *
+ * @author George van den Driessche
+ */
+public class AbstractListTester<E> extends AbstractCollectionTester<E> {
+ /*
+ * Previously we had a field named list that was initialized to the value of
+ * collection in setUp(), but that caused problems when a tester changed the
+ * value of list or collection but not both.
+ */
+ protected final List<E> getList() {
+ return (List<E>) collection;
+ }
+
+ /**
+ * {@inheritDoc}
+ * <p>
+ * The {@code AbstractListTester} implementation overrides
+ * {@link AbstractCollectionTester#expectContents(Collection)} to verify that
+ * the order of the elements in the list under test matches what is expected.
+ */
+ @Override protected void expectContents(Collection<E> expectedCollection) {
+ List<E> expected = Helpers.copyToList(expectedCollection);
+ String context =
+ String.format("expected collection %s; actual collection %s: ",
+ expected, collection);
+ assertEquals("size mismatch: " + context,
+ expected.size(), getList().size());
+
+ for (int i = 0; i < expected.size(); i++) {
+ String indexContext = "mismatch at index " + i + ": " + context;
+ assertEquals(indexContext, expected.get(i), getList().get(i));
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/AbstractQueueTester.java b/testfw/com/google/common/collect/testing/testers/AbstractQueueTester.java
new file mode 100644
index 0000000..e7d85ff
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/AbstractQueueTester.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+
+import java.util.Queue;
+
+/**
+ * Base class for queue collection tests.
+ *
+ * @author Jared Levy
+ */
+public class AbstractQueueTester<E> extends AbstractCollectionTester<E> {
+ protected final Queue<E> getQueue() {
+ return (Queue<E>) collection;
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/AbstractSetTester.java b/testfw/com/google/common/collect/testing/testers/AbstractSetTester.java
new file mode 100644
index 0000000..a6be8c1
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/AbstractSetTester.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+
+import java.util.Set;
+
+/**
+ * @author George van den Driessche
+ */
+public class AbstractSetTester<E> extends AbstractCollectionTester<E> {
+ /*
+ * Previously we had a field named set that was initialized to the value of
+ * collection in setUp(), but that caused problems when a tester changed the
+ * value of set or collection but not both.
+ */
+ protected final Set<E> getSet() {
+ return (Set<E>) collection;
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/CollectionAddAllTester.java b/testfw/com/google/common/collect/testing/testers/CollectionAddAllTester.java
new file mode 100644
index 0000000..5a7197a
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/CollectionAddAllTester.java
@@ -0,0 +1,158 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD_ALL;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import java.lang.reflect.Method;
+import static java.util.Collections.singletonList;
+import java.util.List;
+
+/**
+ * A generic JUnit test which tests addAll operations on a collection. Can't be
+ * invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ * @author Kevin Bourrillion
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class CollectionAddAllTester<E> extends AbstractCollectionTester<E> {
+ @CollectionFeature.Require(SUPPORTS_ADD_ALL)
+ public void testAddAll_supportedNothing() {
+ assertFalse("addAll(nothing) should return false",
+ collection.addAll(emptyCollection()));
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_ADD_ALL)
+ public void testAddAll_unsupportedNothing() {
+ try {
+ assertFalse("addAll(nothing) should return false or throw",
+ collection.addAll(emptyCollection()));
+ } catch (UnsupportedOperationException tolerated) {
+ }
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require(SUPPORTS_ADD_ALL)
+ public void testAddAll_supportedNonePresent() {
+ assertTrue("addAll(nonePresent) should return true",
+ collection.addAll(createDisjointCollection()));
+ expectAdded(samples.e3, samples.e4);
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_ADD_ALL)
+ public void testAddAll_unsupportedNonePresent() {
+ try {
+ collection.addAll(createDisjointCollection());
+ fail("addAll(nonePresent) should throw");
+ } catch (UnsupportedOperationException expected) {
+ }
+ expectUnchanged();
+ expectMissing(samples.e3, samples.e4);
+ }
+
+ @CollectionFeature.Require(SUPPORTS_ADD_ALL)
+ @CollectionSize.Require(absent = ZERO)
+ public void testAddAll_supportedSomePresent() {
+ assertTrue("addAll(somePresent) should return true",
+ collection.addAll(MinimalCollection.of(samples.e3, samples.e0)));
+ assertTrue("should contain " + samples.e3, collection.contains(samples.e3));
+ assertTrue("should contain " + samples.e0, collection.contains(samples.e0));
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_ADD_ALL)
+ @CollectionSize.Require(absent = ZERO)
+ public void testAddAll_unsupportedSomePresent() {
+ try {
+ collection.addAll(MinimalCollection.of(samples.e3, samples.e0));
+ fail("addAll(somePresent) should throw");
+ } catch (UnsupportedOperationException expected) {
+ }
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_ADD_ALL)
+ @CollectionSize.Require(absent = ZERO)
+ public void testAddAll_unsupportedAllPresent() {
+ try {
+ assertFalse("addAll(allPresent) should return false or throw",
+ collection.addAll(MinimalCollection.of(samples.e0)));
+ } catch (UnsupportedOperationException tolerated) {
+ }
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require({SUPPORTS_ADD_ALL,
+ ALLOWS_NULL_VALUES})
+ public void testAddAll_nullSupported() {
+ List<E> containsNull = singletonList(null);
+ assertTrue("addAll(containsNull) should return true", collection
+ .addAll(containsNull));
+ /*
+ * We need (E) to force interpretation of null as the single element of a
+ * varargs array, not the array itself
+ */
+ expectAdded((E) null);
+ }
+
+ @CollectionFeature.Require(value = SUPPORTS_ADD_ALL,
+ absent = ALLOWS_NULL_VALUES)
+ public void testAddAll_nullUnsupported() {
+ List<E> containsNull = singletonList(null);
+ try {
+ collection.addAll(containsNull);
+ fail("addAll(containsNull) should throw");
+ } catch (NullPointerException expected) {
+ }
+ expectUnchanged();
+ expectNullMissingWhenNullUnsupported(
+ "Should not contain null after unsupported addAll(containsNull)");
+ }
+
+ @CollectionFeature.Require(SUPPORTS_ADD_ALL)
+ public void testAddAll_nullCollectionReference() {
+ try {
+ collection.addAll(null);
+ fail("addAll(null) should throw NullPointerException");
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ /**
+ * Returns the {@link Method} instance for {@link
+ * #testAddAll_nullUnsupported()} so that tests can suppress it with {@code
+ * FeatureSpecificTestSuiteBuilder.suppressing()} until <a
+ * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5045147">Sun
+ * bug 5045147</a> is fixed.
+ */
+ public static Method getAddAllNullUnsupportedMethod() {
+ try {
+ return CollectionAddAllTester.class.getMethod(
+ "testAddAll_nullUnsupported");
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/CollectionAddTester.java b/testfw/com/google/common/collect/testing/testers/CollectionAddTester.java
new file mode 100644
index 0000000..27fd3d8
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/CollectionAddTester.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import java.lang.reflect.Method;
+
+/**
+ * A generic JUnit test which tests {@code add} operations on a collection.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ * @author Kevin Bourrillion
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class CollectionAddTester<E> extends AbstractCollectionTester<E> {
+ @CollectionFeature.Require(SUPPORTS_ADD)
+ public void testAdd_supportedNotPresent() {
+ assertTrue("add(notPresent) should return true",
+ collection.add(samples.e3));
+ expectAdded(samples.e3);
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_ADD)
+ public void testAdd_unsupportedNotPresent() {
+ try {
+ collection.add(samples.e3);
+ fail("add(notPresent) should throw");
+ } catch (UnsupportedOperationException expected) {
+ }
+ expectUnchanged();
+ expectMissing(samples.e3);
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_ADD)
+ @CollectionSize.Require(absent = ZERO)
+ public void testAdd_unsupportedPresent() {
+ try {
+ assertFalse("add(present) should return false or throw",
+ collection.add(samples.e0));
+ } catch (UnsupportedOperationException tolerated) {
+ }
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require({SUPPORTS_ADD,
+ ALLOWS_NULL_VALUES})
+ public void testAdd_nullSupported() {
+ assertTrue("add(null) should return true", collection.add(null));
+ expectAdded((E) null);
+ }
+
+ @CollectionFeature.Require(value = SUPPORTS_ADD,
+ absent = ALLOWS_NULL_VALUES)
+ public void testAdd_nullUnsupported() {
+ try {
+ collection.add(null);
+ fail("add(null) should throw");
+ } catch (NullPointerException expected) {
+ }
+ expectUnchanged();
+ expectNullMissingWhenNullUnsupported(
+ "Should not contain null after unsupported add(null)");
+ }
+
+ /**
+ * Returns the {@link Method} instance for {@link #testAdd_nullSupported()} so
+ * that tests of {@link
+ * java.util.Collections#checkedCollection(java.util.Collection, Class)} can
+ * suppress it with {@code FeatureSpecificTestSuiteBuilder.suppressing()}
+ * until <a
+ * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6409434">Sun bug
+ * 6409434</a> is fixed. It's unclear whether nulls were to be permitted or
+ * forbidden, but presumably the eventual fix will be to permit them, as it
+ * seems more likely that code would depend on that behavior than on the
+ * other. Thus, we say the bug is in add(), which fails to support null.
+ */
+ public static Method getAddNullSupportedMethod() {
+ try {
+ return CollectionAddTester.class.getMethod("testAdd_nullSupported");
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * Returns the {@link Method} instance for {@link #testAdd_nullSupported()} so
+ * that tests of {@link
+ * java.util.Collections#checkedCollection(java.util.Collection, Class)} can
+ * suppress it with {@code FeatureSpecificTestSuiteBuilder.suppressing()}
+ * until <a
+ * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5045147">Sun
+ * bug 5045147</a> is fixed.
+ */
+ public static Method getAddNullUnsupportedMethod() {
+ try {
+ return CollectionAddTester.class.getMethod("testAdd_nullUnsupported");
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/CollectionClearTester.java b/testfw/com/google/common/collect/testing/testers/CollectionClearTester.java
new file mode 100644
index 0000000..0f535ce
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/CollectionClearTester.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_CLEAR;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+/**
+ * A generic JUnit test which tests {@code clear()} operations on a collection.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * @author George van den Driessche
+ */
+public class CollectionClearTester<E> extends AbstractCollectionTester<E> {
+ @CollectionFeature.Require(SUPPORTS_CLEAR)
+ public void testClear() {
+ collection.clear();
+ assertTrue("After clear(), a collection should be empty.",
+ collection.isEmpty());
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_CLEAR)
+ @CollectionSize.Require(absent = ZERO)
+ public void testClear_unsupported() {
+ try {
+ collection.clear();
+ fail("clear() should throw UnsupportedOperation if a collection does "
+ + "not support it and is not empty.");
+ } catch (UnsupportedOperationException expected) {
+ }
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_CLEAR)
+ @CollectionSize.Require(ZERO)
+ public void testClear_unsupportedByEmptyCollection() {
+ try {
+ collection.clear();
+ } catch (UnsupportedOperationException tolerated) {
+ }
+ expectUnchanged();
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/CollectionContainsAllTester.java b/testfw/com/google/common/collect/testing/testers/CollectionContainsAllTester.java
new file mode 100644
index 0000000..f023cab
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/CollectionContainsAllTester.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.WrongType;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import java.util.Collection;
+
+/**
+ * A generic JUnit test which tests {@code containsAll()} operations on a
+ * collection. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * @author Kevin Bourrillion
+ * @author Chris Povirk
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class CollectionContainsAllTester<E>
+ extends AbstractCollectionTester<E> {
+ public void testContainsAll_empty() {
+ assertTrue("containsAll(empty) should return true",
+ collection.containsAll(MinimalCollection.of()));
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ public void testContainsAll_subset() {
+ assertTrue("containsAll(subset) should return true",
+ collection.containsAll(MinimalCollection.of(samples.e0)));
+ }
+
+ public void testContainsAll_sameElements() {
+ assertTrue("containsAll(sameElements) should return true",
+ collection.containsAll(MinimalCollection.of(createSamplesArray())));
+ }
+
+ public void testContainsAll_self() {
+ assertTrue("containsAll(this) should return true",
+ collection.containsAll(collection));
+ }
+
+ public void testContainsAll_partialOverlap() {
+ assertFalse("containsAll(partialOverlap) should return false",
+ collection.containsAll(MinimalCollection.of(samples.e0, samples.e3)));
+ }
+
+ public void testContainsAll_disjoint() {
+ assertFalse("containsAll(disjoint) should return false",
+ collection.containsAll(MinimalCollection.of(samples.e3)));
+ }
+
+ public void testContainsAll_wrongType() {
+ Collection<WrongType> wrong = MinimalCollection.of(WrongType.VALUE);
+ try {
+ assertFalse("containsAll(wrongType) should return false or throw",
+ collection.containsAll(wrong));
+ } catch (ClassCastException tolerated) {
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/CollectionContainsTester.java b/testfw/com/google/common/collect/testing/testers/CollectionContainsTester.java
new file mode 100644
index 0000000..d23428b
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/CollectionContainsTester.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.WrongType;
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+/**
+ * A generic JUnit test which tests {@code contains()} operations on a
+ * collection. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * @author Kevin Bourrillion
+ * @author Chris Povirk
+ */
+public class CollectionContainsTester<E> extends AbstractCollectionTester<E> {
+ @CollectionSize.Require(absent = ZERO)
+ public void testContains_yes() {
+ assertTrue("contains(present) should return true",
+ collection.contains(samples.e0));
+ }
+
+ public void testContains_no() {
+ assertFalse("contains(notPresent) should return false",
+ collection.contains(samples.e3));
+ }
+
+ @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+ public void testContains_nullNotContainedButSupported() {
+ assertFalse("contains(null) should return false",
+ collection.contains(null));
+ }
+
+ @CollectionFeature.Require(absent = ALLOWS_NULL_VALUES)
+ public void testContains_nullNotContainedAndUnsupported() {
+ expectNullMissingWhenNullUnsupported(
+ "contains(null) should return false or throw");
+ }
+
+ @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+ @CollectionSize.Require(absent = ZERO)
+ public void testContains_nonNullWhenNullContained() {
+ initCollectionWithNullElement();
+ assertFalse("contains(notPresent) should return false",
+ collection.contains(samples.e3));
+ }
+
+ @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+ @CollectionSize.Require(absent = ZERO)
+ public void testContains_nullContained() {
+ initCollectionWithNullElement();
+ assertTrue("contains(null) should return true", collection.contains(null));
+ }
+
+ public void testContains_wrongType() {
+ try {
+ assertFalse("contains(wrongType) should return false or throw",
+ collection.contains(WrongType.VALUE));
+ } catch (ClassCastException tolerated) {
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/CollectionCreationTester.java b/testfw/com/google/common/collect/testing/testers/CollectionCreationTester.java
new file mode 100644
index 0000000..b496a27
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/CollectionCreationTester.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import java.lang.reflect.Method;
+
+/**
+ * A generic JUnit test which tests creation (typically through a constructor or
+ * static factory method) of a collection. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ */
+public class CollectionCreationTester<E> extends AbstractCollectionTester<E> {
+ @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+ @CollectionSize.Require(absent = ZERO)
+ public void testCreateWithNull_supported() {
+ E[] array = createArrayWithNullElement();
+ collection = getSubjectGenerator().create(array);
+ expectContents(array);
+ }
+
+ @CollectionFeature.Require(absent = ALLOWS_NULL_VALUES)
+ @CollectionSize.Require(absent = ZERO)
+ public void testCreateWithNull_unsupported() {
+ E[] array = createArrayWithNullElement();
+
+ try {
+ getSubjectGenerator().create(array);
+ fail("Creating a collection containing null should fail");
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ /**
+ * Returns the {@link Method} instance for {@link
+ * #testCreateWithNull_unsupported()} so that tests can suppress it
+ * with {@code FeatureSpecificTestSuiteBuilder.suppressing()} until <a
+ * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5045147">Sun
+ * bug 5045147</a> is fixed.
+ */
+ public static Method getCreateWithNullUnsupportedMethod() {
+ try {
+ return CollectionCreationTester.class.getMethod(
+ "testCreateWithNull_unsupported");
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/CollectionEqualsTester.java b/testfw/com/google/common/collect/testing/testers/CollectionEqualsTester.java
new file mode 100644
index 0000000..3f3692b
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/CollectionEqualsTester.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+
+/**
+ * Tests {@link java.util.Collection#equals}.
+ *
+ * @author George van den Driessche
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class CollectionEqualsTester<E> extends AbstractCollectionTester<E> {
+ public void testEquals_self() {
+ assertTrue("An Object should be equal to itself.",
+ collection.equals(collection));
+ }
+
+ public void testEquals_null() {
+ //noinspection ObjectEqualsNull
+ assertFalse("An object should not be equal to null.",
+ collection.equals(null));
+ }
+
+ public void testEquals_notACollection() {
+ //noinspection EqualsBetweenInconvertibleTypes
+ assertFalse("A Collection should never equal an "
+ + "object that is not a Collection.",
+ collection.equals("huh?"));
+ }
+} \ No newline at end of file
diff --git a/testfw/com/google/common/collect/testing/testers/CollectionIsEmptyTester.java b/testfw/com/google/common/collect/testing/testers/CollectionIsEmptyTester.java
new file mode 100644
index 0000000..5ec972a
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/CollectionIsEmptyTester.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+/**
+ * A generic JUnit test which tests {@code isEmpty()} operations on a
+ * collection. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * @author Kevin Bourrillion
+ */
+public class CollectionIsEmptyTester<E> extends AbstractCollectionTester<E> {
+ @CollectionSize.Require(ZERO)
+ public void testIsEmpty_yes() {
+ assertTrue("isEmpty() should return true", collection.isEmpty());
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ public void testIsEmpty_no() {
+ assertFalse("isEmpty() should return false", collection.isEmpty());
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/CollectionIteratorTester.java b/testfw/com/google/common/collect/testing/testers/CollectionIteratorTester.java
new file mode 100644
index 0000000..cdbd271
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/CollectionIteratorTester.java
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+// TODO
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.Helpers;
+import com.google.common.collect.testing.IteratorFeature;
+import static com.google.common.collect.testing.IteratorFeature.MODIFIABLE;
+import static com.google.common.collect.testing.IteratorFeature.UNMODIFIABLE;
+import com.google.common.collect.testing.IteratorTester;
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.KNOWN_ORDER;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+/**
+ * A generic JUnit test which tests {@code iterator} operations on a collection.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ */
+public class CollectionIteratorTester<E> extends AbstractCollectionTester<E> {
+ public void testIterator() {
+ List<E> iteratorElements = new ArrayList<E>();
+ for (E element : collection) { // uses iterator()
+ iteratorElements.add(element);
+ }
+ Helpers.assertEqualIgnoringOrder(
+ Arrays.asList(createSamplesArray()), iteratorElements);
+ }
+
+ @CollectionFeature.Require(KNOWN_ORDER)
+ public void testIterationOrdering() {
+ List<E> iteratorElements = new ArrayList<E>();
+ for (E element : collection) { // uses iterator()
+ iteratorElements.add(element);
+ }
+ List<E> expected = Helpers.copyToList(getOrderedElements());
+ assertEquals("Different ordered iteration", expected, iteratorElements);
+ }
+
+ // TODO(Chris Povirk): switch to DerivedIteratorTestSuiteBuilder
+
+ @CollectionFeature.Require({KNOWN_ORDER, SUPPORTS_REMOVE})
+ public void testIterator_knownOrderRemoveSupported() throws Exception {
+ runIteratorTest(MODIFIABLE, IteratorTester.KnownOrder.KNOWN_ORDER);
+ }
+
+ @CollectionFeature.Require(value = KNOWN_ORDER, absent = SUPPORTS_REMOVE)
+ public void testIterator_knownOrderRemoveUnsupported() throws Exception {
+ runIteratorTest(UNMODIFIABLE, IteratorTester.KnownOrder.KNOWN_ORDER);
+ }
+
+ @CollectionFeature.Require(absent = KNOWN_ORDER, value = SUPPORTS_REMOVE)
+ public void testIterator_unknownOrderRemoveSupported() throws Exception {
+ runIteratorTest(MODIFIABLE, IteratorTester.KnownOrder.UNKNOWN_ORDER);
+ }
+
+ @CollectionFeature.Require(absent = {KNOWN_ORDER, SUPPORTS_REMOVE})
+ public void testIterator_unknownOrderRemoveUnsupported() throws Exception {
+ runIteratorTest(UNMODIFIABLE, IteratorTester.KnownOrder.UNKNOWN_ORDER);
+ }
+
+ private void runIteratorTest(Set<IteratorFeature> features,
+ IteratorTester.KnownOrder knownOrder) throws Exception {
+ new IteratorTester<E>(5, features, getOrderedElements(), knownOrder) {
+ {
+ // TODO(Chris Povirk): don't set this universally
+ ignoreSunJavaBug6529795();
+ }
+
+ @Override protected Iterator<E> newTargetIterator() {
+ resetCollection();
+ return collection.iterator();
+ }
+
+ @Override protected void verify(List<E> elements) {
+ expectContents(elements);
+ }
+ }.test();
+ }
+
+ /**
+ * Returns the {@link Method} instance for
+ * {@link #testIterator_knownOrderRemoveSupported()} so that tests of
+ * {@link CopyOnWriteArraySet} and {@link CopyOnWriteArrayList} can suppress
+ * it with {@code FeatureSpecificTestSuiteBuilder.suppressing()} until <a
+ * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6570575">Sun bug
+ * 6570575</a> is fixed.
+ */
+ public static Method getIteratorKnownOrderRemoveSupportedMethod() {
+ try {
+ return CollectionIteratorTester.class
+ .getMethod("testIterator_knownOrderRemoveSupported");
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * Returns the {@link Method} instance for
+ * {@link #testIterator_unknownOrderRemoveSupported()} so that tests of
+ * classes with unmodifiable iterators can suppress it.
+ */
+ public static Method getIteratorUnknownOrderRemoveSupportedMethod() {
+ try {
+ return CollectionIteratorTester.class
+ .getMethod("testIterator_unknownOrderRemoveSupported");
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void testIteratorNoSuchElementException() {
+ Iterator<E> iterator = collection.iterator();
+ while (iterator.hasNext()) {
+ iterator.next();
+ }
+
+ try {
+ iterator.next();
+ fail("iterator.next() should throw NoSuchElementException");
+ } catch (NoSuchElementException expected) {}
+ }
+
+ /**
+ * Returns the {@link Method} instance for
+ * {@link #testIterator_knownOrderRemoveUnsupported()} so that tests of
+ * {@code ArrayStack} can suppress it with
+ * {@code FeatureSpecificTestSuiteBuilder.suppressing()}. {@code ArrayStack}
+ * supports {@code remove()} on only the first element, and the iterator
+ * tester can't handle that.
+ */
+ public static Method getIteratorKnownOrderRemoveUnsupportedMethod() {
+ try {
+ return CollectionIteratorTester.class
+ .getMethod("testIterator_knownOrderRemoveUnsupported");
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/CollectionRemoveAllTester.java b/testfw/com/google/common/collect/testing/testers/CollectionRemoveAllTester.java
new file mode 100644
index 0000000..65b4e78
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/CollectionRemoveAllTester.java
@@ -0,0 +1,174 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.WrongType;
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE_ALL;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import java.util.Collections;
+
+/**
+ * A generic JUnit test which tests {@code removeAll} operations on a
+ * collection. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * @author George van den Driessche
+ * @author Chris Povirk
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class CollectionRemoveAllTester<E> extends AbstractCollectionTester<E> {
+ @CollectionFeature.Require(SUPPORTS_REMOVE_ALL)
+ public void testRemoveAll_emptyCollection() {
+ assertFalse("removeAll(emptyCollection) should return false",
+ collection.removeAll(MinimalCollection.of()));
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require(SUPPORTS_REMOVE_ALL)
+ public void testRemoveAll_nonePresent() {
+ assertFalse("removeAll(disjointCollection) should return false",
+ collection.removeAll(MinimalCollection.of(samples.e3)));
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require(SUPPORTS_REMOVE_ALL)
+ @CollectionSize.Require(absent = ZERO)
+ public void testRemoveAll_allPresent() {
+ assertTrue("removeAll(intersectingCollection) should return true",
+ collection.removeAll(MinimalCollection.of(samples.e0)));
+ expectMissing(samples.e0);
+ }
+
+ @CollectionFeature.Require(SUPPORTS_REMOVE_ALL)
+ @CollectionSize.Require(absent = ZERO)
+ public void testRemoveAll_somePresent() {
+ assertTrue("removeAll(intersectingCollection) should return true",
+ collection.removeAll(MinimalCollection.of(samples.e0, samples.e3)));
+ expectMissing(samples.e0);
+ }
+
+ /**
+ * Trigger the other.size() >= this.size() case in AbstractSet.removeAll().
+ */
+ @CollectionFeature.Require(SUPPORTS_REMOVE_ALL)
+ @CollectionSize.Require(absent = ZERO)
+ public void testRemoveAll_somePresentLargeCollectionToRemove() {
+ assertTrue("removeAll(largeIntersectingCollection) should return true",
+ collection.removeAll(MinimalCollection.of(
+ samples.e0, samples.e0, samples.e0,
+ samples.e3, samples.e3, samples.e3)));
+ expectMissing(samples.e0);
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_REMOVE_ALL)
+ public void testRemoveAll_unsupportedEmptyCollection() {
+ try {
+ assertFalse("removeAll(emptyCollection) should return false or throw "
+ + "UnsupportedOperationException",
+ collection.removeAll(MinimalCollection.of()));
+ } catch (UnsupportedOperationException tolerated) {
+ }
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_REMOVE_ALL)
+ public void testRemoveAll_unsupportedNonePresent() {
+ try {
+ assertFalse("removeAll(disjointCollection) should return false or throw "
+ + "UnsupportedOperationException",
+ collection.removeAll(MinimalCollection.of(samples.e3)));
+ } catch (UnsupportedOperationException tolerated) {
+ }
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_REMOVE_ALL)
+ @CollectionSize.Require(absent = ZERO)
+ public void testRemoveAll_unsupportedPresent() {
+ try {
+ collection.removeAll(MinimalCollection.of(samples.e0));
+ fail("removeAll(intersectingCollection) should throw "
+ + "UnsupportedOperationException");
+ } catch (UnsupportedOperationException expected) {
+ }
+ expectUnchanged();
+ assertTrue(collection.contains(samples.e0));
+ }
+
+ /*
+ * AbstractCollection fails the removeAll(null) test when the subject
+ * collection is empty, but we'd still like to test removeAll(null) when we
+ * can. We split the test into empty and non-empty cases. This allows us to
+ * suppress only the former.
+ */
+
+ @CollectionFeature.Require(SUPPORTS_REMOVE_ALL)
+ @CollectionSize.Require(ZERO)
+ public void testRemoveAll_nullCollectionReferenceEmptySubject() {
+ try {
+ collection.removeAll(null);
+ // Returning successfully is not ideal, but tolerated.
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ @CollectionFeature.Require(SUPPORTS_REMOVE_ALL)
+ @CollectionSize.Require(absent = ZERO)
+ public void testRemoveAll_nullCollectionReferenceNonEmptySubject() {
+ try {
+ collection.removeAll(null);
+ fail("removeAll(null) should throw NullPointerException");
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ @CollectionFeature.Require(SUPPORTS_REMOVE_ALL)
+ public void testRemoveAll_containsNullNo() {
+ MinimalCollection<?> containsNull = MinimalCollection.of((Object) null);
+ try {
+ assertFalse("removeAll(containsNull) should return false or throw",
+ collection.removeAll(containsNull));
+ } catch (NullPointerException tolerated) {
+ }
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require({SUPPORTS_REMOVE_ALL, ALLOWS_NULL_VALUES})
+ @CollectionSize.Require(absent = ZERO)
+ public void testRemoveAll_containsNullYes() {
+ initCollectionWithNullElement();
+ assertTrue("removeAll(containsNull) should return true",
+ collection.removeAll(Collections.singleton(null)));
+ // TODO: make this work with MinimalCollection
+ }
+
+ @CollectionFeature.Require(SUPPORTS_REMOVE_ALL)
+ public void testRemoveAll_containsWrongType() {
+ try {
+ assertFalse("removeAll(containsWrongType) should return false or throw",
+ collection.removeAll(MinimalCollection.of(WrongType.VALUE)));
+ } catch (ClassCastException tolerated) {
+ }
+ expectUnchanged();
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/CollectionRemoveTester.java b/testfw/com/google/common/collect/testing/testers/CollectionRemoveTester.java
new file mode 100644
index 0000000..cd5a417
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/CollectionRemoveTester.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.WrongType;
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import java.util.Iterator;
+
+/**
+ * A generic JUnit test which tests {@code remove} operations on a collection.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * @author George van den Driessche
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class CollectionRemoveTester<E> extends AbstractCollectionTester<E> {
+ @CollectionFeature.Require(SUPPORTS_REMOVE)
+ @CollectionSize.Require(absent = ZERO)
+ public void testRemove_present() {
+ int initialSize = collection.size();
+ assertTrue("remove(present) should return true",
+ collection.remove(samples.e0));
+ assertEquals("remove(present) should decrease a collection's size by one.",
+ initialSize - 1, collection.size());
+ expectMissing(samples.e0);
+ }
+
+ @CollectionFeature.Require(SUPPORTS_REMOVE)
+ public void testRemove_notPresent() {
+ assertFalse("remove(notPresent) should return false",
+ collection.remove(samples.e3));
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require({SUPPORTS_REMOVE, ALLOWS_NULL_VALUES})
+ @CollectionSize.Require(absent = ZERO)
+ public void testRemove_nullPresent() {
+ collection = getSubjectGenerator().create(createArrayWithNullElement());
+
+ int initialSize = collection.size();
+ assertTrue("remove(null) should return true", collection.remove(null));
+ assertEquals("remove(present) should decrease a collection's size by one.",
+ initialSize - 1, collection.size());
+ expectMissing((E) null);
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
+ @CollectionSize.Require(absent = ZERO)
+ public void testRemove_unsupported() {
+ try {
+ collection.remove(samples.e0);
+ fail("remove(present) should throw UnsupportedOperationException");
+ } catch (UnsupportedOperationException expected) {
+ }
+ expectUnchanged();
+ assertTrue("remove(present) should not remove the element",
+ collection.contains(samples.e0));
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
+ public void testRemove_unsupportedNotPresent() {
+ try {
+ assertFalse("remove(notPresent) should return false or throw "
+ + "UnsupportedOperationException",
+ collection.remove(samples.e3));
+ } catch (UnsupportedOperationException tolerated) {
+ }
+ expectUnchanged();
+ expectMissing(samples.e3);
+ }
+
+ @CollectionFeature.Require(
+ value = SUPPORTS_REMOVE,
+ absent = ALLOWS_NULL_VALUES)
+ public void testRemove_nullNotSupported() {
+ try {
+ assertFalse("remove(null) should return false or throw "
+ + "NullPointerException",
+ collection.remove(null));
+ } catch (NullPointerException tolerated) {
+ }
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require({SUPPORTS_REMOVE, ALLOWS_NULL_VALUES})
+ public void testRemove_nullSupportedMissing() {
+ assertFalse("remove(null) should return false", collection.remove(null));
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
+ @CollectionSize.Require(absent = ZERO)
+ public void testIteratorRemove_unsupported() {
+ Iterator<E> iterator = collection.iterator();
+ iterator.next();
+ try {
+ iterator.remove();
+ fail("iterator.remove() should throw UnsupportedOperationException");
+ } catch (UnsupportedOperationException expected) {
+ }
+ expectUnchanged();
+ assertTrue(collection.contains(samples.e0));
+ }
+
+ @CollectionFeature.Require(SUPPORTS_REMOVE)
+ public void testRemove_wrongType() {
+ try {
+ assertFalse(collection.remove(WrongType.VALUE));
+ } catch (ClassCastException tolerated) {
+ }
+ expectUnchanged();
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/CollectionRetainAllTester.java b/testfw/com/google/common/collect/testing/testers/CollectionRetainAllTester.java
new file mode 100644
index 0000000..dc7689c
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/CollectionRetainAllTester.java
@@ -0,0 +1,340 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_RETAIN_ALL;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * A generic JUnit test which tests {@code retainAll} operations on a
+ * collection. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class CollectionRetainAllTester<E> extends AbstractCollectionTester<E> {
+
+ /**
+ * A collection of elements to retain, along with a description for use in
+ * failure messages.
+ */
+ private class Target {
+ @SuppressWarnings("hiding")
+ private final Collection<E> toRetain;
+ private final String description;
+
+ private Target(Collection<E> toRetain, String description) {
+ this.toRetain = toRetain;
+ this.description = description;
+ }
+
+ @Override public String toString() {
+ return description;
+ }
+ }
+
+ private Target empty;
+ private Target disjoint;
+ private Target superset;
+ private Target nonEmptyProperSubset;
+ private Target sameElements;
+ private Target partialOverlap;
+ private Target containsDuplicates;
+ private Target nullSingleton;
+
+ @Override protected void setUp() throws Exception {
+ super.setUp();
+
+ empty = new Target(emptyCollection(), "empty");
+ /*
+ * We test that nullSingleton.retainAll(disjointList) does NOT throw a
+ * NullPointerException when disjointList does not, so we can't use
+ * MinimalCollection, which throws NullPointerException on calls to
+ * contains(null).
+ */
+ List<E> disjointList = Arrays.asList(samples.e3, samples.e4);
+ disjoint
+ = new Target(disjointList, "disjoint");
+ superset
+ = new Target(MinimalCollection.of(
+ samples.e0, samples.e1, samples.e2, samples.e3, samples.e4),
+ "superset");
+ nonEmptyProperSubset
+ = new Target(MinimalCollection.of(samples.e1), "subset");
+ sameElements
+ = new Target(Arrays.asList(createSamplesArray()), "sameElements");
+ containsDuplicates = new Target(
+ MinimalCollection.of(samples.e0, samples.e0, samples.e3, samples.e3),
+ "containsDuplicates");
+ partialOverlap
+ = new Target(MinimalCollection.of(samples.e2, samples.e3),
+ "partialOverlap");
+ nullSingleton
+ = new Target(Collections.<E> singleton(null), "nullSingleton");
+ }
+
+ // retainAll(empty)
+
+ @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+ @CollectionSize.Require(ZERO)
+ public void testRetainAll_emptyPreviouslyEmpty() {
+ expectReturnsFalse(empty);
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL)
+ @CollectionSize.Require(ZERO)
+ public void testRetainAll_emptyPreviouslyEmptyUnsupported() {
+ expectReturnsFalseOrThrows(empty);
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+ @CollectionSize.Require(absent = ZERO)
+ public void testRetainAll_emptyPreviouslyNonEmpty() {
+ expectReturnsTrue(empty);
+ expectContents();
+ expectMissing(samples.e0, samples.e1, samples.e2);
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL)
+ @CollectionSize.Require(absent = ZERO)
+ public void testRetainAll_emptyPreviouslyNonEmptyUnsupported() {
+ expectThrows(empty);
+ expectUnchanged();
+ }
+
+ // retainAll(disjoint)
+
+ @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+ @CollectionSize.Require(ZERO)
+ public void testRetainAll_disjointPreviouslyEmpty() {
+ expectReturnsFalse(disjoint);
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL)
+ @CollectionSize.Require(ZERO)
+ public void testRetainAll_disjointPreviouslyEmptyUnsupported() {
+ expectReturnsFalseOrThrows(disjoint);
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+ @CollectionSize.Require(absent = ZERO)
+ public void testRetainAll_disjointPreviouslyNonEmpty() {
+ expectReturnsTrue(disjoint);
+ expectContents();
+ expectMissing(samples.e0, samples.e1, samples.e2);
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL)
+ @CollectionSize.Require(absent = ZERO)
+ public void testRetainAll_disjointPreviouslyNonEmptyUnsupported() {
+ expectThrows(disjoint);
+ expectUnchanged();
+ }
+
+ // retainAll(superset)
+
+ @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+ public void testRetainAll_superset() {
+ expectReturnsFalse(superset);
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL)
+ public void testRetainAll_supersetUnsupported() {
+ expectReturnsFalseOrThrows(superset);
+ expectUnchanged();
+ }
+
+ // retainAll(subset)
+
+ @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testRetainAll_subset() {
+ expectReturnsTrue(nonEmptyProperSubset);
+ expectContents(nonEmptyProperSubset.toRetain);
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL)
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testRetainAll_subsetUnsupported() {
+ expectThrows(nonEmptyProperSubset);
+ expectUnchanged();
+ }
+
+ // retainAll(sameElements)
+
+ @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+ public void testRetainAll_sameElements() {
+ expectReturnsFalse(sameElements);
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL)
+ public void testRetainAll_sameElementsUnsupported() {
+ expectReturnsFalseOrThrows(sameElements);
+ expectUnchanged();
+ }
+
+ // retainAll(partialOverlap)
+
+ @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testRetainAll_partialOverlap() {
+ expectReturnsTrue(partialOverlap);
+ expectContents(samples.e2);
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL)
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testRetainAll_partialOverlapUnsupported() {
+ expectThrows(partialOverlap);
+ expectUnchanged();
+ }
+
+ // retainAll(containsDuplicates)
+
+ @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+ @CollectionSize.Require(ONE)
+ public void testRetainAll_containsDuplicatesSizeOne() {
+ expectReturnsFalse(containsDuplicates);
+ expectContents(samples.e0);
+ }
+
+ @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testRetainAll_containsDuplicatesSizeSeveral() {
+ expectReturnsTrue(containsDuplicates);
+ expectContents(samples.e0);
+ }
+
+ // retainAll(nullSingleton)
+
+ @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+ @CollectionSize.Require(ZERO)
+ public void testRetainAll_nullSingletonPreviouslyEmpty() {
+ expectReturnsFalse(nullSingleton);
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+ @CollectionSize.Require(absent = ZERO)
+ public void testRetainAll_nullSingletonPreviouslyNonEmpty() {
+ expectReturnsTrue(nullSingleton);
+ expectContents();
+ }
+
+ @CollectionFeature.Require({SUPPORTS_RETAIN_ALL, ALLOWS_NULL_VALUES})
+ @CollectionSize.Require(ONE)
+ public void testRetainAll_nullSingletonPreviouslySingletonWithNull() {
+ initCollectionWithNullElement();
+ expectReturnsFalse(nullSingleton);
+ expectContents(createArrayWithNullElement());
+ }
+
+ @CollectionFeature.Require({SUPPORTS_RETAIN_ALL, ALLOWS_NULL_VALUES})
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testRetainAll_nullSingletonPreviouslySeveralWithNull() {
+ initCollectionWithNullElement();
+ expectReturnsTrue(nullSingleton);
+ expectContents(nullSingleton.toRetain);
+ }
+
+ // nullSingleton.retainAll()
+
+ @CollectionFeature.Require({SUPPORTS_RETAIN_ALL, ALLOWS_NULL_VALUES})
+ @CollectionSize.Require(absent = ZERO)
+ public void testRetainAll_containsNonNullWithNull() {
+ initCollectionWithNullElement();
+ expectReturnsTrue(disjoint);
+ expectContents();
+ }
+
+ // retainAll(null)
+
+ /*
+ * AbstractCollection fails the retainAll(null) test when the subject
+ * collection is empty, but we'd still like to test retainAll(null) when we
+ * can. We split the test into empty and non-empty cases. This allows us to
+ * suppress only the former.
+ */
+
+ @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+ @CollectionSize.Require(ZERO)
+ public void testRetainAll_nullCollectionReferenceEmptySubject() {
+ try {
+ collection.retainAll(null);
+ // Returning successfully is not ideal, but tolerated.
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+ @CollectionSize.Require(absent = ZERO)
+ public void testRetainAll_nullCollectionReferenceNonEmptySubject() {
+ try {
+ collection.retainAll(null);
+ fail("retainAll(null) should throw NullPointerException");
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ private void expectReturnsTrue(Target target) {
+ String message
+ = String.format("retainAll(%s) should return true", target);
+ assertTrue(message, collection.retainAll(target.toRetain));
+ }
+
+ private void expectReturnsFalse(Target target) {
+ String message
+ = String.format("retainAll(%s) should return false", target);
+ assertFalse(message, collection.retainAll(target.toRetain));
+ }
+
+ private void expectThrows(Target target) {
+ try {
+ collection.retainAll(target.toRetain);
+ String message = String.format("retainAll(%s) should throw", target);
+ fail(message);
+ } catch (UnsupportedOperationException expected) {
+ }
+ }
+
+ private void expectReturnsFalseOrThrows(Target target) {
+ String message
+ = String.format("retainAll(%s) should return false or throw", target);
+ try {
+ assertFalse(message, collection.retainAll(target.toRetain));
+ } catch (UnsupportedOperationException tolerated) {
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/CollectionSizeTester.java b/testfw/com/google/common/collect/testing/testers/CollectionSizeTester.java
new file mode 100644
index 0000000..a234446
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/CollectionSizeTester.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+
+/**
+ * A generic JUnit test which tests {@code size()} operations on a collection.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * @author Kevin Bourrillion
+ */
+public class CollectionSizeTester<E> extends AbstractCollectionTester<E> {
+ public void testSize() {
+ assertEquals("size():", getNumElements(), collection.size());
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/CollectionToArrayTester.java b/testfw/com/google/common/collect/testing/testers/CollectionToArrayTester.java
new file mode 100644
index 0000000..54dcb2a
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/CollectionToArrayTester.java
@@ -0,0 +1,200 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.Helpers;
+import com.google.common.collect.testing.WrongType;
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.KNOWN_ORDER;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * A generic JUnit test which tests {@code toArray()} operations on a
+ * collection. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * @author Kevin Bourrillion
+ * @author Chris Povirk
+ */
+public class CollectionToArrayTester<E> extends AbstractCollectionTester<E> {
+ public void testToArray_noArgs() {
+ Object[] array = collection.toArray();
+ expectArrayContentsAnyOrder(createSamplesArray(), array);
+ }
+
+ /**
+ * {@link Collection#toArray(Object[])} says: "Note that
+ * <tt>toArray(new Object[0])</tt> is identical in function to
+ * <tt>toArray()</tt>."
+ *
+ * <p>For maximum effect, the collection under test should be created from an
+ * element array of a type other than {@code Object[]}.
+ */
+ public void testToArray_isPlainObjectArray() {
+ Object[] array = collection.toArray();
+ assertEquals(Object[].class, array.getClass());
+ }
+
+ public void testToArray_emptyArray() {
+ E[] empty = getSubjectGenerator().createArray(0);
+ E[] array = collection.toArray(empty);
+ assertEquals("toArray(emptyT[]) should return an array of type T",
+ empty.getClass(), array.getClass());
+ assertEquals("toArray(emptyT[]).length:", getNumElements(), array.length);
+ expectArrayContentsAnyOrder(createSamplesArray(), array);
+ }
+
+ @CollectionFeature.Require(KNOWN_ORDER)
+ public void testToArray_emptyArray_ordered() {
+ E[] empty = getSubjectGenerator().createArray(0);
+ E[] array = collection.toArray(empty);
+ assertEquals("toArray(emptyT[]) should return an array of type T",
+ empty.getClass(), array.getClass());
+ assertEquals("toArray(emptyT[]).length:", getNumElements(), array.length);
+ expectArrayContentsInOrder(getOrderedElements(), array);
+ }
+
+ public void testToArray_emptyArrayOfObject() {
+ Object[] in = new Object[0];
+ Object[] array = collection.toArray(in);
+ assertEquals("toArray(emptyObject[]) should return an array of type Object",
+ Object[].class, array.getClass());
+ assertEquals("toArray(emptyObject[]).length",
+ getNumElements(), array.length);
+ expectArrayContentsAnyOrder(createSamplesArray(), array);
+ }
+
+ public void testToArray_rightSizedArray() {
+ E[] array = getSubjectGenerator().createArray(getNumElements());
+ assertSame("toArray(sameSizeE[]) should return the given array",
+ array, collection.toArray(array));
+ expectArrayContentsAnyOrder(createSamplesArray(), array);
+ }
+
+ @CollectionFeature.Require(KNOWN_ORDER)
+ public void testToArray_rightSizedArray_ordered() {
+ E[] array = getSubjectGenerator().createArray(getNumElements());
+ assertSame("toArray(sameSizeE[]) should return the given array",
+ array, collection.toArray(array));
+ expectArrayContentsInOrder(getOrderedElements(), array);
+ }
+
+ public void testToArray_rightSizedArrayOfObject() {
+ Object[] array = new Object[getNumElements()];
+ assertSame("toArray(sameSizeObject[]) should return the given array",
+ array, collection.toArray(array));
+ expectArrayContentsAnyOrder(createSamplesArray(), array);
+ }
+
+ @CollectionFeature.Require(KNOWN_ORDER)
+ public void testToArray_rightSizedArrayOfObject_ordered() {
+ Object[] array = new Object[getNumElements()];
+ assertSame("toArray(sameSizeObject[]) should return the given array",
+ array, collection.toArray(array));
+ expectArrayContentsInOrder(getOrderedElements(), array);
+ }
+
+ public void testToArray_oversizedArray() {
+ E[] array = getSubjectGenerator().createArray(getNumElements() + 2);
+ array[getNumElements()] = samples.e3;
+ array[getNumElements() + 1] = samples.e3;
+ assertSame("toArray(overSizedE[]) should return the given array",
+ array, collection.toArray(array));
+
+ List<E> subArray = Arrays.asList(array).subList(0, getNumElements());
+ E[] expectedSubArray = createSamplesArray();
+ for (int i = 0; i < getNumElements(); i++) {
+ assertTrue(
+ "toArray(overSizedE[]) should contain element " + expectedSubArray[i],
+ subArray.contains(expectedSubArray[i]));
+ }
+ assertNull("The array element "
+ + "immediately following the end of the collection should be nulled",
+ array[getNumElements()]);
+ // array[getNumElements() + 1] might or might not have been nulled
+ }
+
+ @CollectionFeature.Require(KNOWN_ORDER)
+ public void testToArray_oversizedArray_ordered() {
+ E[] array = getSubjectGenerator().createArray(getNumElements() + 2);
+ array[getNumElements()] = samples.e3;
+ array[getNumElements() + 1] = samples.e3;
+ assertSame("toArray(overSizedE[]) should return the given array",
+ array, collection.toArray(array));
+
+ List<E> expected = getOrderedElements();
+ for (int i = 0; i < getNumElements(); i++) {
+ assertEquals(expected.get(i), array[i]);
+ }
+ assertNull("The array element "
+ + "immediately following the end of the collection should be nulled",
+ array[getNumElements()]);
+ // array[getNumElements() + 1] might or might not have been nulled
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ public void testToArray_emptyArrayOfWrongTypeForNonEmptyCollection() {
+ try {
+ WrongType[] array = new WrongType[0];
+ collection.toArray(array);
+ fail("toArray(notAssignableTo[]) should throw");
+ } catch (ArrayStoreException expected) {
+ }
+ }
+
+ @CollectionSize.Require(ZERO)
+ public void testToArray_emptyArrayOfWrongTypeForEmptyCollection() {
+ WrongType[] array = new WrongType[0];
+ assertSame(
+ "toArray(sameSizeNotAssignableTo[]) should return the given array",
+ array, collection.toArray(array));
+ }
+
+ private void expectArrayContentsAnyOrder(Object[] expected, Object[] actual) {
+ Helpers.assertEqualIgnoringOrder(
+ Arrays.asList(expected), Arrays.asList(actual));
+ }
+
+ private void expectArrayContentsInOrder(List<E> expected, Object[] actual) {
+ assertEquals("toArray() ordered contents: ",
+ expected, Arrays.asList(actual));
+ }
+
+ /**
+ * Returns the {@link Method} instance for
+ * {@link #testToArray_isPlainObjectArray()} so that tests of
+ * {@link Arrays#asList(Object[])} can suppress it with {@code
+ * FeatureSpecificTestSuiteBuilder.suppressing()} until <a
+ * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6260652">Sun bug
+ * 6260652</a> is fixed.
+ */
+ public static Method getToArrayIsPlainObjectArrayMethod() {
+ try {
+ return CollectionToArrayTester.class
+ .getMethod("testToArray_isPlainObjectArray");
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/CollectionToStringTester.java b/testfw/com/google/common/collect/testing/testers/CollectionToStringTester.java
new file mode 100644
index 0000000..979d4a0
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/CollectionToStringTester.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.Helpers;
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.KNOWN_ORDER;
+import static com.google.common.collect.testing.features.CollectionFeature.NON_STANDARD_TOSTRING;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.SEVERAL;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+/**
+ * A generic JUnit test which tests {@code toString()} operations on a
+ * collection. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * @author Kevin Bourrillion
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class CollectionToStringTester<E> extends AbstractCollectionTester<E> {
+ public void testToString_minimal() {
+ assertNotNull("toString() should not return null",
+ collection.toString());
+ }
+
+ @CollectionSize.Require(ZERO)
+ @CollectionFeature.Require(absent = NON_STANDARD_TOSTRING)
+ public void testToString_size0() {
+ assertEquals("emptyCollection.toString should return []", "[]",
+ collection.toString());
+ }
+
+ @CollectionSize.Require(ONE)
+ @CollectionFeature.Require(absent = NON_STANDARD_TOSTRING)
+ public void testToString_size1() {
+ assertEquals("size1Collection.toString should return [{element}]",
+ "[" + samples.e0 + "]", collection.toString());
+ }
+
+ @CollectionSize.Require(SEVERAL)
+ @CollectionFeature.Require(
+ value = KNOWN_ORDER, absent = NON_STANDARD_TOSTRING)
+ public void testToString_sizeSeveral() {
+ String expected = Helpers.copyToList(getOrderedElements()).toString();
+ assertEquals("collection.toString() incorrect",
+ expected, collection.toString());
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/ListAddAllAtIndexTester.java b/testfw/com/google/common/collect/testing/testers/ListAddAllAtIndexTester.java
new file mode 100644
index 0000000..7fcec5c
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/ListAddAllAtIndexTester.java
@@ -0,0 +1,180 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import com.google.common.collect.testing.features.ListFeature;
+import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_ADD_ALL_WITH_INDEX;
+import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_ADD_WITH_INDEX;
+
+import static java.util.Collections.singletonList;
+import java.util.List;
+
+/**
+ * A generic JUnit test which tests {@code addAll(int, Collection)} operations
+ * on a list. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class ListAddAllAtIndexTester<E> extends AbstractListTester<E> {
+ @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX)
+ @CollectionSize.Require(absent = ZERO)
+ public void testAddAllAtIndex_supportedAllPresent() {
+ assertTrue("addAll(n, allPresent) should return true",
+ getList().addAll(0, MinimalCollection.of(samples.e0)));
+ expectAdded(0, samples.e0);
+ }
+
+ @ListFeature.Require(absent = SUPPORTS_ADD_ALL_WITH_INDEX)
+ @CollectionSize.Require(absent = ZERO)
+ public void testAddAllAtIndex_unsupportedAllPresent() {
+ try {
+ getList().addAll(0, MinimalCollection.of(samples.e0));
+ fail("addAll(n, allPresent) should throw");
+ } catch (UnsupportedOperationException expected) {
+ }
+ expectUnchanged();
+ }
+
+ @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX)
+ @CollectionSize.Require(absent = ZERO)
+ public void testAddAllAtIndex_supportedSomePresent() {
+ assertTrue("addAll(n, allPresent) should return true",
+ getList().addAll(0, MinimalCollection.of(samples.e0, samples.e3)));
+ expectAdded(0, samples.e0, samples.e3);
+ }
+
+ @ListFeature.Require(absent = SUPPORTS_ADD_ALL_WITH_INDEX)
+ @CollectionSize.Require(absent = ZERO)
+ public void testAddAllAtIndex_unsupportedSomePresent() {
+ try {
+ getList().addAll(0, MinimalCollection.of(samples.e0, samples.e3));
+ fail("addAll(n, allPresent) should throw");
+ } catch (UnsupportedOperationException expected) {
+ }
+ expectUnchanged();
+ expectMissing(samples.e3);
+ }
+
+ @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX)
+ public void testAddAllAtIndex_supportedNothing() {
+ assertFalse("addAll(n, nothing) should return false",
+ getList().addAll(0, emptyCollection()));
+ expectUnchanged();
+ }
+
+ @ListFeature.Require(absent = SUPPORTS_ADD_ALL_WITH_INDEX)
+ public void testAddAllAtIndex_unsupportedNothing() {
+ try {
+ assertFalse("addAll(n, nothing) should return false or throw",
+ getList().addAll(0, emptyCollection()));
+ } catch (UnsupportedOperationException tolerated) {
+ }
+ expectUnchanged();
+ }
+
+ @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX)
+ public void testAddAllAtIndex_withDuplicates() {
+ MinimalCollection<E> elementsToAdd
+ = MinimalCollection.of(samples.e0, samples.e1, samples.e0, samples.e1);
+ assertTrue("addAll(n, hasDuplicates) should return true",
+ getList().addAll(0, elementsToAdd));
+ expectAdded(0, samples.e0, samples.e1, samples.e0, samples.e1);
+ }
+
+ @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX)
+ @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+ public void testAddAllAtIndex_nullSupported() {
+ List<E> containsNull = singletonList(null);
+ assertTrue("addAll(n, containsNull) should return true",
+ getList().addAll(0, containsNull));
+ /*
+ * We need (E) to force interpretation of null as the single element of a
+ * varargs array, not the array itself
+ */
+ expectAdded(0, (E) null);
+ }
+
+ @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX)
+ @CollectionFeature.Require(absent = ALLOWS_NULL_VALUES)
+ public void testAddAllAtIndex_nullUnsupported() {
+ List<E> containsNull = singletonList(null);
+ try {
+ getList().addAll(0, containsNull);
+ fail("addAll(n, containsNull) should throw");
+ } catch (NullPointerException expected) {
+ }
+ expectUnchanged();
+ expectNullMissingWhenNullUnsupported(
+ "Should not contain null after unsupported addAll(n, containsNull)");
+ }
+
+ @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX)
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testAddAllAtIndex_middle() {
+ assertTrue("addAll(middle, disjoint) should return true",
+ getList().addAll(getNumElements() / 2, createDisjointCollection()));
+ expectAdded(getNumElements() / 2, createDisjointCollection());
+ }
+
+ @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX)
+ @CollectionSize.Require(absent = ZERO)
+ public void testAddAllAtIndex_end() {
+ assertTrue("addAll(end, disjoint) should return true",
+ getList().addAll(getNumElements(), createDisjointCollection()));
+ expectAdded(getNumElements(), createDisjointCollection());
+ }
+
+ @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX)
+ public void testAddAllAtIndex_nullCollectionReference() {
+ try {
+ getList().addAll(0, null);
+ fail("addAll(n, null) should throw");
+ } catch (NullPointerException expected) {
+ }
+ expectUnchanged();
+ }
+
+ @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
+ public void testAddAllAtIndex_negative() {
+ try {
+ getList().addAll(-1, MinimalCollection.of(samples.e3));
+ fail("addAll(-1, e) should throw");
+ } catch (IndexOutOfBoundsException expected) {
+ }
+ expectUnchanged();
+ expectMissing(samples.e3);
+ }
+
+ @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
+ public void testAddAllAtIndex_tooLarge() {
+ try {
+ getList().addAll(getNumElements() + 1, MinimalCollection.of(samples.e3));
+ fail("addAll(size + 1, e) should throw");
+ } catch (IndexOutOfBoundsException expected) {
+ }
+ expectUnchanged();
+ expectMissing(samples.e3);
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/ListAddAllTester.java b/testfw/com/google/common/collect/testing/testers/ListAddAllTester.java
new file mode 100644
index 0000000..9895ca9
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/ListAddAllTester.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD_ALL;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+/**
+ * A generic JUnit test which tests {@code addAll(Collection)} operations on a
+ * list. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class ListAddAllTester<E> extends AbstractListTester<E> {
+ @CollectionFeature.Require(SUPPORTS_ADD_ALL)
+ @CollectionSize.Require(absent = ZERO)
+ public void testAddAll_supportedAllPresent() {
+ assertTrue("addAll(allPresent) should return true",
+ getList().addAll(MinimalCollection.of(samples.e0)));
+ expectAdded(samples.e0);
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_ADD_ALL)
+ @CollectionSize.Require(absent = ZERO)
+ public void testAddAll_unsupportedAllPresent() {
+ try {
+ getList().addAll(MinimalCollection.of(samples.e0));
+ fail("addAll(allPresent) should throw");
+ } catch (UnsupportedOperationException expected) {
+ }
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require(SUPPORTS_ADD_ALL)
+ public void testAddAll_withDuplicates() {
+ MinimalCollection<E> elementsToAdd
+ = MinimalCollection.of(samples.e0, samples.e1, samples.e0, samples.e1);
+ assertTrue("addAll(hasDuplicates) should return true",
+ getList().addAll(elementsToAdd));
+ expectAdded(samples.e0, samples.e1, samples.e0, samples.e1);
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/ListAddAtIndexTester.java b/testfw/com/google/common/collect/testing/testers/ListAddAtIndexTester.java
new file mode 100644
index 0000000..3301ee6
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/ListAddAtIndexTester.java
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import com.google.common.collect.testing.features.ListFeature;
+import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_ADD_WITH_INDEX;
+
+import java.lang.reflect.Method;
+
+/**
+ * A generic JUnit test which tests {@code add(int, Object)} operations on a
+ * list. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class ListAddAtIndexTester<E> extends AbstractListTester<E> {
+ @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
+ @CollectionSize.Require(absent = ZERO)
+ public void testAddAtIndex_supportedPresent() {
+ getList().add(0, samples.e0);
+ expectAdded(0, samples.e0);
+ }
+
+ @ListFeature.Require(absent = SUPPORTS_ADD_WITH_INDEX)
+ @CollectionSize.Require(absent = ZERO)
+ /*
+ * absent = ZERO isn't required, since unmodList.add() must
+ * throw regardless, but it keeps the method name accurate.
+ */
+ public void testAddAtIndex_unsupportedPresent() {
+ try {
+ getList().add(0, samples.e0);
+ fail("add(n, present) should throw");
+ } catch (UnsupportedOperationException expected) {
+ }
+ expectUnchanged();
+ }
+
+ @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
+ public void testAddAtIndex_supportedNotPresent() {
+ getList().add(0, samples.e3);
+ expectAdded(0, samples.e3);
+ }
+
+ @ListFeature.Require(absent = SUPPORTS_ADD_WITH_INDEX)
+ public void testAddAtIndex_unsupportedNotPresent() {
+ try {
+ getList().add(0, samples.e3);
+ fail("add(n, notPresent) should throw");
+ } catch (UnsupportedOperationException expected) {
+ }
+ expectUnchanged();
+ expectMissing(samples.e3);
+ }
+
+ @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testAddAtIndex_middle() {
+ getList().add(getNumElements() / 2, samples.e3);
+ expectAdded(getNumElements() / 2, samples.e3);
+ }
+
+ @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
+ @CollectionSize.Require(absent = ZERO)
+ public void testAddAtIndex_end() {
+ getList().add(getNumElements(), samples.e3);
+ expectAdded(getNumElements(), samples.e3);
+ }
+
+ @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
+ @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+ public void testAddAtIndex_nullSupported() {
+ getList().add(0, null);
+ expectAdded(0, (E) null);
+ }
+
+ @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
+ @CollectionFeature.Require(absent = ALLOWS_NULL_VALUES)
+ public void testAddAtIndex_nullUnsupported() {
+ try {
+ getList().add(0, null);
+ fail("add(n, null) should throw");
+ } catch (NullPointerException expected) {
+ }
+ expectUnchanged();
+ expectNullMissingWhenNullUnsupported(
+ "Should not contain null after unsupported add(n, null)");
+ }
+
+ @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
+ public void testAddAtIndex_negative() {
+ try {
+ getList().add(-1, samples.e3);
+ fail("add(-1, e) should throw");
+ } catch (IndexOutOfBoundsException expected) {
+ }
+ expectUnchanged();
+ expectMissing(samples.e3);
+ }
+
+ @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
+ public void testAddAtIndex_tooLarge() {
+ try {
+ getList().add(getNumElements() + 1, samples.e3);
+ fail("add(size + 1, e) should throw");
+ } catch (IndexOutOfBoundsException expected) {
+ }
+ expectUnchanged();
+ expectMissing(samples.e3);
+ }
+
+ /**
+ * Returns the {@link Method} instance for
+ * {@link #testAddAtIndex_nullSupported()} so that tests can suppress it. See
+ * {@link CollectionAddTester#getAddNullSupportedMethod()} for details.
+ */
+ public static Method getAddNullSupportedMethod() {
+ try {
+ return
+ ListAddAtIndexTester.class.getMethod("testAddAtIndex_nullSupported");
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/ListAddTester.java b/testfw/com/google/common/collect/testing/testers/ListAddTester.java
new file mode 100644
index 0000000..607735a
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/ListAddTester.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.Helpers;
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import java.lang.reflect.Method;
+import java.util.List;
+
+/**
+ * A generic JUnit test which tests {@code add(Object)} operations on a list.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class ListAddTester<E> extends AbstractListTester<E> {
+ @CollectionFeature.Require(SUPPORTS_ADD)
+ @CollectionSize.Require(absent = ZERO)
+ public void testAdd_supportedPresent() {
+ assertTrue("add(present) should return true", getList().add(samples.e0));
+ expectAdded(samples.e0);
+ }
+
+ @CollectionFeature.Require(absent = SUPPORTS_ADD)
+ @CollectionSize.Require(absent = ZERO)
+ /*
+ * absent = ZERO isn't required, since unmodList.add() must
+ * throw regardless, but it keeps the method name accurate.
+ */
+ public void testAdd_unsupportedPresent() {
+ try {
+ getList().add(samples.e0);
+ fail("add(present) should throw");
+ } catch (UnsupportedOperationException expected) {
+ }
+ }
+
+ @CollectionFeature.Require(value = {SUPPORTS_ADD, ALLOWS_NULL_VALUES})
+ @CollectionSize.Require(absent = ZERO)
+ public void testAdd_supportedNullPresent() {
+ E[] array = createArrayWithNullElement();
+ collection = getSubjectGenerator().create(array);
+ assertTrue("add(nullPresent) should return true", getList().add(null));
+
+ List<E> expected = Helpers.copyToList(array);
+ expected.add(null);
+ expectContents(expected);
+ }
+
+ /**
+ * Returns the {@link Method} instance for
+ * {@link #testAdd_supportedNullPresent()} so that tests can suppress it. See
+ * {@link CollectionAddTester#getAddNullSupportedMethod()} for details.
+ */
+ public static Method getAddSupportedNullPresentMethod() {
+ try {
+ return ListAddTester.class.getMethod("testAdd_supportedNullPresent");
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/ListCreationTester.java b/testfw/com/google/common/collect/testing/testers/ListCreationTester.java
new file mode 100644
index 0000000..0049f06
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/ListCreationTester.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+/**
+ * A generic JUnit test which tests creation (typically through a constructor or
+ * static factory method) of a list. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ */
+public class ListCreationTester<E> extends AbstractListTester<E> {
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testCreateWithDuplicates() {
+ E[] array = createSamplesArray();
+ array[1] = samples.e0;
+ collection = getSubjectGenerator().create(array);
+
+ expectContents(array);
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/ListEqualsTester.java b/testfw/com/google/common/collect/testing/testers/ListEqualsTester.java
new file mode 100644
index 0000000..90894cc
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/ListEqualsTester.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+
+import com.google.common.collect.testing.MinimalSet;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Tests {@link List#equals}.
+ *
+ * @author George van den Driessche
+ */
+public class ListEqualsTester<E> extends AbstractListTester<E> {
+ public void testEquals_otherListWithSameElements() {
+ assertTrue(
+ "A List should equal any other List containing the same elements.",
+ getList().equals(new ArrayList<E>(getSampleElements())));
+ }
+
+ @CollectionSize.Require(absent=CollectionSize.ZERO)
+ public void testEquals_otherListWithDifferentElements() throws Exception {
+ ArrayList<E> other = new ArrayList<E>(getSampleElements());
+ other.set(other.size() / 2, getSubjectGenerator().samples().e3);
+ assertFalse(
+ "A List should not equal another List containing different elements.",
+ getList().equals(other));
+ }
+
+ @CollectionSize.Require(absent=CollectionSize.ZERO)
+ public void testEquals_otherListContainingNull() {
+ List<E> other = new ArrayList<E>(getSampleElements());
+ other.set(other.size() / 2, null);
+ assertFalse("Two Lists should not be equal if exactly one of them has "
+ + "null at a given index.",
+ getList().equals(other));
+ }
+
+ @CollectionSize.Require(absent=CollectionSize.ZERO)
+ @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+ public void testEquals_containingNull() {
+ ArrayList<E> elements = new ArrayList<E>(getSampleElements());
+ elements.set(elements.size() / 2, null);
+ collection = getSubjectGenerator().create(elements.toArray());
+ List<E> other = new ArrayList<E>(getSampleElements());
+ assertFalse("Two Lists should not be equal if exactly one of them has "
+ + "null at a given index.",
+ getList().equals(other));
+ }
+
+ @CollectionSize.Require(absent=CollectionSize.ZERO)
+ public void testEquals_shorterList() {
+ Collection<E> fewerElements = getSampleElements(getNumElements() - 1);
+ assertFalse("Lists of different sizes should not be equal.",
+ getList().equals(new ArrayList<E>(fewerElements)));
+ }
+
+ public void testEquals_longerList() {
+ Collection<E> moreElements = getSampleElements(getNumElements() + 1);
+ assertFalse("Lists of different sizes should not be equal.",
+ getList().equals(new ArrayList<E>(moreElements)));
+ }
+
+ public void testEquals_set() {
+ assertFalse("A List should never equal a Set.",
+ getList().equals(MinimalSet.from(getList())));
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/ListGetTester.java b/testfw/com/google/common/collect/testing/testers/ListGetTester.java
new file mode 100644
index 0000000..c5b3a6a
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/ListGetTester.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+/**
+ * A generic JUnit test which tests {@code get()} operations on a list. Can't be
+ * invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ */
+public class ListGetTester<E> extends AbstractListTester<E> {
+ public void testGet_valid() {
+ // This calls get() on each index and checks the result:
+ expectContents(createSamplesArray());
+ }
+
+ public void testGet_negative() {
+ try {
+ getList().get(-1);
+ fail("get(-1) should throw");
+ } catch (IndexOutOfBoundsException expected) {
+ }
+ }
+
+ public void testGet_tooLarge() {
+ try {
+ getList().get(getNumElements());
+ fail("get(size) should throw");
+ } catch (IndexOutOfBoundsException expected) {
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/ListHashCodeTester.java b/testfw/com/google/common/collect/testing/testers/ListHashCodeTester.java
new file mode 100644
index 0000000..32bac42
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/ListHashCodeTester.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import java.lang.reflect.Method;
+
+/**
+ * Tests {@link java.util.List#hashCode}.
+ *
+ * @author George van den Driessche
+ */
+public class ListHashCodeTester<E> extends AbstractListTester<E> {
+ public void testHashCode() {
+ int expectedHashCode = 1;
+ for (E element : getSampleElements()) {
+ expectedHashCode = 31 * expectedHashCode +
+ ((element == null) ? 0 : element.hashCode());
+ }
+ assertEquals(
+ "A List's hashCode() should be computed from those of its elements.",
+ expectedHashCode, getList().hashCode());
+ }
+
+ /**
+ * Returns the {@link Method} instance for {@link #testHashCode()} so that
+ * list tests on unhashable objects can suppress it with
+ * {@code FeatureSpecificTestSuiteBuilder.suppressing()}.
+ */
+ public static Method getHashCodeMethod() {
+ try {
+ return ListHashCodeTester.class.getMethod("testHashCode");
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/ListIndexOfTester.java b/testfw/com/google/common/collect/testing/testers/ListIndexOfTester.java
new file mode 100644
index 0000000..2684738
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/ListIndexOfTester.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+/**
+ * A generic JUnit test which tests {@code indexOf()} operations on a list.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ */
+public class ListIndexOfTester<E> extends AbstractListIndexOfTester<E> {
+ @Override protected int find(Object o) {
+ return getList().indexOf(o);
+ }
+
+ @Override protected String getMethodName() {
+ return "indexOf";
+ }
+
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testIndexOf_duplicate() {
+ E[] array = createSamplesArray();
+ array[getNumElements() / 2] = samples.e0;
+ collection = getSubjectGenerator().create(array);
+ assertEquals("indexOf(duplicate) should return index of first occurrence",
+ 0, getList().indexOf(samples.e0));
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/ListLastIndexOfTester.java b/testfw/com/google/common/collect/testing/testers/ListLastIndexOfTester.java
new file mode 100644
index 0000000..7cc0004
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/ListLastIndexOfTester.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+/**
+ * A generic JUnit test which tests {@code lastIndexOf()} operations on a list.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ */
+public class ListLastIndexOfTester<E> extends AbstractListIndexOfTester<E> {
+ @Override protected int find(Object o) {
+ return getList().lastIndexOf(o);
+ }
+
+ @Override protected String getMethodName() {
+ return "lastIndexOf";
+ }
+
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testLastIndexOf_duplicate() {
+ E[] array = createSamplesArray();
+ array[getNumElements() / 2] = samples.e0;
+ collection = getSubjectGenerator().create(array);
+ assertEquals(
+ "lastIndexOf(duplicate) should return index of last occurrence",
+ getNumElements() / 2, getList().lastIndexOf(samples.e0));
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/ListListIteratorTester.java b/testfw/com/google/common/collect/testing/testers/ListListIteratorTester.java
new file mode 100644
index 0000000..0df79b0
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/ListListIteratorTester.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.Helpers;
+import com.google.common.collect.testing.IteratorFeature;
+import static com.google.common.collect.testing.IteratorFeature.MODIFIABLE;
+import static com.google.common.collect.testing.IteratorFeature.UNMODIFIABLE;
+import com.google.common.collect.testing.ListIteratorTester;
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE;
+import com.google.common.collect.testing.features.ListFeature;
+import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_ADD_WITH_INDEX;
+import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_SET;
+
+import java.lang.reflect.Method;
+import static java.util.Collections.singleton;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+/**
+ * A generic JUnit test which tests {@code listIterator} operations on a list.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ * @author Kevin Bourrillion
+ */
+public class ListListIteratorTester<E> extends AbstractListTester<E> {
+ // TODO: switch to DerivedIteratorTestSuiteBuilder
+
+ @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
+ @ListFeature.Require(absent = {SUPPORTS_SET, SUPPORTS_ADD_WITH_INDEX})
+ public void testListIterator_unmodifiable() throws Exception {
+ runListIteratorTest(UNMODIFIABLE);
+ }
+
+ /*
+ * For now, we don't cope with testing this when the list supports only some
+ * modification operations.
+ */
+ @CollectionFeature.Require(SUPPORTS_REMOVE)
+ @ListFeature.Require({SUPPORTS_SET, SUPPORTS_ADD_WITH_INDEX})
+ public void testListIterator_fullyModifiable() throws Exception {
+ runListIteratorTest(MODIFIABLE);
+ }
+
+ private void runListIteratorTest(Set<IteratorFeature> features)
+ throws Exception {
+ new ListIteratorTester<E>(4, singleton(samples.e4), features,
+ Helpers.copyToList(getSampleElements()), 0) {
+ {
+ // TODO: don't set this universally
+ stopTestingWhenAddThrowsException();
+ }
+
+ @Override protected ListIterator<E> newTargetIterator() {
+ resetCollection();
+ return getList().listIterator();
+ }
+
+ @Override protected void verify(List<E> elements) {
+ expectContents(elements);
+ }
+ }.test();
+ }
+
+ public void testListIterator_tooLow() {
+ try {
+ getList().listIterator(-1);
+ fail();
+ } catch (IndexOutOfBoundsException expected) {
+ }
+ }
+
+ public void testListIterator_tooHigh() {
+ try {
+ getList().listIterator(getNumElements() + 1);
+ fail();
+ } catch (IndexOutOfBoundsException expected) {
+ }
+ }
+
+ public void testListIterator_atSize() {
+ getList().listIterator(getNumElements());
+ // TODO: run the iterator through ListIteratorTester
+ }
+
+ /**
+ * Returns the {@link Method} instance for
+ * {@link #testListIterator_fullyModifiable()} so that tests of
+ * {@link CopyOnWriteArraySet} can suppress it with
+ * {@code FeatureSpecificTestSuiteBuilder.suppressing()} until <a
+ * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6570575">Sun bug
+ * 6570575</a> is fixed.
+ */
+ public static Method getListIteratorFullyModifiableMethod() {
+ try {
+ return ListListIteratorTester.class
+ .getMethod("testListIterator_fullyModifiable");
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/ListRemoveAllTester.java b/testfw/com/google/common/collect/testing/testers/ListRemoveAllTester.java
new file mode 100644
index 0000000..d7dcc4c
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/ListRemoveAllTester.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE_ALL;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+/**
+ * A generic JUnit test which tests removeAll operations on a list. Can't be
+ * invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * @author George van den Driessche
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class ListRemoveAllTester<E> extends AbstractListTester<E> {
+ @CollectionFeature.Require(SUPPORTS_REMOVE_ALL)
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testRemoveAll_duplicate() {
+ ArrayWithDuplicate<E> arrayAndDuplicate = createArrayWithDuplicateElement();
+ collection = getSubjectGenerator().create(arrayAndDuplicate.elements);
+ E duplicate = arrayAndDuplicate.duplicate;
+
+ assertTrue("removeAll(intersectingCollection) should return true",
+ getList().removeAll(MinimalCollection.of(duplicate)));
+ assertFalse("after removeAll(e), a collection should not contain e even " +
+ "if it initially contained e more than once.",
+ getList().contains(duplicate));
+ }
+
+ // All other cases are covered by CollectionRemoveAllTester.
+}
diff --git a/testfw/com/google/common/collect/testing/testers/ListRemoveAtIndexTester.java b/testfw/com/google/common/collect/testing/testers/ListRemoveAtIndexTester.java
new file mode 100644
index 0000000..511109e
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/ListRemoveAtIndexTester.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.Helpers;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import com.google.common.collect.testing.features.ListFeature;
+import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_REMOVE_WITH_INDEX;
+
+import java.util.List;
+
+/**
+ * A generic JUnit test which tests {@code remove(int)} operations on a list.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ */
+public class ListRemoveAtIndexTester<E> extends AbstractListTester<E> {
+ @ListFeature.Require(absent = SUPPORTS_REMOVE_WITH_INDEX)
+ @CollectionSize.Require(absent = ZERO)
+ public void testRemoveAtIndex_unsupported() {
+ try {
+ getList().remove(0);
+ fail("remove(i) should throw");
+ } catch (UnsupportedOperationException expected) {
+ }
+ expectUnchanged();
+ }
+
+ @ListFeature.Require(SUPPORTS_REMOVE_WITH_INDEX)
+ public void testRemoveAtIndex_negative() {
+ try {
+ getList().remove(-1);
+ fail("remove(-1) should throw");
+ } catch (IndexOutOfBoundsException expected) {
+ }
+ expectUnchanged();
+ }
+
+ @ListFeature.Require(SUPPORTS_REMOVE_WITH_INDEX)
+ public void testRemoveAtIndex_tooLarge() {
+ try {
+ getList().remove(getNumElements());
+ fail("remove(size) should throw");
+ } catch (IndexOutOfBoundsException expected) {
+ }
+ expectUnchanged();
+ }
+
+ @ListFeature.Require(SUPPORTS_REMOVE_WITH_INDEX)
+ @CollectionSize.Require(absent = ZERO)
+ public void testRemoveAtIndex_first() {
+ runRemoveTest(0);
+ }
+
+ @ListFeature.Require(SUPPORTS_REMOVE_WITH_INDEX)
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testRemoveAtIndex_middle() {
+ runRemoveTest(getNumElements() / 2);
+ }
+
+ @ListFeature.Require(SUPPORTS_REMOVE_WITH_INDEX)
+ @CollectionSize.Require(absent = ZERO)
+ public void testRemoveAtIndex_last() {
+ runRemoveTest(getNumElements() - 1);
+ }
+
+ private void runRemoveTest(int index) {
+ assertEquals(String.format(
+ "remove(%d) should return the element at index %d", index, index),
+ getList().get(index), getList().remove(index));
+ List<E> expected = Helpers.copyToList(createSamplesArray());
+ expected.remove(index);
+ expectContents(expected);
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/ListRemoveTester.java b/testfw/com/google/common/collect/testing/testers/ListRemoveTester.java
new file mode 100644
index 0000000..dce8a15
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/ListRemoveTester.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+/**
+ * A generic JUnit test which tests {@code remove(Object)} operations on a list.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * @author George van den Driessche
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class ListRemoveTester<E> extends AbstractListTester<E> {
+ @CollectionFeature.Require(SUPPORTS_REMOVE)
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testRemove_duplicate() {
+ ArrayWithDuplicate<E> arrayAndDuplicate = createArrayWithDuplicateElement();
+ collection = getSubjectGenerator().create(arrayAndDuplicate.elements);
+ E duplicate = arrayAndDuplicate.duplicate;
+
+ int firstIndex = getList().indexOf(duplicate);
+ int initialSize = getList().size();
+ assertTrue("remove(present) should return true",
+ getList().remove(duplicate));
+ assertTrue("After remove(duplicate), a list should still contain "
+ + "the duplicate element", getList().contains(duplicate));
+ assertFalse("remove(duplicate) should remove the first instance of the "
+ + "duplicate element in the list",
+ firstIndex == getList().indexOf(duplicate));
+ assertEquals("remove(present) should decrease the size of a list by one.",
+ initialSize - 1, getList().size());
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/ListRetainAllTester.java b/testfw/com/google/common/collect/testing/testers/ListRetainAllTester.java
new file mode 100644
index 0000000..d81412a
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/ListRetainAllTester.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_RETAIN_ALL;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.SEVERAL;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+/**
+ * A generic JUnit test which tests {@code retainAll} operations on a list.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ */
+public class ListRetainAllTester<E> extends AbstractListTester<E> {
+ @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testRetainAll_duplicatesKept() {
+ E[] array = createSamplesArray();
+ array[1] = samples.e0;
+ collection = getSubjectGenerator().create(array);
+ assertFalse("containsDuplicates.retainAll(superset) should return false",
+ collection.retainAll(MinimalCollection.of(createSamplesArray())));
+ expectContents(array);
+ }
+
+ @SuppressWarnings("unchecked")
+ @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+ @CollectionSize.Require(SEVERAL)
+ public void testRetainAll_duplicatesRemoved() {
+ E[] array = createSamplesArray();
+ array[1] = samples.e0;
+ collection = getSubjectGenerator().create(array);
+ assertTrue("containsDuplicates.retainAll(subset) should return true",
+ collection.retainAll(MinimalCollection.of(samples.e2)));
+ expectContents(samples.e2);
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/ListSetTester.java b/testfw/com/google/common/collect/testing/testers/ListSetTester.java
new file mode 100644
index 0000000..12f0f8c
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/ListSetTester.java
@@ -0,0 +1,153 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import com.google.common.collect.testing.features.ListFeature;
+import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_SET;
+
+import java.lang.reflect.Method;
+
+/**
+ * A generic JUnit test which tests {@code set()} operations on a list. Can't be
+ * invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * @author George van den Driessche
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class ListSetTester<E> extends AbstractListTester<E> {
+ @ListFeature.Require(SUPPORTS_SET)
+ @CollectionSize.Require(absent = ZERO)
+ public void testSet() {
+ doTestSet(samples.e3);
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+ @ListFeature.Require(SUPPORTS_SET)
+ public void testSet_null() {
+ doTestSet(null);
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+ @ListFeature.Require(SUPPORTS_SET)
+ public void testSet_replacingNull() {
+ E[] elements = createSamplesArray();
+ int i = aValidIndex();
+ elements[i] = null;
+ collection = getSubjectGenerator().create(elements);
+
+ doTestSet(samples.e3);
+ }
+
+ private void doTestSet(E newValue) {
+ int index = aValidIndex();
+ E initialValue = getList().get(index);
+ assertEquals("set(i, x) should return the old element at position i.",
+ initialValue, getList().set(index, newValue));
+ assertEquals("After set(i, x), get(i) should return x",
+ newValue, getList().get(index));
+ assertEquals("set() should not change the size of a list.",
+ getNumElements(), getList().size());
+ }
+
+ @ListFeature.Require(SUPPORTS_SET)
+ public void testSet_indexTooLow() {
+ try {
+ getList().set(-1, samples.e3);
+ fail("set(-1) should throw IndexOutOfBoundsException");
+ } catch (IndexOutOfBoundsException expected) {
+ }
+ expectUnchanged();
+ }
+
+ @ListFeature.Require(SUPPORTS_SET)
+ public void testSet_indexTooHigh() {
+ int index = getNumElements();
+ try {
+ getList().set(index, samples.e3);
+ fail("set(size) should throw IndexOutOfBoundsException");
+ } catch (IndexOutOfBoundsException expected) {
+ }
+ expectUnchanged();
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ @ListFeature.Require(absent = SUPPORTS_SET)
+ public void testSet_unsupported() {
+ try {
+ getList().set(aValidIndex(), samples.e3);
+ fail("set() should throw UnsupportedOperationException");
+ } catch (UnsupportedOperationException expected) {
+ }
+ expectUnchanged();
+ }
+
+ @CollectionSize.Require(ZERO)
+ @ListFeature.Require(absent = SUPPORTS_SET)
+ public void testSet_unsupportedByEmptyList() {
+ try {
+ getList().set(0, samples.e3);
+ fail("set() should throw UnsupportedOperationException "
+ + "or IndexOutOfBoundsException");
+ } catch (UnsupportedOperationException tolerated) {
+ } catch (IndexOutOfBoundsException tolerated) {
+ }
+ expectUnchanged();
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ @ListFeature.Require(SUPPORTS_SET)
+ @CollectionFeature.Require(absent = ALLOWS_NULL_VALUES)
+ public void testSet_nullUnsupported() {
+ try {
+ getList().set(aValidIndex(), null);
+ fail("set(null) should throw NullPointerException");
+ } catch (NullPointerException expected) {
+ }
+ expectUnchanged();
+ }
+
+ private int aValidIndex() {
+ return getList().size() / 2;
+ }
+
+ /**
+ * Returns the {@link java.lang.reflect.Method} instance for
+ * {@link #testSet_null()} so that tests of {@link
+ * java.util.Collections#checkedCollection(java.util.Collection, Class)} can
+ * suppress it with {@code FeatureSpecificTestSuiteBuilder.suppressing()}
+ * until <a
+ * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6409434">Sun bug
+ * 6409434</a> is fixed. It's unclear whether nulls were to be permitted or
+ * forbidden, but presumably the eventual fix will be to permit them, as it
+ * seems more likely that code would depend on that behavior than on the
+ * other. Thus, we say the bug is in set(), which fails to support null.
+ */
+ public static Method getSetNullSupportedMethod() {
+ try {
+ return ListSetTester.class.getMethod("testSet_null");
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/ListSubListTester.java b/testfw/com/google/common/collect/testing/testers/ListSubListTester.java
new file mode 100644
index 0000000..215b7c7
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/ListSubListTester.java
@@ -0,0 +1,354 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.Helpers;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import com.google.common.collect.testing.features.ListFeature;
+import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_ADD_WITH_INDEX;
+import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_REMOVE_WITH_INDEX;
+import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_SET;
+
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.Collections;
+import static java.util.Collections.emptyList;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+/**
+ * A generic JUnit test which tests {@code subList()} operations on a list.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class ListSubListTester<E> extends AbstractListTester<E> {
+ public void testSubList_startNegative() {
+ try {
+ getList().subList(-1, 0);
+ fail("subList(-1, 0) should throw");
+ } catch (IndexOutOfBoundsException expected) {
+ }
+ }
+
+ public void testSubList_endTooLarge() {
+ try {
+ getList().subList(0, getNumElements() + 1);
+ fail("subList(0, size + 1) should throw");
+ } catch (IndexOutOfBoundsException expected) {
+ }
+ }
+
+ public void testSubList_startGreaterThanEnd() {
+ try {
+ getList().subList(1, 0);
+ fail("subList(1, 0) should throw");
+ } catch (IndexOutOfBoundsException expected) {
+ } catch (IllegalArgumentException expected) {
+ /*
+ * The subList() docs claim that this should be an
+ * IndexOutOfBoundsException, but many JDK implementations throw
+ * IllegalArgumentException:
+ * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4506427
+ */
+ }
+ }
+
+ public void testSubList_empty() {
+ assertEquals("subList(0, 0) should be empty",
+ emptyList(), getList().subList(0, 0));
+ }
+
+ public void testSubList_entireList() {
+ assertEquals("subList(0, size) should be equal to the original list",
+ getList(), getList().subList(0, getNumElements()));
+ }
+
+ @ListFeature.Require(SUPPORTS_REMOVE_WITH_INDEX)
+ @CollectionSize.Require(absent = ZERO)
+ public void testSubList_subListRemoveAffectsOriginal() {
+ List<E> subList = getList().subList(0, 1);
+ subList.remove(0);
+ List<E> expected =
+ Arrays.asList(createSamplesArray()).subList(1, getNumElements());
+ expectContents(expected);
+ }
+
+ @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
+ public void testSubList_subListAddAffectsOriginal() {
+ List<E> subList = getList().subList(0, 0);
+ subList.add(samples.e3);
+ expectAdded(0, samples.e3);
+ }
+
+ @ListFeature.Require(SUPPORTS_SET)
+ @CollectionSize.Require(absent = ZERO)
+ public void testSubList_subListSetAffectsOriginal() {
+ List<E> subList = getList().subList(0, 1);
+ subList.set(0, samples.e3);
+ List<E> expected = Helpers.copyToList(createSamplesArray());
+ expected.set(0, samples.e3);
+ expectContents(expected);
+ }
+
+ @ListFeature.Require(SUPPORTS_SET)
+ @CollectionSize.Require(absent = ZERO)
+ public void testSubList_originalListSetAffectsSubList() {
+ List<E> subList = getList().subList(0, 1);
+ getList().set(0, samples.e3);
+ assertEquals("A set() call to a list after a sublist has been created "
+ + "should be reflected in the sublist",
+ Collections.singletonList(samples.e3), subList);
+ }
+
+ @ListFeature.Require(SUPPORTS_REMOVE_WITH_INDEX)
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testSubList_subListRemoveAffectsOriginalLargeList() {
+ List<E> subList = getList().subList(1, 3);
+ subList.remove(samples.e2);
+ List<E> expected = Helpers.copyToList(createSamplesArray());
+ expected.remove(2);
+ expectContents(expected);
+ }
+
+ @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testSubList_subListAddAtIndexAffectsOriginalLargeList() {
+ List<E> subList = getList().subList(2, 3);
+ subList.add(0, samples.e3);
+ expectAdded(2, samples.e3);
+ }
+
+ @ListFeature.Require(SUPPORTS_SET)
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testSubList_subListSetAffectsOriginalLargeList() {
+ List<E> subList = getList().subList(1, 2);
+ subList.set(0, samples.e3);
+ List<E> expected = Helpers.copyToList(createSamplesArray());
+ expected.set(1, samples.e3);
+ expectContents(expected);
+ }
+
+ @ListFeature.Require(SUPPORTS_SET)
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testSubList_originalListSetAffectsSubListLargeList() {
+ List<E> subList = getList().subList(1, 3);
+ getList().set(1, samples.e3);
+ assertEquals("A set() call to a list after a sublist has been created "
+ + "should be reflected in the sublist",
+ Arrays.asList(samples.e3, samples.e2), subList);
+ }
+
+ public void testSubList_ofSubListEmpty() {
+ List<E> subList = getList().subList(0, 0).subList(0, 0);
+ assertEquals("subList(0, 0).subList(0, 0) should be an empty list",
+ emptyList(), subList);
+ }
+
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testSubList_ofSubListNonEmpty() {
+ List<E> subList = getList().subList(0, 2).subList(1, 2);
+ assertEquals("subList(0, 2).subList(1, 2) "
+ + "should be a single-element list of the element at index 1",
+ Collections.singletonList(samples.e1), subList);
+ }
+
+ @CollectionSize.Require(absent = {ZERO})
+ public void testSubList_size() {
+ List<E> list = getList();
+ int size = getNumElements();
+ assertEquals(list.subList(0, size).size(),
+ size);
+ assertEquals(list.subList(0, size - 1).size(),
+ size - 1);
+ assertEquals(list.subList(1, size).size(),
+ size - 1);
+ assertEquals(list.subList(size, size).size(),
+ 0);
+ assertEquals(list.subList(0, 0).size(),
+ 0);
+ }
+
+ @CollectionSize.Require(absent = {ZERO})
+ public void testSubList_isEmpty() {
+ List<E> list = getList();
+ int size = getNumElements();
+ for (List<E> subList : Arrays.asList(
+ list.subList(0, size),
+ list.subList(0, size - 1),
+ list.subList(1, size),
+ list.subList(0, 0),
+ list.subList(size, size))) {
+ assertEquals(subList.isEmpty(), subList.size() == 0);
+ }
+ }
+
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testSubList_get() {
+ List<E> list = getList();
+ int size = getNumElements();
+ List<E> copy = list.subList(0, size);
+ List<E> head = list.subList(0, size - 1);
+ List<E> tail = list.subList(1, size);
+ assertEquals(list.get(0), copy.get(0));
+ assertEquals(list.get(size - 1), copy.get(size - 1));
+ assertEquals(list.get(1), tail.get(0));
+ assertEquals(list.get(size - 1), tail.get(size - 2));
+ assertEquals(list.get(0), head.get(0));
+ assertEquals(list.get(size - 2), head.get(size - 2));
+ for (List<E> subList : Arrays.asList(copy, head, tail)) {
+ for (int index : Arrays.asList(-1, subList.size())) {
+ try {
+ subList.get(index);
+ fail("expected IndexOutOfBoundsException");
+ } catch (IndexOutOfBoundsException expected) {
+ }
+ }
+ }
+ }
+
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testSubList_contains() {
+ List<E> list = getList();
+ int size = getNumElements();
+ List<E> copy = list.subList(0, size);
+ List<E> head = list.subList(0, size - 1);
+ List<E> tail = list.subList(1, size);
+ assertTrue(copy.contains(list.get(0)));
+ assertTrue(head.contains(list.get(0)));
+ assertTrue(tail.contains(list.get(1)));
+ // The following assumes all elements are distinct.
+ assertTrue(copy.contains(list.get(size - 1)));
+ assertTrue(head.contains(list.get(size - 2)));
+ assertTrue(tail.contains(list.get(size - 1)));
+ assertFalse(head.contains(list.get(size - 1)));
+ assertFalse(tail.contains(list.get(0)));
+ }
+
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testSubList_indexOf() {
+ List<E> list = getList();
+ int size = getNumElements();
+ List<E> copy = list.subList(0, size);
+ List<E> head = list.subList(0, size - 1);
+ List<E> tail = list.subList(1, size);
+ assertEquals(copy.indexOf(list.get(0)),
+ 0);
+ assertEquals(head.indexOf(list.get(0)),
+ 0);
+ assertEquals(tail.indexOf(list.get(1)),
+ 0);
+ // The following assumes all elements are distinct.
+ assertEquals(copy.indexOf(list.get(size - 1)),
+ size - 1);
+ assertEquals(head.indexOf(list.get(size - 2)),
+ size - 2);
+ assertEquals(tail.indexOf(list.get(size - 1)),
+ size - 2);
+ assertEquals(head.indexOf(list.get(size - 1)),
+ -1);
+ assertEquals(tail.indexOf(list.get(0)),
+ -1);
+ }
+
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testSubList_lastIndexOf() {
+ List<E> list = getList();
+ int size = list.size();
+ List<E> copy = list.subList(0, size);
+ List<E> head = list.subList(0, size - 1);
+ List<E> tail = list.subList(1, size);
+ assertEquals(copy.lastIndexOf(list.get(size - 1)),
+ size - 1);
+ assertEquals(head.lastIndexOf(list.get(size - 2)),
+ size - 2);
+ assertEquals(tail.lastIndexOf(list.get(size - 1)),
+ size - 2);
+ // The following assumes all elements are distinct.
+ assertEquals(copy.lastIndexOf(list.get(0)),
+ 0);
+ assertEquals(head.lastIndexOf(list.get(0)),
+ 0);
+ assertEquals(tail.lastIndexOf(list.get(1)),
+ 0);
+ assertEquals(head.lastIndexOf(list.get(size - 1)),
+ -1);
+ assertEquals(tail.lastIndexOf(list.get(0)),
+ -1);
+ }
+
+ /**
+ * Returns the {@link Method} instance for
+ * {@link #testSubList_originalListSetAffectsSubList()} so that tests
+ * of {@link CopyOnWriteArrayList} can suppress them with
+ * {@code FeatureSpecificTestSuiteBuilder.suppressing()} until <a
+ * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6570631">Sun bug
+ * 6570631</a> is fixed.
+ */
+ public static Method getSubListOriginalListSetAffectsSubListMethod() {
+ try {
+ return ListSubListTester.class
+ .getMethod("testSubList_originalListSetAffectsSubList");
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * Returns the {@link Method} instance for
+ * {@link #testSubList_originalListSetAffectsSubListLargeList()} ()} so that
+ * tests of {@link CopyOnWriteArrayList} can suppress them with
+ * {@code FeatureSpecificTestSuiteBuilder.suppressing()} until <a
+ * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6570631">Sun bug
+ * 6570631</a> is fixed.
+ */
+ public static Method
+ getSubListOriginalListSetAffectsSubListLargeListMethod() {
+ try {
+ return ListSubListTester.class
+ .getMethod("testSubList_originalListSetAffectsSubListLargeList");
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * Returns the {@link Method} instance for
+ * {@link #testSubList_subListRemoveAffectsOriginalLargeList()} so that tests
+ * of {@link CopyOnWriteArrayList} can suppress it with
+ * {@code FeatureSpecificTestSuiteBuilder.suppressing()} until <a
+ * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6570575">Sun bug
+ * 6570575</a> is fixed.
+ */
+ public static Method getSubListSubListRemoveAffectsOriginalLargeListMethod() {
+ try {
+ return ListSubListTester.class
+ .getMethod("testSubList_subListRemoveAffectsOriginalLargeList");
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /*
+ * TODO(Chris Povirk): perform all List tests on subList(), but beware
+ * infinite recursion
+ */
+}
diff --git a/testfw/com/google/common/collect/testing/testers/ListToArrayTester.java b/testfw/com/google/common/collect/testing/testers/ListToArrayTester.java
new file mode 100644
index 0000000..75e7e33
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/ListToArrayTester.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import java.util.Arrays;
+
+/**
+ * A generic JUnit test which tests {@code toArray()} operations on a list.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ */
+public class ListToArrayTester<E> extends AbstractListTester<E> {
+ // CollectionToArrayTester tests everything except ordering.
+
+ public void testToArray_noArg() {
+ Object[] actual = getList().toArray();
+ assertArrayEquals("toArray() order should match list",
+ createSamplesArray(), actual);
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ public void testToArray_tooSmall() {
+ Object[] actual = getList().toArray(new Object[0]);
+ assertArrayEquals("toArray(tooSmall) order should match list",
+ createSamplesArray(), actual);
+ }
+
+ public void testToArray_largeEnough() {
+ Object[] actual = getList().toArray(new Object[getNumElements()]);
+ assertArrayEquals("toArray(largeEnough) order should match list",
+ createSamplesArray(), actual);
+ }
+
+ private static void assertArrayEquals(String message, Object[] expected,
+ Object[] actual) {
+ assertEquals(message, Arrays.asList(expected), Arrays.asList(actual));
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/MapClearTester.java b/testfw/com/google/common/collect/testing/testers/MapClearTester.java
new file mode 100644
index 0000000..9871248
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/MapClearTester.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractMapTester;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import com.google.common.collect.testing.features.MapFeature;
+import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_CLEAR;
+
+/**
+ * A generic JUnit test which tests {@code clear()} operations on a map.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.MapTestSuiteBuilder}.
+ *
+ * @author George van den Driessche
+ * @author Chris Povirk
+ */
+public class MapClearTester<K, V> extends AbstractMapTester<K, V> {
+ @MapFeature.Require(SUPPORTS_CLEAR)
+ public void testClear() {
+ getMap().clear();
+ assertTrue("After clear(), a map should be empty.",
+ getMap().isEmpty());
+ }
+
+ @MapFeature.Require(absent = SUPPORTS_CLEAR)
+ @CollectionSize.Require(absent = ZERO)
+ public void testClear_unsupported() {
+ try {
+ getMap().clear();
+ fail("clear() should throw UnsupportedOperation if a map does "
+ + "not support it and is not empty.");
+ } catch (UnsupportedOperationException expected) {
+ }
+ expectUnchanged();
+ }
+
+ @MapFeature.Require(absent = SUPPORTS_CLEAR)
+ @CollectionSize.Require(ZERO)
+ public void testClear_unsupportedByEmptyCollection() {
+ try {
+ getMap().clear();
+ } catch (UnsupportedOperationException tolerated) {
+ }
+ expectUnchanged();
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/MapContainsKeyTester.java b/testfw/com/google/common/collect/testing/testers/MapContainsKeyTester.java
new file mode 100644
index 0000000..0ec7fa8
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/MapContainsKeyTester.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractMapTester;
+import com.google.common.collect.testing.WrongType;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import com.google.common.collect.testing.features.MapFeature;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS;
+
+/**
+ * A generic JUnit test which tests {@code containsKey()} operations on a map.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.MapTestSuiteBuilder}.
+ *
+ * @author George van den Driessche
+ */
+public class MapContainsKeyTester<K, V> extends AbstractMapTester<K, V> {
+ @CollectionSize.Require(absent = ZERO)
+ public void testContains_yes() {
+ assertTrue("containsKey(present) should return true",
+ getMap().containsKey(samples.e0.getKey()));
+ }
+
+ public void testContains_no() {
+ assertFalse("containsKey(notPresent) should return false",
+ getMap().containsKey(samples.e3.getKey()));
+ }
+
+ @MapFeature.Require(ALLOWS_NULL_KEYS)
+ public void testContains_nullNotContainedButSupported() {
+ assertFalse("containsKey(null) should return false",
+ getMap().containsKey(null));
+ }
+
+ @MapFeature.Require(absent = ALLOWS_NULL_KEYS)
+ public void testContains_nullNotContainedAndUnsupported() {
+ expectNullKeyMissingWhenNullKeysUnsupported(
+ "containsKey(null) should return false or throw");
+ }
+
+ @MapFeature.Require(ALLOWS_NULL_KEYS)
+ @CollectionSize.Require(absent = ZERO)
+ public void testContains_nonNullWhenNullContained() {
+ initMapWithNullKey();
+ assertFalse("containsKey(notPresent) should return false",
+ getMap().containsKey(samples.e3.getKey()));
+ }
+
+ @MapFeature.Require(ALLOWS_NULL_KEYS)
+ @CollectionSize.Require(absent = ZERO)
+ public void testContains_nullContained() {
+ initMapWithNullKey();
+ assertTrue("containsKey(null) should return true",
+ getMap().containsKey(null));
+ }
+
+ public void testContains_wrongType() {
+ try {
+ //noinspection SuspiciousMethodCalls
+ assertFalse("containsKey(wrongType) should return false or throw",
+ getMap().containsKey(WrongType.VALUE));
+ } catch (ClassCastException tolerated) {
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/MapContainsValueTester.java b/testfw/com/google/common/collect/testing/testers/MapContainsValueTester.java
new file mode 100644
index 0000000..836bd72
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/MapContainsValueTester.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractMapTester;
+import com.google.common.collect.testing.WrongType;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import com.google.common.collect.testing.features.MapFeature;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES;
+
+/**
+ * A generic JUnit test which tests {@code containsValue()} operations on a map.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.MapTestSuiteBuilder}.
+ *
+ * @author George van den Driessche
+ * @author Chris Povirk
+ */
+public class MapContainsValueTester<K, V> extends AbstractMapTester<K, V> {
+ @CollectionSize.Require(absent = ZERO)
+ public void testContains_yes() {
+ assertTrue("containsValue(present) should return true",
+ getMap().containsValue(samples.e0.getValue()));
+ }
+
+ public void testContains_no() {
+ assertFalse("containsValue(notPresent) should return false",
+ getMap().containsValue(samples.e3.getValue()));
+ }
+
+ @MapFeature.Require(ALLOWS_NULL_VALUES)
+ public void testContains_nullNotContainedButSupported() {
+ assertFalse("containsValue(null) should return false",
+ getMap().containsValue(null));
+ }
+
+ @MapFeature.Require(absent = ALLOWS_NULL_VALUES)
+ public void testContains_nullNotContainedAndUnsupported() {
+ expectNullValueMissingWhenNullValuesUnsupported(
+ "containsValue(null) should return false or throw");
+ }
+
+ @MapFeature.Require(ALLOWS_NULL_VALUES)
+ @CollectionSize.Require(absent = ZERO)
+ public void testContains_nonNullWhenNullContained() {
+ initMapWithNullValue();
+ assertFalse("containsValue(notPresent) should return false",
+ getMap().containsValue(samples.e3.getValue()));
+ }
+
+ @MapFeature.Require(ALLOWS_NULL_VALUES)
+ @CollectionSize.Require(absent = ZERO)
+ public void testContains_nullContained() {
+ initMapWithNullValue();
+ assertTrue("containsValue(null) should return true",
+ getMap().containsValue(null));
+ }
+
+ public void testContains_wrongType() {
+ try {
+ //noinspection SuspiciousMethodCalls
+ assertFalse("containsValue(wrongType) should return false or throw",
+ getMap().containsValue(WrongType.VALUE));
+ } catch (ClassCastException tolerated) {
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/MapCreationTester.java b/testfw/com/google/common/collect/testing/testers/MapCreationTester.java
new file mode 100644
index 0000000..c77082c
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/MapCreationTester.java
@@ -0,0 +1,139 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractMapTester;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import com.google.common.collect.testing.features.MapFeature;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.MapFeature.REJECTS_DUPLICATES_AT_CREATION;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map.Entry;
+
+/**
+ * A generic JUnit test which tests creation (typically through a constructor or
+ * static factory method) of a map. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.MapTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ * @author Kevin Bourrillion
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class MapCreationTester<K, V> extends AbstractMapTester<K, V> {
+ @MapFeature.Require(ALLOWS_NULL_KEYS)
+ @CollectionSize.Require(absent = ZERO)
+ public void testCreateWithNullKeySupported() {
+ initMapWithNullKey();
+ expectContents(createArrayWithNullKey());
+ }
+
+ @MapFeature.Require(absent = ALLOWS_NULL_KEYS)
+ @CollectionSize.Require(absent = ZERO)
+ public void testCreateWithNullKeyUnsupported() {
+ try {
+ initMapWithNullKey();
+ fail("Creating a map containing a null key should fail");
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ @MapFeature.Require(ALLOWS_NULL_VALUES)
+ @CollectionSize.Require(absent = ZERO)
+ public void testCreateWithNullValueSupported() {
+ initMapWithNullValue();
+ expectContents(createArrayWithNullValue());
+ }
+
+ @MapFeature.Require(absent = ALLOWS_NULL_VALUES)
+ @CollectionSize.Require(absent = ZERO)
+ public void testCreateWithNullValueUnsupported() {
+ try {
+ initMapWithNullValue();
+ fail("Creating a map containing a null value should fail");
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ @MapFeature.Require({ALLOWS_NULL_KEYS, ALLOWS_NULL_VALUES})
+ @CollectionSize.Require(absent = ZERO)
+ public void testCreateWithNullKeyAndValueSupported() {
+ Entry<K, V>[] entries = createSamplesArray();
+ entries[getNullLocation()] = entry(null, null);
+ resetMap(entries);
+ expectContents(entries);
+ }
+
+ @MapFeature.Require(value = ALLOWS_NULL_KEYS,
+ absent = REJECTS_DUPLICATES_AT_CREATION)
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testCreateWithDuplicates_nullDuplicatesNotRejected() {
+ expectFirstRemoved(getEntriesMultipleNullKeys());
+ }
+
+ @MapFeature.Require(absent = REJECTS_DUPLICATES_AT_CREATION)
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testCreateWithDuplicates_nonNullDuplicatesNotRejected() {
+ expectFirstRemoved(getEntriesMultipleNonNullKeys());
+ }
+
+ @MapFeature.Require({ALLOWS_NULL_KEYS, REJECTS_DUPLICATES_AT_CREATION})
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testCreateWithDuplicates_nullDuplicatesRejected() {
+ Entry<K, V>[] entries = getEntriesMultipleNullKeys();
+ try {
+ resetMap(entries);
+ fail("Should reject duplicate null elements at creation");
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ @MapFeature.Require(REJECTS_DUPLICATES_AT_CREATION)
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testCreateWithDuplicates_nonNullDuplicatesRejected() {
+ Entry<K, V>[] entries = getEntriesMultipleNonNullKeys();
+ try {
+ resetMap(entries);
+ fail("Should reject duplicate non-null elements at creation");
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ private Entry<K, V>[] getEntriesMultipleNullKeys() {
+ Entry<K, V>[] entries = createArrayWithNullKey();
+ entries[0] = entries[getNullLocation()];
+ return entries;
+ }
+
+ private Entry<K, V>[] getEntriesMultipleNonNullKeys() {
+ Entry<K, V>[] entries = createSamplesArray();
+ entries[0] = samples.e1;
+ return entries;
+ }
+
+ private void expectFirstRemoved(Entry<K, V>[] entries) {
+ resetMap(entries);
+
+ List<Entry<K, V>> expectedWithDuplicateRemoved =
+ Arrays.asList(entries).subList(1, getNumElements());
+ expectContents(expectedWithDuplicateRemoved);
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/MapEqualsTester.java b/testfw/com/google/common/collect/testing/testers/MapEqualsTester.java
new file mode 100644
index 0000000..917a413
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/MapEqualsTester.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractMapTester;
+import com.google.common.collect.testing.Helpers;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.MapFeature;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * Tests {@link java.util.Map#equals}.
+ *
+ * @author George van den Driessche
+ * @author Chris Povirk
+ */
+public class MapEqualsTester<K, V> extends AbstractMapTester<K, V> {
+ public void testEquals_otherMapWithSameEntries() throws Exception {
+ assertTrue(
+ "A Map should equal any other Map containing the same entries.",
+ getMap().equals(newHashMap(getSampleEntries())));
+ }
+
+ @CollectionSize.Require(absent = CollectionSize.ZERO)
+ public void testEquals_otherMapWithDifferentEntries() throws Exception {
+ Map<K, V> other = newHashMap(getSampleEntries(getNumEntries() - 1));
+ Entry<K, V> e3 = getSubjectGenerator().samples().e3;
+ other.put(e3.getKey(), e3.getValue());
+ assertFalse(
+ "A Map should not equal another Map containing different entries.",
+ getMap().equals(other)
+ );
+ }
+
+ @CollectionSize.Require(absent = CollectionSize.ZERO)
+ @MapFeature.Require(ALLOWS_NULL_KEYS)
+ public void testEquals_containingNullKey() {
+ Collection<Map.Entry<K, V>> entries = getSampleEntries(getNumEntries() - 1);
+ entries.add(entry(null, samples.e3.getValue()));
+
+ resetContainer(getSubjectGenerator().create(entries.toArray()));
+ assertTrue("A Map should equal any other Map containing the same entries,"
+ + " even if some keys are null.",
+ getMap().equals(newHashMap(entries)));
+ }
+
+ @CollectionSize.Require(absent = CollectionSize.ZERO)
+ public void testEquals_otherContainsNullKey() {
+ Collection<Map.Entry<K, V>> entries = getSampleEntries(getNumEntries() - 1);
+ entries.add(entry(null, samples.e3.getValue()));
+ Map<K, V> other = newHashMap(entries);
+
+ assertFalse(
+ "Two Maps should not be equal if exactly one of them contains a null "
+ + "key.",
+ getMap().equals(other));
+ }
+
+ @CollectionSize.Require(absent = CollectionSize.ZERO)
+ @MapFeature.Require(ALLOWS_NULL_VALUES)
+ public void testEquals_containingNullValue() {
+ Collection<Map.Entry<K, V>> entries = getSampleEntries(getNumEntries() - 1);
+ entries.add(entry(samples.e3.getKey(), null));
+
+ resetContainer(getSubjectGenerator().create(entries.toArray()));
+ assertTrue("A Map should equal any other Map containing the same entries,"
+ + " even if some values are null.",
+ getMap().equals(newHashMap(entries)));
+ }
+
+ @CollectionSize.Require(absent = CollectionSize.ZERO)
+ public void testEquals_otherContainsNullValue() {
+ Collection<Map.Entry<K, V>> entries = getSampleEntries(getNumEntries() - 1);
+ entries.add(entry(samples.e3.getKey(), null));
+ Map<K, V> other = newHashMap(entries);
+
+ assertFalse(
+ "Two Maps should not be equal if exactly one of them contains a null "
+ + "value.",
+ getMap().equals(other));
+ }
+
+ @CollectionSize.Require(absent = CollectionSize.ZERO)
+ public void testEquals_smallerMap() throws Exception {
+ Collection<Map.Entry<K, V>> fewerEntries
+ = getSampleEntries(getNumEntries() - 1);
+ assertFalse("Maps of different sizes should not be equal.",
+ getMap().equals(newHashMap(fewerEntries)));
+ }
+
+ public void testEquals_largerMap() {
+ Collection<Map.Entry<K, V>> moreEntries
+ = getSampleEntries(getNumEntries() + 1);
+ assertFalse("Maps of different sizes should not be equal.",
+ getMap().equals(newHashMap(moreEntries)));
+ }
+
+ public void testEquals_list() {
+ assertFalse("A List should never equal a Map.",
+ getMap().equals(Helpers.copyToList(getMap().entrySet())));
+ }
+
+ private static <K, V> HashMap<K, V> newHashMap(
+ Collection<? extends Map.Entry<? extends K, ? extends V>> entries) {
+ HashMap<K, V> map = new HashMap<K, V>();
+ for (Map.Entry<? extends K, ? extends V> entry : entries) {
+ map.put(entry.getKey(), entry.getValue());
+ }
+ return map;
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/MapGetTester.java b/testfw/com/google/common/collect/testing/testers/MapGetTester.java
new file mode 100644
index 0000000..5d25ad9
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/MapGetTester.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractMapTester;
+import com.google.common.collect.testing.WrongType;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import com.google.common.collect.testing.features.MapFeature;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS;
+
+/**
+ * A generic JUnit test which tests {@code get} operations on a map. Can't be
+ * invoked directly; please see
+ * {@link com.google.common.collect.testing.MapTestSuiteBuilder}.
+ *
+ * @author Kevin Bourrillion
+ * @author Chris Povirk
+ */
+public class MapGetTester<K, V> extends AbstractMapTester<K, V> {
+ @CollectionSize.Require(absent = ZERO)
+ public void testGet_yes() {
+ assertEquals("get(present) should return the associated value",
+ samples.e0.getValue(), get(samples.e0.getKey()));
+ }
+
+ public void testGet_no() {
+ assertNull("get(notPresent) should return null", get(samples.e3.getKey()));
+ }
+
+ @MapFeature.Require(ALLOWS_NULL_KEYS)
+ public void testGet_nullNotContainedButSupported() {
+ assertNull("get(null) should return null", get(null));
+ }
+
+ @MapFeature.Require(absent = ALLOWS_NULL_KEYS)
+ public void testGet_nullNotContainedAndUnsupported() {
+ try {
+ assertNull("get(null) should return null or throw", get(null));
+ } catch (NullPointerException tolerated) {
+ }
+ }
+
+ @MapFeature.Require(ALLOWS_NULL_KEYS)
+ @CollectionSize.Require(absent = ZERO)
+ public void testGet_nonNullWhenNullContained() {
+ initMapWithNullKey();
+ assertNull("get(notPresent) should return null", get(samples.e3.getKey()));
+ }
+
+ @MapFeature.Require(ALLOWS_NULL_KEYS)
+ @CollectionSize.Require(absent = ZERO)
+ public void testGet_nullContained() {
+ initMapWithNullKey();
+ assertEquals("get(null) should return the associated value",
+ getValueForNullKey(), get(null));
+ }
+
+ public void testGet_wrongType() {
+ try {
+ assertNull("get(wrongType) should return null or throw",
+ getMap().get(WrongType.VALUE));
+ } catch (ClassCastException tolerated) {
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/MapHashCodeTester.java b/testfw/com/google/common/collect/testing/testers/MapHashCodeTester.java
new file mode 100644
index 0000000..d196f54
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/MapHashCodeTester.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractMapTester;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.MapFeature;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Tests {@link java.util.Map#hashCode}.
+ *
+ * @author George van den Driessche
+ * @author Chris Povirk
+ */
+public class MapHashCodeTester<K, V> extends AbstractMapTester<K, V> {
+ public void testHashCode() {
+ int expectedHashCode = 0;
+ for (Map.Entry<K, V> entry : getSampleEntries()) {
+ expectedHashCode += hash(entry);
+ }
+ assertEquals(
+ "A Map's hashCode() should be the sum of those of its entries.",
+ expectedHashCode, getMap().hashCode());
+ }
+
+ @CollectionSize.Require(absent = CollectionSize.ZERO)
+ @MapFeature.Require(ALLOWS_NULL_KEYS)
+ public void testHashCode_containingNullKey() {
+ Map.Entry<K, V> entryWithNull = entry(null, samples.e3.getValue());
+ runEntryWithNullTest(entryWithNull);
+ }
+
+ @CollectionSize.Require(absent = CollectionSize.ZERO)
+ @MapFeature.Require(ALLOWS_NULL_VALUES)
+ public void testHashCode_containingNullValue() {
+ Map.Entry<K, V> entryWithNull = entry(samples.e3.getKey(), null);
+ runEntryWithNullTest(entryWithNull);
+ }
+
+ private void runEntryWithNullTest(Map.Entry<K, V> entryWithNull) {
+ Collection<Map.Entry<K, V>> entries = getSampleEntries(getNumEntries() - 1);
+
+ entries.add(entryWithNull);
+
+ int expectedHashCode = 0;
+ for (Map.Entry<K, V> entry : entries) {
+ expectedHashCode += hash(entry);
+ }
+
+ resetContainer(getSubjectGenerator().create(entries.toArray()));
+ assertEquals(
+ "A Map's hashCode() should be the sum of those of its entries (where "
+ + "a null element in an entry counts as having a hash of zero).",
+ expectedHashCode, getMap().hashCode());
+ }
+
+ private static int hash(Map.Entry<?, ?> e) {
+ return (e.getKey() == null ? 0 : e.getKey().hashCode())
+ ^ (e.getValue() == null ? 0 : e.getValue().hashCode());
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/MapIsEmptyTester.java b/testfw/com/google/common/collect/testing/testers/MapIsEmptyTester.java
new file mode 100644
index 0000000..3f79138
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/MapIsEmptyTester.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractMapTester;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+/**
+ * A generic JUnit test which tests {@code isEmpty()} operations on a
+ * map. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.MapTestSuiteBuilder}.
+ *
+ * @author Kevin Bourrillion
+ */
+public class MapIsEmptyTester<K, V> extends AbstractMapTester<K, V> {
+ @CollectionSize.Require(ZERO)
+ public void testIsEmpty_yes() {
+ assertTrue("isEmpty() should return true", getMap().isEmpty());
+ }
+
+ @CollectionSize.Require(absent = ZERO)
+ public void testIsEmpty_no() {
+ assertFalse("isEmpty() should return false", getMap().isEmpty());
+ }
+} \ No newline at end of file
diff --git a/testfw/com/google/common/collect/testing/testers/MapPutAllTester.java b/testfw/com/google/common/collect/testing/testers/MapPutAllTester.java
new file mode 100644
index 0000000..f860799
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/MapPutAllTester.java
@@ -0,0 +1,176 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractMapTester;
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import com.google.common.collect.testing.features.MapFeature;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_PUT_ALL;
+
+import java.util.Collections;
+import static java.util.Collections.singletonList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * A generic JUnit test which tests {@code putAll} operations on a map. Can't be
+ * invoked directly; please see
+ * {@link com.google.common.collect.testing.MapTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ * @author Kevin Bourrillion
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class MapPutAllTester<K, V> extends AbstractMapTester<K, V> {
+ private List<Entry<K, V>> containsNullKey;
+ private List<Entry<K, V>> containsNullValue;
+
+ @Override protected void setUp() throws Exception {
+ super.setUp();
+ containsNullKey = singletonList(entry(null, samples.e3.getValue()));
+ containsNullValue = singletonList(entry(samples.e3.getKey(), null));
+ }
+
+ @MapFeature.Require(SUPPORTS_PUT_ALL)
+ public void testPutAll_supportedNothing() {
+ getMap().putAll(emptyMap());
+ expectUnchanged();
+ }
+
+ @MapFeature.Require(absent = SUPPORTS_PUT_ALL)
+ public void testPutAll_unsupportedNothing() {
+ try {
+ getMap().putAll(emptyMap());
+ } catch (UnsupportedOperationException tolerated) {
+ }
+ expectUnchanged();
+ }
+
+ @MapFeature.Require(SUPPORTS_PUT_ALL)
+ public void testPutAll_supportedNonePresent() {
+ putAll(createDisjointCollection());
+ expectAdded(samples.e3, samples.e4);
+ }
+
+ @MapFeature.Require(absent = SUPPORTS_PUT_ALL)
+ public void testPutAll_unsupportedNonePresent() {
+ try {
+ putAll(createDisjointCollection());
+ fail("putAll(nonePresent) should throw");
+ } catch (UnsupportedOperationException expected) {
+ }
+ expectUnchanged();
+ expectMissing(samples.e3, samples.e4);
+ }
+
+ @MapFeature.Require(SUPPORTS_PUT_ALL)
+ @CollectionSize.Require(absent = ZERO)
+ public void testPutAll_supportedSomePresent() {
+ putAll(MinimalCollection.of(samples.e3, samples.e0));
+ expectAdded(samples.e3);
+ }
+
+ @MapFeature.Require(absent = SUPPORTS_PUT_ALL)
+ @CollectionSize.Require(absent = ZERO)
+ public void testPutAll_unsupportedSomePresent() {
+ try {
+ putAll(MinimalCollection.of(samples.e3, samples.e0));
+ fail("putAll(somePresent) should throw");
+ } catch (UnsupportedOperationException expected) {
+ }
+ expectUnchanged();
+ }
+
+ @MapFeature.Require(absent = SUPPORTS_PUT_ALL)
+ @CollectionSize.Require(absent = ZERO)
+ public void testPutAll_unsupportedAllPresent() {
+ try {
+ putAll(MinimalCollection.of(samples.e0));
+ } catch (UnsupportedOperationException tolerated) {
+ }
+ expectUnchanged();
+ }
+
+ @MapFeature.Require({SUPPORTS_PUT_ALL,
+ ALLOWS_NULL_KEYS})
+ public void testPutAll_nullKeySupported() {
+ putAll(containsNullKey);
+ expectAdded(containsNullKey.get(0));
+ }
+
+ @MapFeature.Require(value = SUPPORTS_PUT_ALL,
+ absent = ALLOWS_NULL_KEYS)
+ public void testAdd_nullKeyUnsupported() {
+ try {
+ putAll(containsNullKey);
+ fail("putAll(containsNullKey) should throw");
+ } catch (NullPointerException expected) {
+ }
+ expectUnchanged();
+ expectNullKeyMissingWhenNullKeysUnsupported(
+ "Should not contain null key after unsupported " +
+ "putAll(containsNullKey)");
+ }
+
+ @MapFeature.Require({SUPPORTS_PUT_ALL,
+ ALLOWS_NULL_VALUES})
+ public void testPutAll_nullValueSupported() {
+ putAll(containsNullValue);
+ expectAdded(containsNullValue.get(0));
+ }
+
+ @MapFeature.Require(value = SUPPORTS_PUT_ALL,
+ absent = ALLOWS_NULL_VALUES)
+ public void testAdd_nullValueUnsupported() {
+ try {
+ putAll(containsNullValue);
+ fail("putAll(containsNullValue) should throw");
+ } catch (NullPointerException expected) {
+ }
+ expectUnchanged();
+ expectNullValueMissingWhenNullValuesUnsupported(
+ "Should not contain null value after unsupported " +
+ "putAll(containsNullValue)");
+ }
+
+ @MapFeature.Require(SUPPORTS_PUT_ALL)
+ public void testPutAll_nullCollectionReference() {
+ try {
+ getMap().putAll(null);
+ fail("putAll(null) should throw NullPointerException");
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ private Map<K, V> emptyMap() {
+ return Collections.emptyMap();
+ }
+
+ private void putAll(Iterable<Entry<K, V>> entries) {
+ Map<K, V> map = new LinkedHashMap<K, V>();
+ for (Entry<K, V> entry : entries) {
+ map.put(entry.getKey(), entry.getValue());
+ }
+ getMap().putAll(map);
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/MapPutTester.java b/testfw/com/google/common/collect/testing/testers/MapPutTester.java
new file mode 100644
index 0000000..7625804
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/MapPutTester.java
@@ -0,0 +1,193 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractMapTester;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import com.google.common.collect.testing.features.MapFeature;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_PUT;
+
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * A generic JUnit test which tests {@code put} operations on a map. Can't be
+ * invoked directly; please see
+ * {@link com.google.common.collect.testing.MapTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ * @author Kevin Bourrillion
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class MapPutTester<K, V> extends AbstractMapTester<K, V> {
+ private Entry<K, V> nullKeyEntry;
+ private Entry<K, V> nullValueEntry;
+ private Entry<K, V> nullKeyValueEntry;
+ private Entry<K, V> presentKeyNullValueEntry;
+
+ @Override protected void setUp() throws Exception {
+ super.setUp();
+ nullKeyEntry = entry(null, samples.e3.getValue());
+ nullValueEntry = entry(samples.e3.getKey(), null);
+ nullKeyValueEntry = entry(null, null);
+ presentKeyNullValueEntry = entry(samples.e0.getKey(), null);
+ }
+
+ @MapFeature.Require(SUPPORTS_PUT)
+ public void testPut_supportedNotPresent() {
+ assertNull("put(notPresent, value) should return null", put(samples.e3));
+ expectAdded(samples.e3);
+ }
+
+ @MapFeature.Require(absent = SUPPORTS_PUT)
+ public void testPut_unsupportedNotPresent() {
+ try {
+ put(samples.e3);
+ fail("put(notPresent, value) should throw");
+ } catch (UnsupportedOperationException expected) {
+ }
+ expectUnchanged();
+ expectMissing(samples.e3);
+ }
+
+ @MapFeature.Require(absent = SUPPORTS_PUT)
+ @CollectionSize.Require(absent = ZERO)
+ public void testPut_unsupportedPresentExistingValue() {
+ try {
+ assertEquals("put(present, existingValue) should return present or throw",
+ samples.e0.getValue(), put(samples.e0));
+ } catch (UnsupportedOperationException tolerated) {
+ }
+ expectUnchanged();
+ }
+
+ @MapFeature.Require(absent = SUPPORTS_PUT)
+ @CollectionSize.Require(absent = ZERO)
+ public void testPut_unsupportedPresentDifferentValue() {
+ try {
+ getMap().put(samples.e0.getKey(), samples.e3.getValue());
+ fail("put(present, differentValue) should throw");
+ } catch (UnsupportedOperationException expected) {
+ }
+ expectUnchanged();
+ }
+
+ @MapFeature.Require({SUPPORTS_PUT, ALLOWS_NULL_KEYS})
+ public void testPut_nullKeySupportedNotPresent() {
+ assertNull("put(null, value) should return null", put(nullKeyEntry));
+ expectAdded(nullKeyEntry);
+ }
+
+ @MapFeature.Require({SUPPORTS_PUT, ALLOWS_NULL_KEYS})
+ @CollectionSize.Require(absent = ZERO)
+ public void testPut_nullKeySupportedPresent() {
+ Entry<K, V> newEntry = entry(null, samples.e3.getValue());
+ initMapWithNullKey();
+ assertEquals("put(present, value) should return the associated value",
+ getValueForNullKey(), put(newEntry));
+
+ Entry<K, V>[] expected = createArrayWithNullKey();
+ expected[getNullLocation()] = newEntry;
+ expectContents(expected);
+ }
+
+ @MapFeature.Require(value = SUPPORTS_PUT, absent = ALLOWS_NULL_KEYS)
+ public void testPut_nullKeyUnsupported() {
+ try {
+ put(nullKeyEntry);
+ fail("put(null, value) should throw");
+ } catch (NullPointerException expected) {
+ }
+ expectUnchanged();
+ expectNullKeyMissingWhenNullKeysUnsupported(
+ "Should not contain null key after unsupported put(null, value)");
+ }
+
+ @MapFeature.Require({SUPPORTS_PUT, ALLOWS_NULL_VALUES})
+ public void testPut_nullValueSupported() {
+ assertNull("put(key, null) should return null", put(nullValueEntry));
+ expectAdded(nullValueEntry);
+ }
+
+ @MapFeature.Require(value = SUPPORTS_PUT, absent = ALLOWS_NULL_VALUES)
+ public void testPut_nullValueUnsupported() {
+ try {
+ put(nullValueEntry);
+ fail("put(key, null) should throw");
+ } catch (NullPointerException expected) {
+ }
+ expectUnchanged();
+ expectNullValueMissingWhenNullValuesUnsupported(
+ "Should not contain null value after unsupported put(key, null)");
+ }
+
+ @MapFeature.Require({SUPPORTS_PUT, ALLOWS_NULL_VALUES})
+ @CollectionSize.Require(absent = ZERO)
+ public void testPut_replaceWithNullValueSupported() {
+ assertEquals("put(present, null) should return the associated value",
+ samples.e0.getValue(), put(presentKeyNullValueEntry));
+ expectReplacement(presentKeyNullValueEntry);
+ }
+
+ @MapFeature.Require(value = SUPPORTS_PUT, absent = ALLOWS_NULL_VALUES)
+ @CollectionSize.Require(absent = ZERO)
+ public void testPut_replaceWithNullValueUnsupported() {
+ try {
+ put(presentKeyNullValueEntry);
+ fail("put(present, null) should throw");
+ } catch (NullPointerException expected) {
+ }
+ expectUnchanged();
+ expectNullValueMissingWhenNullValuesUnsupported(
+ "Should not contain null after unsupported put(present, null)");
+ }
+
+ @MapFeature.Require({SUPPORTS_PUT, ALLOWS_NULL_VALUES})
+ @CollectionSize.Require(absent = ZERO)
+ public void testPut_replaceNullValueWithNullSupported() {
+ initMapWithNullValue();
+ assertNull("put(present, null) should return the associated value (null)",
+ getMap().put(getKeyForNullValue(), null));
+ expectContents(createArrayWithNullValue());
+ }
+
+ @MapFeature.Require({SUPPORTS_PUT, ALLOWS_NULL_VALUES})
+ @CollectionSize.Require(absent = ZERO)
+ public void testPut_replaceNullValueWithNonNullSupported() {
+ Entry<K, V> newEntry = entry(getKeyForNullValue(), samples.e3.getValue());
+ initMapWithNullValue();
+ assertNull("put(present, value) should return the associated value (null)",
+ put(newEntry));
+
+ Entry<K, V>[] expected = createArrayWithNullValue();
+ expected[getNullLocation()] = newEntry;
+ expectContents(expected);
+ }
+
+ @MapFeature.Require({SUPPORTS_PUT, ALLOWS_NULL_KEYS, ALLOWS_NULL_VALUES})
+ public void testPut_nullKeyAndValueSupported() {
+ assertNull("put(null, null) should return null", put(nullKeyValueEntry));
+ expectAdded(nullKeyValueEntry);
+ }
+
+ private V put(Map.Entry<K, V> entry) {
+ return getMap().put(entry.getKey(), entry.getValue());
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/MapRemoveTester.java b/testfw/com/google/common/collect/testing/testers/MapRemoveTester.java
new file mode 100644
index 0000000..266af8c
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/MapRemoveTester.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractMapTester;
+import com.google.common.collect.testing.WrongType;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import com.google.common.collect.testing.features.MapFeature;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS;
+import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_REMOVE;
+
+/**
+ * A generic JUnit test which tests {@code remove} operations on a map. Can't be
+ * invoked directly; please see
+ * {@link com.google.common.collect.testing.MapTestSuiteBuilder}.
+ *
+ * @author George van den Driessche
+ * @author Chris Povirk
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class MapRemoveTester<K, V> extends AbstractMapTester<K, V> {
+ @MapFeature.Require(SUPPORTS_REMOVE)
+ @CollectionSize.Require(absent = ZERO)
+ public void testRemove_present() {
+ int initialSize = getMap().size();
+ assertEquals("remove(present) should return the associated value",
+ samples.e0.getValue(), getMap().remove(samples.e0.getKey()));
+ assertEquals("remove(present) should decrease a map's size by one.",
+ initialSize - 1, getMap().size());
+ expectMissing(samples.e0);
+ }
+
+ @MapFeature.Require(SUPPORTS_REMOVE)
+ public void testRemove_notPresent() {
+ assertNull("remove(notPresent) should return null",
+ getMap().remove(samples.e3.getKey()));
+ expectUnchanged();
+ }
+
+ @MapFeature.Require({SUPPORTS_REMOVE, ALLOWS_NULL_KEYS})
+ @CollectionSize.Require(absent = ZERO)
+ public void testRemove_nullPresent() {
+ initMapWithNullKey();
+
+ int initialSize = getMap().size();
+ assertEquals("remove(null) should return the associated value",
+ getValueForNullKey(), getMap().remove(null));
+ assertEquals("remove(present) should decrease a map's size by one.",
+ initialSize - 1, getMap().size());
+ expectMissing(entry(null, getValueForNullKey()));
+ }
+
+ @MapFeature.Require(absent = SUPPORTS_REMOVE)
+ @CollectionSize.Require(absent = ZERO)
+ public void testRemove_unsupported() {
+ try {
+ getMap().remove(samples.e0.getKey());
+ fail("remove(present) should throw UnsupportedOperationException");
+ } catch (UnsupportedOperationException expected) {
+ }
+ expectUnchanged();
+ assertEquals("remove(present) should not remove the element",
+ samples.e0.getValue(), get(samples.e0.getKey()));
+ }
+
+ @MapFeature.Require(absent = SUPPORTS_REMOVE)
+ public void testRemove_unsupportedNotPresent() {
+ try {
+ assertNull("remove(notPresent) should return null or throw "
+ + "UnsupportedOperationException",
+ getMap().remove(samples.e3.getKey()));
+ } catch (UnsupportedOperationException tolerated) {
+ }
+ expectUnchanged();
+ expectMissing(samples.e3);
+ }
+
+ @MapFeature.Require(
+ value = SUPPORTS_REMOVE,
+ absent = ALLOWS_NULL_KEYS)
+ public void testRemove_nullNotSupported() {
+ try {
+ assertNull("remove(null) should return null or throw "
+ + "NullPointerException",
+ getMap().remove(null));
+ } catch (NullPointerException tolerated) {
+ }
+ expectUnchanged();
+ }
+
+ @MapFeature.Require({SUPPORTS_REMOVE, ALLOWS_NULL_KEYS})
+ public void testRemove_nullSupportedMissing() {
+ assertNull("remove(null) should return null", getMap().remove(null));
+ expectUnchanged();
+ }
+
+ @MapFeature.Require(SUPPORTS_REMOVE)
+ public void testRemove_wrongType() {
+ try {
+ assertNull(getMap().remove(WrongType.VALUE));
+ } catch (ClassCastException tolerated) {
+ }
+ expectUnchanged();
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/MapSizeTester.java b/testfw/com/google/common/collect/testing/testers/MapSizeTester.java
new file mode 100644
index 0000000..c74ad95
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/MapSizeTester.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractMapTester;
+
+/**
+ * A generic JUnit test which tests {@code size()} operations on a map.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.MapTestSuiteBuilder}.
+ *
+ * @author George van den Driessche
+ */
+public class MapSizeTester<K, V> extends AbstractMapTester<K, V> {
+ public void testSize() {
+ assertEquals("size():", getNumElements(), getMap().size());
+ }
+} \ No newline at end of file
diff --git a/testfw/com/google/common/collect/testing/testers/QueueElementTester.java b/testfw/com/google/common/collect/testing/testers/QueueElementTester.java
new file mode 100644
index 0000000..49c6655
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/QueueElementTester.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.KNOWN_ORDER;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.SEVERAL;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import java.util.NoSuchElementException;
+
+/**
+ * A generic JUnit test which tests {@code element()} operations on a queue.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * @author Jared Levy
+ */
+public class QueueElementTester<E> extends AbstractQueueTester<E> {
+ @CollectionSize.Require(ZERO)
+ public void testElement_empty() {
+ try {
+ getQueue().element();
+ fail("emptyQueue.element() should throw");
+ } catch (NoSuchElementException expected) {}
+ expectUnchanged();
+ }
+
+ @CollectionSize.Require(ONE)
+ public void testElement_size1() {
+ assertEquals("size1Queue.element() should return first element",
+ samples.e0, getQueue().element());
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require(KNOWN_ORDER)
+ @CollectionSize.Require(SEVERAL)
+ public void testElement_sizeMany() {
+ assertEquals("sizeManyQueue.element() should return first element",
+ samples.e0, getQueue().element());
+ expectUnchanged();
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/QueueOfferTester.java b/testfw/com/google/common/collect/testing/testers/QueueOfferTester.java
new file mode 100644
index 0000000..5f5fe8a
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/QueueOfferTester.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD;
+
+/**
+ * A generic JUnit test which tests offer operations on a queue. Can't be
+ * invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * @author Jared Levy
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class QueueOfferTester<E> extends AbstractQueueTester<E> {
+ @CollectionFeature.Require(SUPPORTS_ADD)
+ public void testOffer_supportedNotPresent() {
+ assertTrue("offer(notPresent) should return true",
+ getQueue().offer(samples.e3));
+ expectAdded(samples.e3);
+ }
+
+ @CollectionFeature.Require({SUPPORTS_ADD, ALLOWS_NULL_VALUES})
+ public void testOffer_nullSupported() {
+ assertTrue("offer(null) should return true", getQueue().offer(null));
+ expectAdded((E) null);
+ }
+
+ @CollectionFeature.Require(value = SUPPORTS_ADD, absent = ALLOWS_NULL_VALUES)
+ public void testOffer_nullUnsupported() {
+ try {
+ getQueue().offer(null);
+ fail("offer(null) should throw");
+ } catch (NullPointerException expected) {
+ }
+ expectUnchanged();
+ expectNullMissingWhenNullUnsupported(
+ "Should not contain null after unsupported offer(null)");
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/QueuePeekTester.java b/testfw/com/google/common/collect/testing/testers/QueuePeekTester.java
new file mode 100644
index 0000000..ef864f9
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/QueuePeekTester.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.KNOWN_ORDER;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.SEVERAL;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+/**
+ * A generic JUnit test which tests {@code peek()} operations on a queue.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * @author Jared Levy
+ */
+public class QueuePeekTester<E> extends AbstractQueueTester<E> {
+ @CollectionSize.Require(ZERO)
+ public void testPeek_empty() {
+ assertNull("emptyQueue.peek() should return null", getQueue().peek());
+ expectUnchanged();
+ }
+
+ @CollectionSize.Require(ONE)
+ public void testPeek_size1() {
+ assertEquals("size1Queue.peek() should return first element",
+ samples.e0, getQueue().peek());
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require(KNOWN_ORDER)
+ @CollectionSize.Require(SEVERAL)
+ public void testPeek_sizeMany() {
+ assertEquals("sizeManyQueue.peek() should return first element",
+ samples.e0, getQueue().peek());
+ expectUnchanged();
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/QueuePollTester.java b/testfw/com/google/common/collect/testing/testers/QueuePollTester.java
new file mode 100644
index 0000000..3d4bb22
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/QueuePollTester.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.KNOWN_ORDER;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.SEVERAL;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+/**
+ * A generic JUnit test which tests {@code poll()} operations on a queue.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * @author Jared Levy
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class QueuePollTester<E> extends AbstractQueueTester<E> {
+ @CollectionFeature.Require(SUPPORTS_REMOVE)
+ @CollectionSize.Require(ZERO)
+ public void testPoll_empty() {
+ assertNull("emptyQueue.poll() should return null", getQueue().poll());
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require(SUPPORTS_REMOVE)
+ @CollectionSize.Require(ONE)
+ public void testPoll_size1() {
+ assertEquals("size1Queue.poll() should return first element",
+ samples.e0, getQueue().poll());
+ expectMissing(samples.e0);
+ }
+
+ @CollectionFeature.Require({KNOWN_ORDER, SUPPORTS_REMOVE})
+ @CollectionSize.Require(SEVERAL)
+ public void testPoll_sizeMany() {
+ assertEquals("sizeManyQueue.poll() should return first element",
+ samples.e0, getQueue().poll());
+ expectMissing(samples.e0);
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/QueueRemoveTester.java b/testfw/com/google/common/collect/testing/testers/QueueRemoveTester.java
new file mode 100644
index 0000000..f8d8051
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/QueueRemoveTester.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.KNOWN_ORDER;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.SEVERAL;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import java.util.NoSuchElementException;
+
+/**
+ * A generic JUnit test which tests {@code remove()} operations on a queue.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * @author Jared Levy
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class QueueRemoveTester<E> extends AbstractQueueTester<E> {
+ @CollectionFeature.Require(SUPPORTS_REMOVE)
+ @CollectionSize.Require(ZERO)
+ public void testRemove_empty() {
+ try {
+ getQueue().remove();
+ fail("emptyQueue.remove() should throw");
+ } catch (NoSuchElementException expected) {}
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require(SUPPORTS_REMOVE)
+ @CollectionSize.Require(ONE)
+ public void testRemove_size1() {
+ assertEquals("size1Queue.remove() should return first element",
+ samples.e0, getQueue().remove());
+ expectMissing(samples.e0);
+ }
+
+ @CollectionFeature.Require({KNOWN_ORDER, SUPPORTS_REMOVE})
+ @CollectionSize.Require(SEVERAL)
+ public void testRemove_sizeMany() {
+ assertEquals("sizeManyQueue.remove() should return first element",
+ samples.e0, getQueue().remove());
+ expectMissing(samples.e0);
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/SetAddAllTester.java b/testfw/com/google/common/collect/testing/testers/SetAddAllTester.java
new file mode 100644
index 0000000..a42cdbd
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/SetAddAllTester.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD_ALL;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+/**
+ * A generic JUnit test which tests addAll operations on a set. Can't be
+ * invoked directly; please see
+ * {@link com.google.common.collect.testing.SetTestSuiteBuilder}.
+ *
+ * @author Kevin Bourrillion
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class SetAddAllTester<E> extends AbstractSetTester<E> {
+ @CollectionFeature.Require(SUPPORTS_ADD_ALL)
+ @CollectionSize.Require(absent = ZERO)
+ public void testAddAll_supportedSomePresent() {
+ assertTrue("add(somePresent) should return true",
+ getSet().addAll(MinimalCollection.of(samples.e3, samples.e0)));
+ expectAdded(samples.e3);
+ }
+
+ @CollectionFeature.Require(SUPPORTS_ADD_ALL)
+ public void testAddAll_withDuplicates() {
+ MinimalCollection<E> elementsToAdd
+ = MinimalCollection.of(samples.e3, samples.e4, samples.e3, samples.e4);
+ assertTrue("add(hasDuplicates) should return true",
+ getSet().addAll(elementsToAdd));
+ expectAdded(samples.e3, samples.e4);
+ }
+
+ @CollectionFeature.Require(SUPPORTS_ADD_ALL)
+ @CollectionSize.Require(absent = ZERO)
+ public void testAddAll_supportedAllPresent() {
+ assertFalse("add(allPresent) should return false",
+ getSet().addAll(MinimalCollection.of(samples.e0)));
+ expectUnchanged();
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/SetAddTester.java b/testfw/com/google/common/collect/testing/testers/SetAddTester.java
new file mode 100644
index 0000000..44f7bef
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/SetAddTester.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import java.lang.reflect.Method;
+
+/**
+ * A generic JUnit test which tests add operations on a set. Can't be
+ * invoked directly; please see
+ * {@link com.google.common.collect.testing.SetTestSuiteBuilder}.
+ *
+ * @author Kevin Bourrillion
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class SetAddTester<E> extends AbstractSetTester<E> {
+ @CollectionFeature.Require(SUPPORTS_ADD)
+ @CollectionSize.Require(absent = ZERO)
+ public void testAdd_supportedPresent() {
+ assertFalse("add(present) should return false", getSet().add(samples.e0));
+ expectUnchanged();
+ }
+
+ @CollectionFeature.Require(value = {SUPPORTS_ADD, ALLOWS_NULL_VALUES})
+ @CollectionSize.Require(absent = ZERO)
+ public void testAdd_supportedNullPresent() {
+ E[] array = createArrayWithNullElement();
+ collection = getSubjectGenerator().create(array);
+ assertFalse("add(nullPresent) should return false", getSet().add(null));
+ expectContents(array);
+ }
+
+ /**
+ * Returns the {@link Method} instance for
+ * {@link #testAdd_supportedNullPresent()} so that tests can suppress it. See
+ * {@link CollectionAddTester#getAddNullSupportedMethod()} for details.
+ */
+ public static Method getAddSupportedNullPresentMethod() {
+ try {
+ return SetAddTester.class.getMethod("testAdd_supportedNullPresent");
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/SetCreationTester.java b/testfw/com/google/common/collect/testing/testers/SetCreationTester.java
new file mode 100644
index 0000000..4f8567a
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/SetCreationTester.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import com.google.common.collect.testing.features.SetFeature;
+import static com.google.common.collect.testing.features.SetFeature.REJECTS_DUPLICATES_AT_CREATION;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * A generic JUnit test which tests creation (typically through a constructor or
+ * static factory method) of a set. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.SetTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ */
+public class SetCreationTester<E> extends AbstractSetTester<E> {
+ @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+ @SetFeature.Require(absent = REJECTS_DUPLICATES_AT_CREATION)
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testCreateWithDuplicates_nullDuplicatesNotRejected() {
+ E[] array = createArrayWithNullElement();
+ array[0] = null;
+ collection = getSubjectGenerator().create(array);
+
+ List<E> expectedWithDuplicateRemoved =
+ Arrays.asList(array).subList(1, getNumElements());
+ expectContents(expectedWithDuplicateRemoved);
+ }
+
+ @SetFeature.Require(absent = REJECTS_DUPLICATES_AT_CREATION)
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testCreateWithDuplicates_nonNullDuplicatesNotRejected() {
+ E[] array = createSamplesArray();
+ array[1] = samples.e0;
+ collection = getSubjectGenerator().create(array);
+
+ List<E> expectedWithDuplicateRemoved =
+ Arrays.asList(array).subList(1, getNumElements());
+ expectContents(expectedWithDuplicateRemoved);
+ }
+
+ @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+ @SetFeature.Require(REJECTS_DUPLICATES_AT_CREATION)
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testCreateWithDuplicates_nullDuplicatesRejected() {
+ E[] array = createArrayWithNullElement();
+ array[0] = null;
+ try {
+ collection = getSubjectGenerator().create(array);
+ fail("Should reject duplicate null elements at creation");
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ @SetFeature.Require(REJECTS_DUPLICATES_AT_CREATION)
+ @CollectionSize.Require(absent = {ZERO, ONE})
+ public void testCreateWithDuplicates_nonNullDuplicatesRejected() {
+ E[] array = createSamplesArray();
+ array[1] = samples.e0;
+ try {
+ collection = getSubjectGenerator().create(array);
+ fail("Should reject duplicate non-null elements at creation");
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/SetEqualsTester.java b/testfw/com/google/common/collect/testing/testers/SetEqualsTester.java
new file mode 100644
index 0000000..69295e0
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/SetEqualsTester.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.Helpers;
+import com.google.common.collect.testing.MinimalSet;
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.util.Collection;
+import java.util.Set;
+
+/**
+ * Tests {@link java.util.Set#equals}.
+ *
+ * @author George van den Driessche
+ */
+public class SetEqualsTester<E> extends AbstractSetTester<E> {
+ public void testEquals_otherSetWithSameElements() throws Exception {
+ assertTrue(
+ "A Set should equal any other Set containing the same elements.",
+ getSet().equals(MinimalSet.from(getSampleElements())));
+ }
+
+ @CollectionSize.Require(absent=CollectionSize.ZERO)
+ public void testEquals_otherSetWithDifferentElements() throws Exception {
+ Collection<E> elements = getSampleElements(getNumElements() - 1);
+ elements.add(getSubjectGenerator().samples().e3);
+
+ assertFalse(
+ "A Set should not equal another Set containing different elements.",
+ getSet().equals(MinimalSet.from(elements))
+ );
+ }
+
+ @CollectionSize.Require(absent=CollectionSize.ZERO)
+ @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+ public void testEquals_containingNull() {
+ Collection<E> elements = getSampleElements(getNumElements() - 1);
+ elements.add(null);
+
+ collection = getSubjectGenerator().create(elements.toArray());
+ assertTrue("A Set should equal any other Set containing the same elements,"
+ + " even if some elements are null.",
+ getSet().equals(MinimalSet.from(elements)));
+ }
+
+ @CollectionSize.Require(absent=CollectionSize.ZERO)
+ public void testEquals_otherContainsNull() {
+ Collection<E> elements = getSampleElements(getNumElements() - 1);
+ elements.add(null);
+ Set<E> other = MinimalSet.from(elements);
+
+ assertFalse(
+ "Two Sets should not be equal if exactly one of them contains null.",
+ getSet().equals(other));
+ }
+
+ @CollectionSize.Require(absent=CollectionSize.ZERO)
+ public void testEquals_smallerSet() throws Exception {
+ Collection<E> fewerElements = getSampleElements(getNumElements() - 1);
+ assertFalse("Sets of different sizes should not be equal.",
+ getSet().equals(MinimalSet.from(fewerElements)));
+ }
+
+ public void testEquals_largerSet() {
+ Collection<E> moreElements = getSampleElements(getNumElements() + 1);
+ assertFalse("Sets of different sizes should not be equal.",
+ getSet().equals(MinimalSet.from(moreElements)));
+ }
+
+ public void testEquals_list() {
+ assertFalse("A List should never equal a Set.",
+ getSet().equals(Helpers.copyToList(getSet())));
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/SetHashCodeTester.java b/testfw/com/google/common/collect/testing/testers/SetHashCodeTester.java
new file mode 100644
index 0000000..ee1186e
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/SetHashCodeTester.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.lang.reflect.Method;
+import java.util.Collection;
+
+/**
+ * Tests {@link java.util.Set#hashCode}.
+ *
+ * @author George van den Driessche
+ */
+public class SetHashCodeTester<E> extends AbstractSetTester<E> {
+ public void testHashCode() {
+ int expectedHashCode = 0;
+ for (E element : getSampleElements()) {
+ expectedHashCode += ((element == null) ? 0 : element.hashCode());
+ }
+ assertEquals(
+ "A Set's hashCode() should be the sum of those of its elements.",
+ expectedHashCode, getSet().hashCode());
+ }
+
+ @CollectionSize.Require(absent=CollectionSize.ZERO)
+ @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+ public void testHashCode_containingNull() {
+ Collection<E> elements = getSampleElements(getNumElements() - 1);
+ int expectedHashCode = 0;
+ for (E element : elements) {
+ expectedHashCode += ((element == null) ? 0 : element.hashCode());
+ }
+
+ elements.add(null);
+ collection = getSubjectGenerator().create(elements.toArray());
+ assertEquals(
+ "A Set's hashCode() should be the sum of those of its elements (with "
+ + "a null element counting as having a hash of zero).",
+ expectedHashCode, getSet().hashCode());
+ }
+
+ /**
+ * Returns the {@link Method} instances for the test methods in this class
+ * which call {@code hashCode()} on the set values so that set tests on
+ * unhashable objects can suppress it with
+ * {@code FeatureSpecificTestSuiteBuilder.suppressing()}.
+ */
+ public static Method[] getHashCodeMethods() {
+ try {
+ return new Method[] {
+ SetHashCodeTester.class.getMethod("testHashCode"),
+ SetHashCodeTester.class.getMethod("testHashCode_containingNull") };
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/testfw/com/google/common/collect/testing/testers/SetRemoveTester.java b/testfw/com/google/common/collect/testing/testers/SetRemoveTester.java
new file mode 100644
index 0000000..9d5763f
--- /dev/null
+++ b/testfw/com/google/common/collect/testing/testers/SetRemoveTester.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE;
+import com.google.common.collect.testing.features.CollectionSize;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+/**
+ * A generic JUnit test which tests remove operations on a set. Can't be
+ * invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * @author George van den Driessche
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class SetRemoveTester<E> extends AbstractSetTester<E> {
+ @CollectionFeature.Require(SUPPORTS_REMOVE)
+ @CollectionSize.Require(absent = ZERO)
+ public void testRemove_present() {
+ getSet().remove(samples.e0);
+ assertFalse("After remove(present) a set should not contain "
+ + "the removed element.",
+ getSet().contains(samples.e0));
+ }
+}
diff --git a/testfw/testfw.iml b/testfw/testfw.iml
new file mode 100644
index 0000000..0827101
--- /dev/null
+++ b/testfw/testfw.iml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module relativePaths="true" type="JAVA_MODULE" version="4">
+ <component name="NewModuleRootManager" inherit-compiler-output="true">
+ <exclude-output />
+ <content url="file://$MODULE_DIR$">
+ <sourceFolder url="file://$MODULE_DIR$" isTestSource="false" />
+ </content>
+ <orderEntry type="inheritedJdk" />
+ <orderEntry type="sourceFolder" forTests="false" />
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../lib/junit.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ </component>
+</module>
+